@mastra/server 1.15.0 → 1.16.0-alpha.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +55 -0
- package/dist/_types/@internal_core/dist/index.d.ts +7 -0
- package/dist/{chunk-47RDD2HN.js → chunk-APJA4LIB.js} +4 -3
- package/dist/chunk-APJA4LIB.js.map +1 -0
- package/dist/{chunk-7D3YBNO6.cjs → chunk-FOHX5HVN.cjs} +4 -3
- package/dist/chunk-FOHX5HVN.cjs.map +1 -0
- package/dist/{chunk-2SQXNXDG.cjs → chunk-FXX6WI5F.cjs} +6 -3
- package/dist/chunk-FXX6WI5F.cjs.map +1 -0
- package/dist/{chunk-P4GHYEST.js → chunk-K5SP7SOS.js} +18 -3
- package/dist/chunk-K5SP7SOS.js.map +1 -0
- package/dist/{chunk-3KRZUGE2.cjs → chunk-LG2MUCSW.cjs} +22 -19
- package/dist/chunk-LG2MUCSW.cjs.map +1 -0
- package/dist/{chunk-XJ4C64FH.cjs → chunk-MPXNKSVP.cjs} +21 -21
- package/dist/{chunk-XJ4C64FH.cjs.map → chunk-MPXNKSVP.cjs.map} +1 -1
- package/dist/{chunk-M2PIFW7O.cjs → chunk-N6ZHI7A3.cjs} +333 -58
- package/dist/chunk-N6ZHI7A3.cjs.map +1 -0
- package/dist/{chunk-QVMLEJ63.cjs → chunk-OMNWTK4B.cjs} +18 -2
- package/dist/chunk-OMNWTK4B.cjs.map +1 -0
- package/dist/{chunk-BN5YN4UU.js → chunk-R344LGXP.js} +9 -6
- package/dist/chunk-R344LGXP.js.map +1 -0
- package/dist/{chunk-5N4O5XJZ.js → chunk-RFO7PBA6.js} +86 -8
- package/dist/chunk-RFO7PBA6.js.map +1 -0
- package/dist/{chunk-H37CMPNZ.js → chunk-UYAZFEAW.js} +6 -3
- package/dist/chunk-UYAZFEAW.js.map +1 -0
- package/dist/{chunk-NDI2C7UD.js → chunk-VD26CDFT.js} +281 -9
- package/dist/chunk-VD26CDFT.js.map +1 -0
- package/dist/{chunk-EYPXYWPY.js → chunk-Y452XTPZ.js} +3 -3
- package/dist/{chunk-EYPXYWPY.js.map → chunk-Y452XTPZ.js.map} +1 -1
- package/dist/{chunk-KTKTSTDR.cjs → chunk-ZHVL7YBO.cjs} +91 -7
- package/dist/chunk-ZHVL7YBO.cjs.map +1 -0
- package/dist/docs/SKILL.md +2 -1
- package/dist/docs/assets/SOURCE_MAP.json +1 -1
- package/dist/docs/references/docs-server-middleware.md +237 -0
- package/dist/docs/references/reference-server-mastra-server.md +3 -2
- package/dist/server/auth/helpers.d.ts +7 -0
- package/dist/server/auth/helpers.d.ts.map +1 -1
- package/dist/server/auth/index.cjs +16 -12
- package/dist/server/auth/index.js +1 -1
- package/dist/server/handlers/datasets.cjs +33 -21
- package/dist/server/handlers/datasets.d.ts +814 -472
- package/dist/server/handlers/datasets.d.ts.map +1 -1
- package/dist/server/handlers/datasets.js +1 -1
- package/dist/server/handlers/observability-new-endpoints.cjs +19 -19
- package/dist/server/handlers/observability-new-endpoints.d.ts +8 -0
- package/dist/server/handlers/observability-new-endpoints.d.ts.map +1 -1
- package/dist/server/handlers/observability-new-endpoints.js +1 -1
- package/dist/server/handlers/observability.cjs +24 -24
- package/dist/server/handlers/observability.js +2 -2
- package/dist/server/handlers/scores.cjs +7 -7
- package/dist/server/handlers/scores.d.ts +10 -0
- package/dist/server/handlers/scores.d.ts.map +1 -1
- package/dist/server/handlers/scores.js +1 -1
- package/dist/server/handlers.cjs +4 -4
- package/dist/server/handlers.js +2 -2
- package/dist/server/schemas/datasets.d.ts +141 -0
- package/dist/server/schemas/datasets.d.ts.map +1 -1
- package/dist/server/schemas/index.cjs +69 -45
- package/dist/server/schemas/index.js +2 -2
- package/dist/server/schemas/scores.d.ts +8 -0
- package/dist/server/schemas/scores.d.ts.map +1 -1
- package/dist/server/server-adapter/index.cjs +58 -53
- package/dist/server/server-adapter/index.cjs.map +1 -1
- package/dist/server/server-adapter/index.js +11 -6
- package/dist/server/server-adapter/index.js.map +1 -1
- package/dist/server/server-adapter/routes/datasets.d.ts +339 -1
- package/dist/server/server-adapter/routes/datasets.d.ts.map +1 -1
- package/dist/server/server-adapter/routes/observability.d.ts +4 -0
- package/dist/server/server-adapter/routes/observability.d.ts.map +1 -1
- package/dist/server/server-adapter/routes/scorers.d.ts +10 -0
- package/dist/server/server-adapter/routes/scorers.d.ts.map +1 -1
- package/package.json +5 -5
- package/dist/chunk-2SQXNXDG.cjs.map +0 -1
- package/dist/chunk-3KRZUGE2.cjs.map +0 -1
- package/dist/chunk-47RDD2HN.js.map +0 -1
- package/dist/chunk-5N4O5XJZ.js.map +0 -1
- package/dist/chunk-7D3YBNO6.cjs.map +0 -1
- package/dist/chunk-BN5YN4UU.js.map +0 -1
- package/dist/chunk-H37CMPNZ.js.map +0 -1
- package/dist/chunk-KTKTSTDR.cjs.map +0 -1
- package/dist/chunk-M2PIFW7O.cjs.map +0 -1
- package/dist/chunk-NDI2C7UD.js.map +0 -1
- package/dist/chunk-P4GHYEST.js.map +0 -1
- package/dist/chunk-QVMLEJ63.cjs.map +0 -1
|
@@ -9,6 +9,10 @@ var z__default = /*#__PURE__*/_interopDefault(z);
|
|
|
9
9
|
|
|
10
10
|
var jsonSchemaObject = z__default.default.lazy(() => z__default.default.record(z__default.default.string(), z__default.default.unknown()));
|
|
11
11
|
var jsonSchemaField = z__default.default.union([jsonSchemaObject, z__default.default.null()]).optional();
|
|
12
|
+
var datasetItemSourceSchema = z__default.default.object({
|
|
13
|
+
type: z__default.default.enum(["csv", "json", "trace", "llm", "experiment-result"]).describe("How this item was created"),
|
|
14
|
+
referenceId: z__default.default.string().optional().describe("Reference identifier (e.g., trace id, csv filename)")
|
|
15
|
+
}).optional().describe("Source/provenance of this dataset item");
|
|
12
16
|
var datasetIdPathParams = z__default.default.object({
|
|
13
17
|
datasetId: z__default.default.string().describe("Unique identifier for the dataset")
|
|
14
18
|
});
|
|
@@ -22,6 +26,11 @@ var datasetAndExperimentIdPathParams = z__default.default.object({
|
|
|
22
26
|
datasetId: z__default.default.string().describe("Unique identifier for the dataset"),
|
|
23
27
|
experimentId: z__default.default.string().describe("Unique identifier for the experiment")
|
|
24
28
|
});
|
|
29
|
+
var experimentResultIdPathParams = z__default.default.object({
|
|
30
|
+
datasetId: z__default.default.string().describe("Unique identifier for the dataset"),
|
|
31
|
+
experimentId: z__default.default.string().describe("Unique identifier for the experiment"),
|
|
32
|
+
resultId: z__default.default.string().describe("Unique identifier for the experiment result")
|
|
33
|
+
});
|
|
25
34
|
var datasetAndItemIdPathParams = z__default.default.object({
|
|
26
35
|
datasetId: z__default.default.string().describe("Unique identifier for the dataset"),
|
|
27
36
|
itemId: z__default.default.string().describe("Unique identifier for the dataset item")
|
|
@@ -43,7 +52,9 @@ var createDatasetBodySchema = z__default.default.object({
|
|
|
43
52
|
metadata: z__default.default.record(z__default.default.string(), z__default.default.unknown()).optional().describe("Additional metadata"),
|
|
44
53
|
inputSchema: jsonSchemaField.describe("JSON Schema for validating item input"),
|
|
45
54
|
groundTruthSchema: jsonSchemaField.describe("JSON Schema for validating item groundTruth"),
|
|
46
|
-
requestContextSchema: jsonSchemaField.describe("JSON Schema describing expected request context shape")
|
|
55
|
+
requestContextSchema: jsonSchemaField.describe("JSON Schema describing expected request context shape"),
|
|
56
|
+
targetType: z__default.default.string().optional().describe("Target entity type (e.g. agent, workflow, scorer)"),
|
|
57
|
+
targetIds: z__default.default.array(z__default.default.string()).optional().describe("IDs of target entities this dataset is attached to")
|
|
47
58
|
});
|
|
48
59
|
var updateDatasetBodySchema = z__default.default.object({
|
|
49
60
|
name: z__default.default.string().optional().describe("Name of the dataset"),
|
|
@@ -51,25 +62,31 @@ var updateDatasetBodySchema = z__default.default.object({
|
|
|
51
62
|
metadata: z__default.default.record(z__default.default.string(), z__default.default.unknown()).optional().describe("Additional metadata"),
|
|
52
63
|
inputSchema: jsonSchemaField.describe("JSON Schema for validating item input"),
|
|
53
64
|
groundTruthSchema: jsonSchemaField.describe("JSON Schema for validating item groundTruth"),
|
|
54
|
-
requestContextSchema: jsonSchemaField.describe("JSON Schema describing expected request context shape")
|
|
65
|
+
requestContextSchema: jsonSchemaField.describe("JSON Schema describing expected request context shape"),
|
|
66
|
+
tags: z__default.default.array(z__default.default.string()).optional().describe("Tag definitions for categorizing experiment results"),
|
|
67
|
+
targetType: z__default.default.string().optional().describe("Target entity type (e.g. agent, workflow, scorer)"),
|
|
68
|
+
targetIds: z__default.default.array(z__default.default.string()).optional().describe("IDs of target entities this dataset is attached to")
|
|
55
69
|
});
|
|
56
70
|
var addItemBodySchema = z__default.default.object({
|
|
57
71
|
input: z__default.default.unknown().describe("Input data for the dataset item"),
|
|
58
72
|
groundTruth: z__default.default.unknown().optional().describe("Expected output for comparison"),
|
|
59
73
|
requestContext: z__default.default.record(z__default.default.string(), z__default.default.unknown()).optional().describe("Request context preset for this item"),
|
|
60
|
-
metadata: z__default.default.record(z__default.default.string(), z__default.default.unknown()).optional().describe("Additional metadata")
|
|
74
|
+
metadata: z__default.default.record(z__default.default.string(), z__default.default.unknown()).optional().describe("Additional metadata"),
|
|
75
|
+
source: datasetItemSourceSchema
|
|
61
76
|
});
|
|
62
77
|
var updateItemBodySchema = z__default.default.object({
|
|
63
78
|
input: z__default.default.unknown().optional().describe("Input data for the dataset item"),
|
|
64
79
|
groundTruth: z__default.default.unknown().optional().describe("Expected output for comparison"),
|
|
65
80
|
requestContext: z__default.default.record(z__default.default.string(), z__default.default.unknown()).optional().describe("Request context preset for this item"),
|
|
66
|
-
metadata: z__default.default.record(z__default.default.string(), z__default.default.unknown()).optional().describe("Additional metadata")
|
|
81
|
+
metadata: z__default.default.record(z__default.default.string(), z__default.default.unknown()).optional().describe("Additional metadata"),
|
|
82
|
+
source: datasetItemSourceSchema
|
|
67
83
|
});
|
|
68
84
|
var triggerExperimentBodySchema = z__default.default.object({
|
|
69
85
|
targetType: z__default.default.enum(["agent", "workflow", "scorer"]).describe("Type of target to run against"),
|
|
70
86
|
targetId: z__default.default.string().describe("ID of the target"),
|
|
71
87
|
scorerIds: z__default.default.array(z__default.default.string()).optional().describe("IDs of scorers to apply"),
|
|
72
88
|
version: z__default.default.coerce.number().int().optional().describe("Pin to specific dataset version"),
|
|
89
|
+
agentVersion: z__default.default.string().optional().describe("Agent version ID to use for experiment"),
|
|
73
90
|
maxConcurrency: z__default.default.number().optional().describe("Maximum concurrent executions"),
|
|
74
91
|
requestContext: z__default.default.record(z__default.default.string(), z__default.default.unknown()).optional().describe("Global request context passed to the target")
|
|
75
92
|
});
|
|
@@ -85,6 +102,9 @@ var datasetResponseSchema = z__default.default.object({
|
|
|
85
102
|
inputSchema: z__default.default.record(z__default.default.string(), z__default.default.unknown()).optional(),
|
|
86
103
|
groundTruthSchema: z__default.default.record(z__default.default.string(), z__default.default.unknown()).optional(),
|
|
87
104
|
requestContextSchema: z__default.default.record(z__default.default.string(), z__default.default.unknown()).optional(),
|
|
105
|
+
tags: z__default.default.array(z__default.default.string()).optional().nullable(),
|
|
106
|
+
targetType: z__default.default.string().optional().nullable(),
|
|
107
|
+
targetIds: z__default.default.array(z__default.default.string()).optional().nullable(),
|
|
88
108
|
version: z__default.default.number().int(),
|
|
89
109
|
createdAt: z__default.default.coerce.date(),
|
|
90
110
|
updatedAt: z__default.default.coerce.date()
|
|
@@ -97,6 +117,7 @@ var datasetItemResponseSchema = z__default.default.object({
|
|
|
97
117
|
groundTruth: z__default.default.unknown().optional(),
|
|
98
118
|
requestContext: z__default.default.record(z__default.default.string(), z__default.default.unknown()).optional(),
|
|
99
119
|
metadata: z__default.default.record(z__default.default.string(), z__default.default.unknown()).optional(),
|
|
120
|
+
source: datasetItemSourceSchema,
|
|
100
121
|
createdAt: z__default.default.coerce.date(),
|
|
101
122
|
updatedAt: z__default.default.coerce.date()
|
|
102
123
|
});
|
|
@@ -104,6 +125,7 @@ var experimentResponseSchema = z__default.default.object({
|
|
|
104
125
|
id: z__default.default.string(),
|
|
105
126
|
datasetId: z__default.default.string().nullable(),
|
|
106
127
|
datasetVersion: z__default.default.number().int().nullable(),
|
|
128
|
+
agentVersion: z__default.default.string().nullable().optional(),
|
|
107
129
|
targetType: z__default.default.enum(["agent", "workflow", "scorer", "processor"]),
|
|
108
130
|
targetId: z__default.default.string(),
|
|
109
131
|
name: z__default.default.string().optional(),
|
|
@@ -143,8 +165,14 @@ var experimentResultResponseSchema = z__default.default.object({
|
|
|
143
165
|
completedAt: z__default.default.coerce.date(),
|
|
144
166
|
retryCount: z__default.default.number(),
|
|
145
167
|
traceId: z__default.default.string().nullable(),
|
|
168
|
+
status: z__default.default.enum(["needs-review", "reviewed", "complete"]).nullable().optional(),
|
|
169
|
+
tags: z__default.default.array(z__default.default.string()).nullable().optional(),
|
|
146
170
|
createdAt: z__default.default.coerce.date()
|
|
147
171
|
});
|
|
172
|
+
var updateExperimentResultBodySchema = z__default.default.object({
|
|
173
|
+
status: z__default.default.enum(["needs-review", "reviewed", "complete"]).nullable().optional(),
|
|
174
|
+
tags: z__default.default.array(z__default.default.string()).optional()
|
|
175
|
+
});
|
|
148
176
|
var comparisonItemSchema = z__default.default.object({
|
|
149
177
|
itemId: z__default.default.string(),
|
|
150
178
|
input: z__default.default.unknown().nullable(),
|
|
@@ -244,7 +272,8 @@ var batchInsertItemsBodySchema = z__default.default.object({
|
|
|
244
272
|
input: z__default.default.unknown(),
|
|
245
273
|
groundTruth: z__default.default.unknown().optional(),
|
|
246
274
|
requestContext: z__default.default.record(z__default.default.string(), z__default.default.unknown()).optional(),
|
|
247
|
-
metadata: z__default.default.record(z__default.default.string(), z__default.default.unknown()).optional()
|
|
275
|
+
metadata: z__default.default.record(z__default.default.string(), z__default.default.unknown()).optional(),
|
|
276
|
+
source: datasetItemSourceSchema
|
|
248
277
|
})
|
|
249
278
|
)
|
|
250
279
|
});
|
|
@@ -259,12 +288,63 @@ var batchDeleteItemsResponseSchema = z__default.default.object({
|
|
|
259
288
|
success: z__default.default.boolean(),
|
|
260
289
|
deletedCount: z__default.default.number()
|
|
261
290
|
});
|
|
291
|
+
var generateItemsBodySchema = z__default.default.object({
|
|
292
|
+
modelId: z__default.default.string().describe('Model identifier in "provider/model" format (e.g., "openai/gpt-4o")'),
|
|
293
|
+
prompt: z__default.default.string().describe("Description of the kind of test data to generate"),
|
|
294
|
+
count: z__default.default.number().int().min(1).max(50).default(5).describe("Number of items to generate"),
|
|
295
|
+
agentContext: z__default.default.object({
|
|
296
|
+
description: z__default.default.string().optional(),
|
|
297
|
+
instructions: z__default.default.string().optional(),
|
|
298
|
+
tools: z__default.default.array(z__default.default.string()).optional()
|
|
299
|
+
}).optional().describe("Context about the agent to generate relevant test data")
|
|
300
|
+
});
|
|
301
|
+
var generatedItemSchema = z__default.default.object({
|
|
302
|
+
input: z__default.default.unknown(),
|
|
303
|
+
groundTruth: z__default.default.unknown().optional()
|
|
304
|
+
});
|
|
305
|
+
var generateItemsResponseSchema = z__default.default.object({
|
|
306
|
+
items: z__default.default.array(generatedItemSchema)
|
|
307
|
+
});
|
|
308
|
+
var clusterFailuresBodySchema = z__default.default.object({
|
|
309
|
+
modelId: z__default.default.string().describe('Model identifier in "provider/model" format (e.g., "openai/gpt-4o")'),
|
|
310
|
+
items: z__default.default.array(
|
|
311
|
+
z__default.default.object({
|
|
312
|
+
id: z__default.default.string(),
|
|
313
|
+
input: z__default.default.unknown(),
|
|
314
|
+
output: z__default.default.unknown().optional(),
|
|
315
|
+
error: z__default.default.string().optional(),
|
|
316
|
+
scores: z__default.default.record(z__default.default.string(), z__default.default.number()).optional(),
|
|
317
|
+
existingTags: z__default.default.array(z__default.default.string()).optional().describe("Tags already applied to this item")
|
|
318
|
+
})
|
|
319
|
+
).min(1).max(200).describe("Failure items to cluster"),
|
|
320
|
+
availableTags: z__default.default.array(z__default.default.string()).optional().describe("Existing tag vocabulary from the dataset. The LLM should prefer reusing these tags when applicable."),
|
|
321
|
+
prompt: z__default.default.string().optional().describe('Optional user instructions to guide the analysis (e.g., "focus on tool usage failures")')
|
|
322
|
+
});
|
|
323
|
+
var failureClusterSchema = z__default.default.object({
|
|
324
|
+
id: z__default.default.string().describe("A unique cluster identifier"),
|
|
325
|
+
label: z__default.default.string().describe("Short label for this failure pattern"),
|
|
326
|
+
description: z__default.default.string().describe("Description of the common pattern"),
|
|
327
|
+
itemIds: z__default.default.array(z__default.default.string()).describe("IDs of items belonging to this cluster")
|
|
328
|
+
});
|
|
329
|
+
var clusterFailuresResponseSchema = z__default.default.object({
|
|
330
|
+
clusters: z__default.default.array(failureClusterSchema),
|
|
331
|
+
/** Per-item proposed tag assignments. Each entry maps an item ID to the tags the LLM suggests adding. */
|
|
332
|
+
proposedTags: z__default.default.array(
|
|
333
|
+
z__default.default.object({
|
|
334
|
+
itemId: z__default.default.string(),
|
|
335
|
+
tags: z__default.default.array(z__default.default.string()),
|
|
336
|
+
reason: z__default.default.string().describe("Brief explanation of why these tags were assigned to this item")
|
|
337
|
+
})
|
|
338
|
+
).optional()
|
|
339
|
+
});
|
|
262
340
|
|
|
263
341
|
exports.addItemBodySchema = addItemBodySchema;
|
|
264
342
|
exports.batchDeleteItemsBodySchema = batchDeleteItemsBodySchema;
|
|
265
343
|
exports.batchDeleteItemsResponseSchema = batchDeleteItemsResponseSchema;
|
|
266
344
|
exports.batchInsertItemsBodySchema = batchInsertItemsBodySchema;
|
|
267
345
|
exports.batchInsertItemsResponseSchema = batchInsertItemsResponseSchema;
|
|
346
|
+
exports.clusterFailuresBodySchema = clusterFailuresBodySchema;
|
|
347
|
+
exports.clusterFailuresResponseSchema = clusterFailuresResponseSchema;
|
|
268
348
|
exports.compareExperimentsBodySchema = compareExperimentsBodySchema;
|
|
269
349
|
exports.comparisonResponseSchema = comparisonResponseSchema;
|
|
270
350
|
exports.createDatasetBodySchema = createDatasetBodySchema;
|
|
@@ -277,8 +357,11 @@ exports.datasetResponseSchema = datasetResponseSchema;
|
|
|
277
357
|
exports.datasetVersionResponseSchema = datasetVersionResponseSchema;
|
|
278
358
|
exports.experimentIdPathParams = experimentIdPathParams;
|
|
279
359
|
exports.experimentResponseSchema = experimentResponseSchema;
|
|
360
|
+
exports.experimentResultIdPathParams = experimentResultIdPathParams;
|
|
280
361
|
exports.experimentResultResponseSchema = experimentResultResponseSchema;
|
|
281
362
|
exports.experimentSummaryResponseSchema = experimentSummaryResponseSchema;
|
|
363
|
+
exports.generateItemsBodySchema = generateItemsBodySchema;
|
|
364
|
+
exports.generateItemsResponseSchema = generateItemsResponseSchema;
|
|
282
365
|
exports.itemIdPathParams = itemIdPathParams;
|
|
283
366
|
exports.itemVersionResponseSchema = itemVersionResponseSchema;
|
|
284
367
|
exports.listDatasetVersionsResponseSchema = listDatasetVersionsResponseSchema;
|
|
@@ -292,6 +375,7 @@ exports.paginationQuerySchema = paginationQuerySchema;
|
|
|
292
375
|
exports.scorerResultSchema = scorerResultSchema;
|
|
293
376
|
exports.triggerExperimentBodySchema = triggerExperimentBodySchema;
|
|
294
377
|
exports.updateDatasetBodySchema = updateDatasetBodySchema;
|
|
378
|
+
exports.updateExperimentResultBodySchema = updateExperimentResultBodySchema;
|
|
295
379
|
exports.updateItemBodySchema = updateItemBodySchema;
|
|
296
|
-
//# sourceMappingURL=chunk-
|
|
297
|
-
//# sourceMappingURL=chunk-
|
|
380
|
+
//# sourceMappingURL=chunk-ZHVL7YBO.cjs.map
|
|
381
|
+
//# sourceMappingURL=chunk-ZHVL7YBO.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/server/schemas/datasets.ts"],"names":["z","paginationInfoSchema"],"mappings":";;;;;;;;;AAQA,IAAM,gBAAA,GAAuDA,kBAAA,CAAE,IAAA,CAAK,MAAMA,kBAAA,CAAE,MAAA,CAAOA,kBAAA,CAAE,MAAA,EAAO,EAAGA,kBAAA,CAAE,OAAA,EAAS,CAAC,CAAA;AAG3G,IAAM,eAAA,GAAkBA,kBAAA,CAAE,KAAA,CAAM,CAAC,gBAAA,EAAkBA,mBAAE,IAAA,EAAM,CAAC,CAAA,CAAE,QAAA,EAAS;AAGvE,IAAM,uBAAA,GAA0BA,mBAC7B,MAAA,CAAO;AAAA,EACN,IAAA,EAAMA,kBAAA,CAAE,IAAA,CAAK,CAAC,KAAA,EAAO,MAAA,EAAQ,OAAA,EAAS,KAAA,EAAO,mBAAmB,CAAC,CAAA,CAAE,QAAA,CAAS,2BAA2B,CAAA;AAAA,EACvG,aAAaA,kBAAA,CAAE,MAAA,GAAS,QAAA,EAAS,CAAE,SAAS,qDAAqD;AACnG,CAAC,CAAA,CACA,QAAA,EAAS,CACT,QAAA,CAAS,wCAAwC,CAAA;AAM7C,IAAM,mBAAA,GAAsBA,mBAAE,MAAA,CAAO;AAAA,EAC1C,SAAA,EAAWA,kBAAA,CAAE,MAAA,EAAO,CAAE,SAAS,mCAAmC;AACpE,CAAC;AAEM,IAAM,sBAAA,GAAyBA,mBAAE,MAAA,CAAO;AAAA,EAC7C,YAAA,EAAcA,kBAAA,CAAE,MAAA,EAAO,CAAE,SAAS,sCAAsC;AAC1E,CAAC;AAEM,IAAM,gBAAA,GAAmBA,mBAAE,MAAA,CAAO;AAAA,EACvC,MAAA,EAAQA,kBAAA,CAAE,MAAA,EAAO,CAAE,SAAS,wCAAwC;AACtE,CAAC;AAEM,IAAM,gCAAA,GAAmCA,mBAAE,MAAA,CAAO;AAAA,EACvD,SAAA,EAAWA,kBAAA,CAAE,MAAA,EAAO,CAAE,SAAS,mCAAmC,CAAA;AAAA,EAClE,YAAA,EAAcA,kBAAA,CAAE,MAAA,EAAO,CAAE,SAAS,sCAAsC;AAC1E,CAAC;AAEM,IAAM,4BAAA,GAA+BA,mBAAE,MAAA,CAAO;AAAA,EACnD,SAAA,EAAWA,kBAAA,CAAE,MAAA,EAAO,CAAE,SAAS,mCAAmC,CAAA;AAAA,EAClE,YAAA,EAAcA,kBAAA,CAAE,MAAA,EAAO,CAAE,SAAS,sCAAsC,CAAA;AAAA,EACxE,QAAA,EAAUA,kBAAA,CAAE,MAAA,EAAO,CAAE,SAAS,6CAA6C;AAC7E,CAAC;AAEM,IAAM,0BAAA,GAA6BA,mBAAE,MAAA,CAAO;AAAA,EACjD,SAAA,EAAWA,kBAAA,CAAE,MAAA,EAAO,CAAE,SAAS,mCAAmC,CAAA;AAAA,EAClE,MAAA,EAAQA,kBAAA,CAAE,MAAA,EAAO,CAAE,SAAS,wCAAwC;AACtE,CAAC;AAMM,IAAM,qBAAA,GAAwBA,mBAAE,MAAA,CAAO;AAAA,EAC5C,IAAA,EAAMA,mBAAE,MAAA,CAAO,MAAA,GAAS,QAAA,EAAS,CAAE,QAAQ,CAAC,CAAA;AAAA,EAC5C,OAAA,EAASA,mBAAE,MAAA,CAAO,MAAA,GAAS,QAAA,EAAS,CAAE,QAAQ,EAAE;AAClD,CAAC;AAEM,IAAM,oBAAA,GAAuBA,mBAAE,MAAA,CAAO;AAAA,EAC3C,IAAA,EAAMA,mBAAE,MAAA,CAAO,MAAA,GAAS,QAAA,EAAS,CAAE,QAAQ,CAAC,CAAA;AAAA,EAC5C,OAAA,EAASA,mBAAE,MAAA,CAAO,MAAA,GAAS,QAAA,EAAS,CAAE,QAAQ,EAAE,CAAA;AAAA,EAChD,SAASA,kBAAA,CAAE,MAAA,CAAO,QAAO,CAAE,GAAA,GAAM,QAAA,EAAS;AAAA;AAAA,EAC1C,MAAA,EAAQA,kBAAA,CAAE,MAAA,EAAO,CAAE,QAAA;AACrB,CAAC;AAMM,IAAM,uBAAA,GAA0BA,mBAAE,MAAA,CAAO;AAAA,EAC9C,IAAA,EAAMA,kBAAA,CAAE,MAAA,EAAO,CAAE,SAAS,qBAAqB,CAAA;AAAA,EAC/C,aAAaA,kBAAA,CAAE,MAAA,GAAS,QAAA,EAAS,CAAE,SAAS,4BAA4B,CAAA;AAAA,EACxE,QAAA,EAAUA,kBAAA,CAAE,MAAA,CAAOA,kBAAA,CAAE,MAAA,EAAO,EAAGA,kBAAA,CAAE,OAAA,EAAS,CAAA,CAAE,QAAA,EAAS,CAAE,SAAS,qBAAqB,CAAA;AAAA,EACrF,WAAA,EAAa,eAAA,CAAgB,QAAA,CAAS,uCAAuC,CAAA;AAAA,EAC7E,iBAAA,EAAmB,eAAA,CAAgB,QAAA,CAAS,6CAA6C,CAAA;AAAA,EACzF,oBAAA,EAAsB,eAAA,CAAgB,QAAA,CAAS,uDAAuD,CAAA;AAAA,EACtG,YAAYA,kBAAA,CAAE,MAAA,GAAS,QAAA,EAAS,CAAE,SAAS,mDAAmD,CAAA;AAAA,EAC9F,SAAA,EAAWA,kBAAA,CAAE,KAAA,CAAMA,kBAAA,CAAE,MAAA,EAAQ,CAAA,CAAE,QAAA,EAAS,CAAE,QAAA,CAAS,oDAAoD;AACzG,CAAC;AAEM,IAAM,uBAAA,GAA0BA,mBAAE,MAAA,CAAO;AAAA,EAC9C,MAAMA,kBAAA,CAAE,MAAA,GAAS,QAAA,EAAS,CAAE,SAAS,qBAAqB,CAAA;AAAA,EAC1D,aAAaA,kBAAA,CAAE,MAAA,GAAS,QAAA,EAAS,CAAE,SAAS,4BAA4B,CAAA;AAAA,EACxE,QAAA,EAAUA,kBAAA,CAAE,MAAA,CAAOA,kBAAA,CAAE,MAAA,EAAO,EAAGA,kBAAA,CAAE,OAAA,EAAS,CAAA,CAAE,QAAA,EAAS,CAAE,SAAS,qBAAqB,CAAA;AAAA,EACrF,WAAA,EAAa,eAAA,CAAgB,QAAA,CAAS,uCAAuC,CAAA;AAAA,EAC7E,iBAAA,EAAmB,eAAA,CAAgB,QAAA,CAAS,6CAA6C,CAAA;AAAA,EACzF,oBAAA,EAAsB,eAAA,CAAgB,QAAA,CAAS,uDAAuD,CAAA;AAAA,EACtG,IAAA,EAAMA,kBAAA,CAAE,KAAA,CAAMA,kBAAA,CAAE,MAAA,EAAQ,CAAA,CAAE,QAAA,EAAS,CAAE,QAAA,CAAS,qDAAqD,CAAA;AAAA,EACnG,YAAYA,kBAAA,CAAE,MAAA,GAAS,QAAA,EAAS,CAAE,SAAS,mDAAmD,CAAA;AAAA,EAC9F,SAAA,EAAWA,kBAAA,CAAE,KAAA,CAAMA,kBAAA,CAAE,MAAA,EAAQ,CAAA,CAAE,QAAA,EAAS,CAAE,QAAA,CAAS,oDAAoD;AACzG,CAAC;AAEM,IAAM,iBAAA,GAAoBA,mBAAE,MAAA,CAAO;AAAA,EACxC,KAAA,EAAOA,kBAAA,CAAE,OAAA,EAAQ,CAAE,SAAS,iCAAiC,CAAA;AAAA,EAC7D,aAAaA,kBAAA,CAAE,OAAA,GAAU,QAAA,EAAS,CAAE,SAAS,gCAAgC,CAAA;AAAA,EAC7E,cAAA,EAAgBA,kBAAA,CAAE,MAAA,CAAOA,kBAAA,CAAE,MAAA,EAAO,EAAGA,kBAAA,CAAE,OAAA,EAAS,CAAA,CAAE,QAAA,EAAS,CAAE,SAAS,sCAAsC,CAAA;AAAA,EAC5G,QAAA,EAAUA,kBAAA,CAAE,MAAA,CAAOA,kBAAA,CAAE,MAAA,EAAO,EAAGA,kBAAA,CAAE,OAAA,EAAS,CAAA,CAAE,QAAA,EAAS,CAAE,SAAS,qBAAqB,CAAA;AAAA,EACrF,MAAA,EAAQ;AACV,CAAC;AAEM,IAAM,oBAAA,GAAuBA,mBAAE,MAAA,CAAO;AAAA,EAC3C,OAAOA,kBAAA,CAAE,OAAA,GAAU,QAAA,EAAS,CAAE,SAAS,iCAAiC,CAAA;AAAA,EACxE,aAAaA,kBAAA,CAAE,OAAA,GAAU,QAAA,EAAS,CAAE,SAAS,gCAAgC,CAAA;AAAA,EAC7E,cAAA,EAAgBA,kBAAA,CAAE,MAAA,CAAOA,kBAAA,CAAE,MAAA,EAAO,EAAGA,kBAAA,CAAE,OAAA,EAAS,CAAA,CAAE,QAAA,EAAS,CAAE,SAAS,sCAAsC,CAAA;AAAA,EAC5G,QAAA,EAAUA,kBAAA,CAAE,MAAA,CAAOA,kBAAA,CAAE,MAAA,EAAO,EAAGA,kBAAA,CAAE,OAAA,EAAS,CAAA,CAAE,QAAA,EAAS,CAAE,SAAS,qBAAqB,CAAA;AAAA,EACrF,MAAA,EAAQ;AACV,CAAC;AAEM,IAAM,2BAAA,GAA8BA,mBAAE,MAAA,CAAO;AAAA,EAClD,UAAA,EAAYA,kBAAA,CAAE,IAAA,CAAK,CAAC,OAAA,EAAS,YAAY,QAAQ,CAAC,CAAA,CAAE,QAAA,CAAS,+BAA+B,CAAA;AAAA,EAC5F,QAAA,EAAUA,kBAAA,CAAE,MAAA,EAAO,CAAE,SAAS,kBAAkB,CAAA;AAAA,EAChD,SAAA,EAAWA,kBAAA,CAAE,KAAA,CAAMA,kBAAA,CAAE,MAAA,EAAQ,CAAA,CAAE,QAAA,EAAS,CAAE,QAAA,CAAS,yBAAyB,CAAA;AAAA,EAC5E,OAAA,EAASA,kBAAA,CAAE,MAAA,CAAO,MAAA,EAAO,CAAE,KAAI,CAAE,QAAA,EAAS,CAAE,QAAA,CAAS,iCAAiC,CAAA;AAAA,EACtF,cAAcA,kBAAA,CAAE,MAAA,GAAS,QAAA,EAAS,CAAE,SAAS,wCAAwC,CAAA;AAAA,EACrF,gBAAgBA,kBAAA,CAAE,MAAA,GAAS,QAAA,EAAS,CAAE,SAAS,+BAA+B,CAAA;AAAA,EAC9E,cAAA,EAAgBA,kBAAA,CAAE,MAAA,CAAOA,kBAAA,CAAE,MAAA,EAAO,EAAGA,kBAAA,CAAE,OAAA,EAAS,CAAA,CAAE,QAAA,EAAS,CAAE,SAAS,6CAA6C;AACrH,CAAC;AAEM,IAAM,4BAAA,GAA+BA,mBAAE,MAAA,CAAO;AAAA,EACnD,aAAA,EAAeA,kBAAA,CAAE,MAAA,EAAO,CAAE,SAAS,2BAA2B,CAAA;AAAA,EAC9D,aAAA,EAAeA,kBAAA,CAAE,MAAA,EAAO,CAAE,SAAS,4BAA4B;AACjE,CAAC;AAOM,IAAM,qBAAA,GAAwBA,mBAAE,MAAA,CAAO;AAAA,EAC5C,EAAA,EAAIA,mBAAE,MAAA,EAAO;AAAA,EACb,IAAA,EAAMA,mBAAE,MAAA,EAAO;AAAA,EACf,aAAaA,kBAAA,CAAE,MAAA,EAAO,CAAE,QAAA,GAAW,QAAA,EAAS;AAAA,EAC5C,QAAA,EAAUA,kBAAA,CAAE,MAAA,CAAOA,kBAAA,CAAE,MAAA,EAAO,EAAGA,kBAAA,CAAE,OAAA,EAAS,CAAA,CAAE,QAAA,EAAS,CAAE,QAAA,EAAS;AAAA,EAChE,WAAA,EAAaA,kBAAA,CAAE,MAAA,CAAOA,kBAAA,CAAE,MAAA,IAAUA,kBAAA,CAAE,OAAA,EAAS,CAAA,CAAE,QAAA,EAAS;AAAA,EACxD,iBAAA,EAAmBA,kBAAA,CAAE,MAAA,CAAOA,kBAAA,CAAE,MAAA,IAAUA,kBAAA,CAAE,OAAA,EAAS,CAAA,CAAE,QAAA,EAAS;AAAA,EAC9D,oBAAA,EAAsBA,kBAAA,CAAE,MAAA,CAAOA,kBAAA,CAAE,MAAA,IAAUA,kBAAA,CAAE,OAAA,EAAS,CAAA,CAAE,QAAA,EAAS;AAAA,EACjE,IAAA,EAAMA,mBAAE,KAAA,CAAMA,kBAAA,CAAE,QAAQ,CAAA,CAAE,QAAA,EAAS,CAAE,QAAA,EAAS;AAAA,EAC9C,YAAYA,kBAAA,CAAE,MAAA,EAAO,CAAE,QAAA,GAAW,QAAA,EAAS;AAAA,EAC3C,SAAA,EAAWA,mBAAE,KAAA,CAAMA,kBAAA,CAAE,QAAQ,CAAA,CAAE,QAAA,EAAS,CAAE,QAAA,EAAS;AAAA,EACnD,OAAA,EAASA,kBAAA,CAAE,MAAA,EAAO,CAAE,GAAA,EAAI;AAAA,EACxB,SAAA,EAAWA,kBAAA,CAAE,MAAA,CAAO,IAAA,EAAK;AAAA,EACzB,SAAA,EAAWA,kBAAA,CAAE,MAAA,CAAO,IAAA;AACtB,CAAC;AAGM,IAAM,yBAAA,GAA4BA,mBAAE,MAAA,CAAO;AAAA,EAChD,EAAA,EAAIA,mBAAE,MAAA,EAAO;AAAA,EACb,SAAA,EAAWA,mBAAE,MAAA,EAAO;AAAA,EACpB,cAAA,EAAgBA,kBAAA,CAAE,MAAA,EAAO,CAAE,GAAA,EAAI;AAAA,EAC/B,KAAA,EAAOA,mBAAE,OAAA,EAAQ;AAAA,EACjB,WAAA,EAAaA,kBAAA,CAAE,OAAA,EAAQ,CAAE,QAAA,EAAS;AAAA,EAClC,cAAA,EAAgBA,kBAAA,CAAE,MAAA,CAAOA,kBAAA,CAAE,MAAA,IAAUA,kBAAA,CAAE,OAAA,EAAS,CAAA,CAAE,QAAA,EAAS;AAAA,EAC3D,QAAA,EAAUA,kBAAA,CAAE,MAAA,CAAOA,kBAAA,CAAE,MAAA,IAAUA,kBAAA,CAAE,OAAA,EAAS,CAAA,CAAE,QAAA,EAAS;AAAA,EACrD,MAAA,EAAQ,uBAAA;AAAA,EACR,SAAA,EAAWA,kBAAA,CAAE,MAAA,CAAO,IAAA,EAAK;AAAA,EACzB,SAAA,EAAWA,kBAAA,CAAE,MAAA,CAAO,IAAA;AACtB,CAAC;AAGM,IAAM,wBAAA,GAA2BA,mBAAE,MAAA,CAAO;AAAA,EAC/C,EAAA,EAAIA,mBAAE,MAAA,EAAO;AAAA,EACb,SAAA,EAAWA,kBAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA,EAC/B,gBAAgBA,kBAAA,CAAE,MAAA,EAAO,CAAE,GAAA,GAAM,QAAA,EAAS;AAAA,EAC1C,cAAcA,kBAAA,CAAE,MAAA,EAAO,CAAE,QAAA,GAAW,QAAA,EAAS;AAAA,EAC7C,UAAA,EAAYA,mBAAE,IAAA,CAAK,CAAC,SAAS,UAAA,EAAY,QAAA,EAAU,WAAW,CAAC,CAAA;AAAA,EAC/D,QAAA,EAAUA,mBAAE,MAAA,EAAO;AAAA,EACnB,IAAA,EAAMA,kBAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA,EAC1B,WAAA,EAAaA,kBAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA,EACjC,QAAA,EAAUA,kBAAA,CAAE,MAAA,CAAOA,kBAAA,CAAE,MAAA,IAAUA,kBAAA,CAAE,OAAA,EAAS,CAAA,CAAE,QAAA,EAAS;AAAA,EACrD,MAAA,EAAQA,mBAAE,IAAA,CAAK,CAAC,WAAW,SAAA,EAAW,WAAA,EAAa,QAAQ,CAAC,CAAA;AAAA,EAC5D,UAAA,EAAYA,mBAAE,MAAA,EAAO;AAAA,EACrB,cAAA,EAAgBA,mBAAE,MAAA,EAAO;AAAA,EACzB,WAAA,EAAaA,mBAAE,MAAA,EAAO;AAAA,EACtB,YAAA,EAAcA,mBAAE,MAAA,EAAO;AAAA,EACvB,SAAA,EAAWA,kBAAA,CAAE,MAAA,CAAO,IAAA,GAAO,QAAA,EAAS;AAAA,EACpC,WAAA,EAAaA,kBAAA,CAAE,MAAA,CAAO,IAAA,GAAO,QAAA,EAAS;AAAA,EACtC,SAAA,EAAWA,kBAAA,CAAE,MAAA,CAAO,IAAA,EAAK;AAAA,EACzB,SAAA,EAAWA,kBAAA,CAAE,MAAA,CAAO,IAAA;AACtB,CAAC;AAGM,IAAM,kBAAA,GAAqBA,mBAAE,MAAA,CAAO;AAAA,EACzC,QAAA,EAAUA,mBAAE,MAAA,EAAO;AAAA,EACnB,UAAA,EAAYA,mBAAE,MAAA,EAAO;AAAA,EACrB,KAAA,EAAOA,kBAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA,EAC3B,MAAA,EAAQA,kBAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA,EAC5B,KAAA,EAAOA,kBAAA,CAAE,MAAA,EAAO,CAAE,QAAA;AACpB,CAAC;AAGM,IAAM,8BAAA,GAAiCA,mBAAE,MAAA,CAAO;AAAA,EACrD,EAAA,EAAIA,mBAAE,MAAA,EAAO;AAAA,EACb,YAAA,EAAcA,mBAAE,MAAA,EAAO;AAAA,EACvB,MAAA,EAAQA,mBAAE,MAAA,EAAO;AAAA,EACjB,oBAAoBA,kBAAA,CAAE,MAAA,EAAO,CAAE,GAAA,GAAM,QAAA,EAAS;AAAA,EAC9C,KAAA,EAAOA,mBAAE,OAAA,EAAQ;AAAA,EACjB,MAAA,EAAQA,kBAAA,CAAE,OAAA,EAAQ,CAAE,QAAA,EAAS;AAAA,EAC7B,WAAA,EAAaA,kBAAA,CAAE,OAAA,EAAQ,CAAE,QAAA,EAAS;AAAA,EAClC,KAAA,EAAOA,mBACJ,MAAA,CAAO;AAAA,IACN,OAAA,EAASA,mBAAE,MAAA,EAAO;AAAA,IAClB,KAAA,EAAOA,kBAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA,IAC3B,IAAA,EAAMA,kBAAA,CAAE,MAAA,EAAO,CAAE,QAAA;AAAS,GAC3B,EACA,QAAA,EAAS;AAAA,EACZ,SAAA,EAAWA,kBAAA,CAAE,MAAA,CAAO,IAAA,EAAK;AAAA,EACzB,WAAA,EAAaA,kBAAA,CAAE,MAAA,CAAO,IAAA,EAAK;AAAA,EAC3B,UAAA,EAAYA,mBAAE,MAAA,EAAO;AAAA,EACrB,OAAA,EAASA,kBAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA,EAC7B,MAAA,EAAQA,kBAAA,CAAE,IAAA,CAAK,CAAC,cAAA,EAAgB,UAAA,EAAY,UAAU,CAAC,CAAA,CAAE,QAAA,EAAS,CAAE,QAAA,EAAS;AAAA,EAC7E,IAAA,EAAMA,mBAAE,KAAA,CAAMA,kBAAA,CAAE,QAAQ,CAAA,CAAE,QAAA,EAAS,CAAE,QAAA,EAAS;AAAA,EAC9C,SAAA,EAAWA,kBAAA,CAAE,MAAA,CAAO,IAAA;AACtB,CAAC;AAEM,IAAM,gCAAA,GAAmCA,mBAAE,MAAA,CAAO;AAAA,EACvD,MAAA,EAAQA,kBAAA,CAAE,IAAA,CAAK,CAAC,cAAA,EAAgB,UAAA,EAAY,UAAU,CAAC,CAAA,CAAE,QAAA,EAAS,CAAE,QAAA,EAAS;AAAA,EAC7E,MAAMA,kBAAA,CAAE,KAAA,CAAMA,mBAAE,MAAA,EAAQ,EAAE,QAAA;AAC5B,CAAC;AAGD,IAAM,oBAAA,GAAuBA,mBAAE,MAAA,CAAO;AAAA,EACpC,MAAA,EAAQA,mBAAE,MAAA,EAAO;AAAA,EACjB,KAAA,EAAOA,kBAAA,CAAE,OAAA,EAAQ,CAAE,QAAA,EAAS;AAAA,EAC5B,WAAA,EAAaA,kBAAA,CAAE,OAAA,EAAQ,CAAE,QAAA,EAAS;AAAA,EAClC,SAASA,kBAAA,CAAE,MAAA;AAAA,IACTA,mBAAE,MAAA,EAAO;AAAA,IACTA,mBACG,MAAA,CAAO;AAAA,MACN,MAAA,EAAQA,kBAAA,CAAE,OAAA,EAAQ,CAAE,QAAA,EAAS;AAAA,MAC7B,MAAA,EAAQA,kBAAA,CAAE,MAAA,CAAOA,kBAAA,CAAE,MAAA,IAAUA,kBAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAU;AAAA,KACnD,EACA,QAAA;AAAS;AAEhB,CAAC,CAAA;AAGM,IAAM,wBAAA,GAA2BA,mBAAE,MAAA,CAAO;AAAA,EAC/C,UAAA,EAAYA,mBAAE,MAAA,EAAO;AAAA,EACrB,KAAA,EAAOA,kBAAA,CAAE,KAAA,CAAM,oBAAoB;AACrC,CAAC;AAIM,IAAM,+BAAA,GAAkCA,mBAAE,MAAA,CAAO;AAAA,EACtD,YAAA,EAAcA,mBAAE,MAAA,EAAO;AAAA,EACvB,MAAA,EAAQA,mBAAE,IAAA,CAAK,CAAC,WAAW,SAAA,EAAW,WAAA,EAAa,QAAQ,CAAC,CAAA;AAAA,EAC5D,UAAA,EAAYA,mBAAE,MAAA,EAAO;AAAA,EACrB,cAAA,EAAgBA,mBAAE,MAAA,EAAO;AAAA,EACzB,WAAA,EAAaA,mBAAE,MAAA,EAAO;AAAA,EACtB,SAAA,EAAWA,kBAAA,CAAE,MAAA,CAAO,IAAA,EAAK;AAAA,EACzB,WAAA,EAAaA,kBAAA,CAAE,MAAA,CAAO,IAAA,GAAO,QAAA,EAAS;AAAA,EACtC,SAASA,kBAAA,CAAE,KAAA;AAAA,IACTA,mBAAE,MAAA,CAAO;AAAA,MACP,MAAA,EAAQA,mBAAE,MAAA,EAAO;AAAA,MACjB,oBAAoBA,kBAAA,CAAE,MAAA,EAAO,CAAE,GAAA,GAAM,QAAA,EAAS;AAAA,MAC9C,KAAA,EAAOA,mBAAE,OAAA,EAAQ;AAAA,MACjB,MAAA,EAAQA,kBAAA,CAAE,OAAA,EAAQ,CAAE,QAAA,EAAS;AAAA,MAC7B,WAAA,EAAaA,kBAAA,CAAE,OAAA,EAAQ,CAAE,QAAA,EAAS;AAAA,MAClC,KAAA,EAAOA,kBAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA,MAC3B,SAAA,EAAWA,kBAAA,CAAE,MAAA,CAAO,IAAA,EAAK;AAAA,MACzB,WAAA,EAAaA,kBAAA,CAAE,MAAA,CAAO,IAAA,EAAK;AAAA,MAC3B,UAAA,EAAYA,mBAAE,MAAA,EAAO;AAAA,MACrB,QAAQA,kBAAA,CAAE,KAAA;AAAA,QACRA,mBAAE,MAAA,CAAO;AAAA,UACP,QAAA,EAAUA,mBAAE,MAAA,EAAO;AAAA,UACnB,UAAA,EAAYA,mBAAE,MAAA,EAAO;AAAA,UACrB,KAAA,EAAOA,kBAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA,UAC3B,MAAA,EAAQA,kBAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA,UAC5B,KAAA,EAAOA,kBAAA,CAAE,MAAA,EAAO,CAAE,QAAA;AAAS,SAC5B;AAAA;AACH,KACD;AAAA;AAEL,CAAC;AAMM,IAAM,0BAAA,GAA6BA,mBAAE,MAAA,CAAO;AAAA,EACjD,QAAA,EAAUA,kBAAA,CAAE,KAAA,CAAM,qBAAqB,CAAA;AAAA,EACvC,UAAA,EAAYC;AACd,CAAC;AAEM,IAAM,uBAAA,GAA0BD,mBAAE,MAAA,CAAO;AAAA,EAC9C,KAAA,EAAOA,kBAAA,CAAE,KAAA,CAAM,yBAAyB,CAAA;AAAA,EACxC,UAAA,EAAYC;AACd,CAAC;AAEM,IAAM,6BAAA,GAAgCD,mBAAE,MAAA,CAAO;AAAA,EACpD,WAAA,EAAaA,kBAAA,CAAE,KAAA,CAAM,wBAAwB,CAAA;AAAA,EAC7C,UAAA,EAAYC;AACd,CAAC;AAEM,IAAM,mCAAA,GAAsCD,mBAAE,MAAA,CAAO;AAAA,EAC1D,OAAA,EAASA,kBAAA,CAAE,KAAA,CAAM,8BAA8B,CAAA;AAAA,EAC/C,UAAA,EAAYC;AACd,CAAC;AAOM,IAAM,4BAAA,GAA+BD,mBAAE,MAAA,CAAO;AAAA,EACnD,SAAA,EAAWA,kBAAA,CAAE,MAAA,EAAO,CAAE,SAAS,mCAAmC,CAAA;AAAA,EAClE,MAAA,EAAQA,kBAAA,CAAE,MAAA,EAAO,CAAE,SAAS,wCAAwC,CAAA;AAAA,EACpE,cAAA,EAAgBA,mBAAE,MAAA,CAAO,MAAA,GAAS,GAAA,EAAI,CAAE,SAAS,wBAAwB;AAC3E,CAAC;AAGM,IAAM,yBAAA,GAA4BA,mBAAE,MAAA,CAAO;AAAA,EAChD,EAAA,EAAIA,mBAAE,MAAA,EAAO;AAAA,EACb,SAAA,EAAWA,mBAAE,MAAA,EAAO;AAAA,EACpB,cAAA,EAAgBA,kBAAA,CAAE,MAAA,EAAO,CAAE,GAAA,EAAI;AAAA,EAC/B,KAAA,EAAOA,mBAAE,OAAA,EAAQ;AAAA,EACjB,WAAA,EAAaA,kBAAA,CAAE,OAAA,EAAQ,CAAE,QAAA,EAAS;AAAA,EAClC,QAAA,EAAUA,kBAAA,CAAE,MAAA,CAAOA,kBAAA,CAAE,MAAA,IAAUA,kBAAA,CAAE,OAAA,EAAS,CAAA,CAAE,QAAA,EAAS;AAAA,EACrD,SAASA,kBAAA,CAAE,MAAA,EAAO,CAAE,GAAA,GAAM,QAAA,EAAS;AAAA,EACnC,SAAA,EAAWA,mBAAE,OAAA,EAAQ;AAAA,EACrB,SAAA,EAAWA,kBAAA,CAAE,MAAA,CAAO,IAAA,EAAK;AAAA,EACzB,SAAA,EAAWA,kBAAA,CAAE,MAAA,CAAO,IAAA;AACtB,CAAC;AAEM,IAAM,8BAAA,GAAiCA,mBAAE,MAAA,CAAO;AAAA,EACrD,OAAA,EAASA,kBAAA,CAAE,KAAA,CAAM,yBAAyB;AAC5C,CAAC;AAGM,IAAM,4BAAA,GAA+BA,mBAAE,MAAA,CAAO;AAAA,EACnD,EAAA,EAAIA,mBAAE,MAAA,EAAO;AAAA,EACb,SAAA,EAAWA,mBAAE,MAAA,EAAO;AAAA,EACpB,OAAA,EAASA,kBAAA,CAAE,MAAA,EAAO,CAAE,GAAA,EAAI;AAAA,EACxB,SAAA,EAAWA,kBAAA,CAAE,MAAA,CAAO,IAAA;AACtB,CAAC;AAEM,IAAM,iCAAA,GAAoCA,mBAAE,MAAA,CAAO;AAAA,EACxD,QAAA,EAAUA,kBAAA,CAAE,KAAA,CAAM,4BAA4B,CAAA;AAAA,EAC9C,UAAA,EAAYC;AACd,CAAC;AAMM,IAAM,0BAAA,GAA6BD,mBAAE,MAAA,CAAO;AAAA,EACjD,OAAOA,kBAAA,CAAE,KAAA;AAAA,IACPA,mBAAE,MAAA,CAAO;AAAA,MACP,KAAA,EAAOA,mBAAE,OAAA,EAAQ;AAAA,MACjB,WAAA,EAAaA,kBAAA,CAAE,OAAA,EAAQ,CAAE,QAAA,EAAS;AAAA,MAClC,cAAA,EAAgBA,kBAAA,CAAE,MAAA,CAAOA,kBAAA,CAAE,MAAA,IAAUA,kBAAA,CAAE,OAAA,EAAS,CAAA,CAAE,QAAA,EAAS;AAAA,MAC3D,QAAA,EAAUA,kBAAA,CAAE,MAAA,CAAOA,kBAAA,CAAE,MAAA,IAAUA,kBAAA,CAAE,OAAA,EAAS,CAAA,CAAE,QAAA,EAAS;AAAA,MACrD,MAAA,EAAQ;AAAA,KACT;AAAA;AAEL,CAAC;AAEM,IAAM,8BAAA,GAAiCA,mBAAE,MAAA,CAAO;AAAA,EACrD,KAAA,EAAOA,kBAAA,CAAE,KAAA,CAAM,yBAAyB,CAAA;AAAA,EACxC,KAAA,EAAOA,mBAAE,MAAA;AACX,CAAC;AAEM,IAAM,0BAAA,GAA6BA,mBAAE,MAAA,CAAO;AAAA,EACjD,OAAA,EAASA,kBAAA,CAAE,KAAA,CAAMA,kBAAA,CAAE,QAAQ;AAC7B,CAAC;AAEM,IAAM,8BAAA,GAAiCA,mBAAE,MAAA,CAAO;AAAA,EACrD,OAAA,EAASA,mBAAE,OAAA,EAAQ;AAAA,EACnB,YAAA,EAAcA,mBAAE,MAAA;AAClB,CAAC;AAMM,IAAM,uBAAA,GAA0BA,mBAAE,MAAA,CAAO;AAAA,EAC9C,OAAA,EAASA,kBAAA,CAAE,MAAA,EAAO,CAAE,SAAS,qEAAqE,CAAA;AAAA,EAClG,MAAA,EAAQA,kBAAA,CAAE,MAAA,EAAO,CAAE,SAAS,kDAAkD,CAAA;AAAA,EAC9E,OAAOA,kBAAA,CAAE,MAAA,EAAO,CAAE,GAAA,GAAM,GAAA,CAAI,CAAC,CAAA,CAAE,GAAA,CAAI,EAAE,CAAA,CAAE,OAAA,CAAQ,CAAC,CAAA,CAAE,SAAS,6BAA6B,CAAA;AAAA,EACxF,YAAA,EAAcA,mBACX,MAAA,CAAO;AAAA,IACN,WAAA,EAAaA,kBAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA,IACjC,YAAA,EAAcA,kBAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA,IAClC,OAAOA,kBAAA,CAAE,KAAA,CAAMA,mBAAE,MAAA,EAAQ,EAAE,QAAA;AAAS,GACrC,CAAA,CACA,QAAA,EAAS,CACT,SAAS,wDAAwD;AACtE,CAAC;AAED,IAAM,mBAAA,GAAsBA,mBAAE,MAAA,CAAO;AAAA,EACnC,KAAA,EAAOA,mBAAE,OAAA,EAAQ;AAAA,EACjB,WAAA,EAAaA,kBAAA,CAAE,OAAA,EAAQ,CAAE,QAAA;AAC3B,CAAC,CAAA;AAEM,IAAM,2BAAA,GAA8BA,mBAAE,MAAA,CAAO;AAAA,EAClD,KAAA,EAAOA,kBAAA,CAAE,KAAA,CAAM,mBAAmB;AACpC,CAAC;AAMM,IAAM,yBAAA,GAA4BA,mBAAE,MAAA,CAAO;AAAA,EAChD,OAAA,EAASA,kBAAA,CAAE,MAAA,EAAO,CAAE,SAAS,qEAAqE,CAAA;AAAA,EAClG,OAAOA,kBAAA,CACJ,KAAA;AAAA,IACCA,mBAAE,MAAA,CAAO;AAAA,MACP,EAAA,EAAIA,mBAAE,MAAA,EAAO;AAAA,MACb,KAAA,EAAOA,mBAAE,OAAA,EAAQ;AAAA,MACjB,MAAA,EAAQA,kBAAA,CAAE,OAAA,EAAQ,CAAE,QAAA,EAAS;AAAA,MAC7B,KAAA,EAAOA,kBAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA,MAC3B,MAAA,EAAQA,kBAAA,CAAE,MAAA,CAAOA,kBAAA,CAAE,MAAA,IAAUA,kBAAA,CAAE,MAAA,EAAQ,CAAA,CAAE,QAAA,EAAS;AAAA,MAClD,YAAA,EAAcA,kBAAA,CAAE,KAAA,CAAMA,kBAAA,CAAE,MAAA,EAAQ,CAAA,CAAE,QAAA,EAAS,CAAE,QAAA,CAAS,mCAAmC;AAAA,KAC1F;AAAA,GACH,CACC,IAAI,CAAC,CAAA,CACL,IAAI,GAAG,CAAA,CACP,SAAS,0BAA0B,CAAA;AAAA,EACtC,aAAA,EAAeA,kBAAA,CACZ,KAAA,CAAMA,kBAAA,CAAE,MAAA,EAAQ,CAAA,CAChB,QAAA,EAAS,CACT,QAAA,CAAS,qGAAqG,CAAA;AAAA,EACjH,QAAQA,kBAAA,CACL,MAAA,GACA,QAAA,EAAS,CACT,SAAS,yFAAyF;AACvG,CAAC;AAED,IAAM,oBAAA,GAAuBA,mBAAE,MAAA,CAAO;AAAA,EACpC,EAAA,EAAIA,kBAAA,CAAE,MAAA,EAAO,CAAE,SAAS,6BAA6B,CAAA;AAAA,EACrD,KAAA,EAAOA,kBAAA,CAAE,MAAA,EAAO,CAAE,SAAS,sCAAsC,CAAA;AAAA,EACjE,WAAA,EAAaA,kBAAA,CAAE,MAAA,EAAO,CAAE,SAAS,mCAAmC,CAAA;AAAA,EACpE,OAAA,EAASA,mBAAE,KAAA,CAAMA,kBAAA,CAAE,QAAQ,CAAA,CAAE,SAAS,wCAAwC;AAChF,CAAC,CAAA;AAEM,IAAM,6BAAA,GAAgCA,mBAAE,MAAA,CAAO;AAAA,EACpD,QAAA,EAAUA,kBAAA,CAAE,KAAA,CAAM,oBAAoB,CAAA;AAAA;AAAA,EAEtC,cAAcA,kBAAA,CACX,KAAA;AAAA,IACCA,mBAAE,MAAA,CAAO;AAAA,MACP,MAAA,EAAQA,mBAAE,MAAA,EAAO;AAAA,MACjB,IAAA,EAAMA,kBAAA,CAAE,KAAA,CAAMA,kBAAA,CAAE,QAAQ,CAAA;AAAA,MACxB,MAAA,EAAQA,kBAAA,CAAE,MAAA,EAAO,CAAE,SAAS,gEAAgE;AAAA,KAC7F;AAAA,IAEF,QAAA;AACL,CAAC","file":"chunk-ZHVL7YBO.cjs","sourcesContent":["import z from 'zod';\nimport { paginationInfoSchema } from './common';\n\n// ============================================================================\n// JSON Schema Types (for inputSchema/groundTruthSchema fields)\n// ============================================================================\n\n// JSON Schema type (simplified for storage - full spec too complex)\nconst jsonSchemaObject: z.ZodType<Record<string, unknown>> = z.lazy(() => z.record(z.string(), z.unknown()));\n\n// JSON Schema field (object or null to disable)\nconst jsonSchemaField = z.union([jsonSchemaObject, z.null()]).optional();\n\n// Dataset item source tracking\nconst datasetItemSourceSchema = z\n .object({\n type: z.enum(['csv', 'json', 'trace', 'llm', 'experiment-result']).describe('How this item was created'),\n referenceId: z.string().optional().describe('Reference identifier (e.g., trace id, csv filename)'),\n })\n .optional()\n .describe('Source/provenance of this dataset item');\n\n// ============================================================================\n// Path Parameter Schemas\n// ============================================================================\n\nexport const datasetIdPathParams = z.object({\n datasetId: z.string().describe('Unique identifier for the dataset'),\n});\n\nexport const experimentIdPathParams = z.object({\n experimentId: z.string().describe('Unique identifier for the experiment'),\n});\n\nexport const itemIdPathParams = z.object({\n itemId: z.string().describe('Unique identifier for the dataset item'),\n});\n\nexport const datasetAndExperimentIdPathParams = z.object({\n datasetId: z.string().describe('Unique identifier for the dataset'),\n experimentId: z.string().describe('Unique identifier for the experiment'),\n});\n\nexport const experimentResultIdPathParams = z.object({\n datasetId: z.string().describe('Unique identifier for the dataset'),\n experimentId: z.string().describe('Unique identifier for the experiment'),\n resultId: z.string().describe('Unique identifier for the experiment result'),\n});\n\nexport const datasetAndItemIdPathParams = z.object({\n datasetId: z.string().describe('Unique identifier for the dataset'),\n itemId: z.string().describe('Unique identifier for the dataset item'),\n});\n\n// ============================================================================\n// Query Parameter Schemas\n// ============================================================================\n\nexport const paginationQuerySchema = z.object({\n page: z.coerce.number().optional().default(0),\n perPage: z.coerce.number().optional().default(10),\n});\n\nexport const listItemsQuerySchema = z.object({\n page: z.coerce.number().optional().default(0),\n perPage: z.coerce.number().optional().default(10),\n version: z.coerce.number().int().optional(), // Optional version filter for snapshot semantics\n search: z.string().optional(),\n});\n\n// ============================================================================\n// Request Body Schemas\n// ============================================================================\n\nexport const createDatasetBodySchema = z.object({\n name: z.string().describe('Name of the dataset'),\n description: z.string().optional().describe('Description of the dataset'),\n metadata: z.record(z.string(), z.unknown()).optional().describe('Additional metadata'),\n inputSchema: jsonSchemaField.describe('JSON Schema for validating item input'),\n groundTruthSchema: jsonSchemaField.describe('JSON Schema for validating item groundTruth'),\n requestContextSchema: jsonSchemaField.describe('JSON Schema describing expected request context shape'),\n targetType: z.string().optional().describe('Target entity type (e.g. agent, workflow, scorer)'),\n targetIds: z.array(z.string()).optional().describe('IDs of target entities this dataset is attached to'),\n});\n\nexport const updateDatasetBodySchema = z.object({\n name: z.string().optional().describe('Name of the dataset'),\n description: z.string().optional().describe('Description of the dataset'),\n metadata: z.record(z.string(), z.unknown()).optional().describe('Additional metadata'),\n inputSchema: jsonSchemaField.describe('JSON Schema for validating item input'),\n groundTruthSchema: jsonSchemaField.describe('JSON Schema for validating item groundTruth'),\n requestContextSchema: jsonSchemaField.describe('JSON Schema describing expected request context shape'),\n tags: z.array(z.string()).optional().describe('Tag definitions for categorizing experiment results'),\n targetType: z.string().optional().describe('Target entity type (e.g. agent, workflow, scorer)'),\n targetIds: z.array(z.string()).optional().describe('IDs of target entities this dataset is attached to'),\n});\n\nexport const addItemBodySchema = z.object({\n input: z.unknown().describe('Input data for the dataset item'),\n groundTruth: z.unknown().optional().describe('Expected output for comparison'),\n requestContext: z.record(z.string(), z.unknown()).optional().describe('Request context preset for this item'),\n metadata: z.record(z.string(), z.unknown()).optional().describe('Additional metadata'),\n source: datasetItemSourceSchema,\n});\n\nexport const updateItemBodySchema = z.object({\n input: z.unknown().optional().describe('Input data for the dataset item'),\n groundTruth: z.unknown().optional().describe('Expected output for comparison'),\n requestContext: z.record(z.string(), z.unknown()).optional().describe('Request context preset for this item'),\n metadata: z.record(z.string(), z.unknown()).optional().describe('Additional metadata'),\n source: datasetItemSourceSchema,\n});\n\nexport const triggerExperimentBodySchema = z.object({\n targetType: z.enum(['agent', 'workflow', 'scorer']).describe('Type of target to run against'),\n targetId: z.string().describe('ID of the target'),\n scorerIds: z.array(z.string()).optional().describe('IDs of scorers to apply'),\n version: z.coerce.number().int().optional().describe('Pin to specific dataset version'),\n agentVersion: z.string().optional().describe('Agent version ID to use for experiment'),\n maxConcurrency: z.number().optional().describe('Maximum concurrent executions'),\n requestContext: z.record(z.string(), z.unknown()).optional().describe('Global request context passed to the target'),\n});\n\nexport const compareExperimentsBodySchema = z.object({\n experimentIdA: z.string().describe('ID of baseline experiment'),\n experimentIdB: z.string().describe('ID of candidate experiment'),\n});\n\n// ============================================================================\n// Response Schemas\n// ============================================================================\n\n// Dataset entity schema\nexport const datasetResponseSchema = z.object({\n id: z.string(),\n name: z.string(),\n description: z.string().optional().nullable(),\n metadata: z.record(z.string(), z.unknown()).optional().nullable(),\n inputSchema: z.record(z.string(), z.unknown()).optional(),\n groundTruthSchema: z.record(z.string(), z.unknown()).optional(),\n requestContextSchema: z.record(z.string(), z.unknown()).optional(),\n tags: z.array(z.string()).optional().nullable(),\n targetType: z.string().optional().nullable(),\n targetIds: z.array(z.string()).optional().nullable(),\n version: z.number().int(),\n createdAt: z.coerce.date(),\n updatedAt: z.coerce.date(),\n});\n\n// Dataset item entity schema\nexport const datasetItemResponseSchema = z.object({\n id: z.string(),\n datasetId: z.string(),\n datasetVersion: z.number().int(),\n input: z.unknown(),\n groundTruth: z.unknown().optional(),\n requestContext: z.record(z.string(), z.unknown()).optional(),\n metadata: z.record(z.string(), z.unknown()).optional(),\n source: datasetItemSourceSchema,\n createdAt: z.coerce.date(),\n updatedAt: z.coerce.date(),\n});\n\n// Experiment entity schema\nexport const experimentResponseSchema = z.object({\n id: z.string(),\n datasetId: z.string().nullable(),\n datasetVersion: z.number().int().nullable(),\n agentVersion: z.string().nullable().optional(),\n targetType: z.enum(['agent', 'workflow', 'scorer', 'processor']),\n targetId: z.string(),\n name: z.string().optional(),\n description: z.string().optional(),\n metadata: z.record(z.string(), z.unknown()).optional(),\n status: z.enum(['pending', 'running', 'completed', 'failed']),\n totalItems: z.number(),\n succeededCount: z.number(),\n failedCount: z.number(),\n skippedCount: z.number(),\n startedAt: z.coerce.date().nullable(),\n completedAt: z.coerce.date().nullable(),\n createdAt: z.coerce.date(),\n updatedAt: z.coerce.date(),\n});\n\n// Scorer result schema\nexport const scorerResultSchema = z.object({\n scorerId: z.string(),\n scorerName: z.string(),\n score: z.number().nullable(),\n reason: z.string().nullable(),\n error: z.string().nullable(),\n});\n\n// Experiment result entity schema\nexport const experimentResultResponseSchema = z.object({\n id: z.string(),\n experimentId: z.string(),\n itemId: z.string(),\n itemDatasetVersion: z.number().int().nullable(),\n input: z.unknown(),\n output: z.unknown().nullable(),\n groundTruth: z.unknown().nullable(),\n error: z\n .object({\n message: z.string(),\n stack: z.string().optional(),\n code: z.string().optional(),\n })\n .nullable(),\n startedAt: z.coerce.date(),\n completedAt: z.coerce.date(),\n retryCount: z.number(),\n traceId: z.string().nullable(),\n status: z.enum(['needs-review', 'reviewed', 'complete']).nullable().optional(),\n tags: z.array(z.string()).nullable().optional(),\n createdAt: z.coerce.date(),\n});\n\nexport const updateExperimentResultBodySchema = z.object({\n status: z.enum(['needs-review', 'reviewed', 'complete']).nullable().optional(),\n tags: z.array(z.string()).optional(),\n});\n\n// Comparison item schema (MVP shape)\nconst comparisonItemSchema = z.object({\n itemId: z.string(),\n input: z.unknown().nullable(),\n groundTruth: z.unknown().nullable(),\n results: z.record(\n z.string(),\n z\n .object({\n output: z.unknown().nullable(),\n scores: z.record(z.string(), z.number().nullable()),\n })\n .nullable(),\n ),\n});\n\n// Comparison result schema\nexport const comparisonResponseSchema = z.object({\n baselineId: z.string(),\n items: z.array(comparisonItemSchema),\n});\n\n// Experiment summary schema (returned by trigger experiment)\n// Note: completedAt is nullable for pending/running experiments (async trigger)\nexport const experimentSummaryResponseSchema = z.object({\n experimentId: z.string(),\n status: z.enum(['pending', 'running', 'completed', 'failed']),\n totalItems: z.number(),\n succeededCount: z.number(),\n failedCount: z.number(),\n startedAt: z.coerce.date(),\n completedAt: z.coerce.date().nullable(),\n results: z.array(\n z.object({\n itemId: z.string(),\n itemDatasetVersion: z.number().int().nullable(),\n input: z.unknown(),\n output: z.unknown().nullable(),\n groundTruth: z.unknown().nullable(),\n error: z.string().nullable(),\n startedAt: z.coerce.date(),\n completedAt: z.coerce.date(),\n retryCount: z.number(),\n scores: z.array(\n z.object({\n scorerId: z.string(),\n scorerName: z.string(),\n score: z.number().nullable(),\n reason: z.string().nullable(),\n error: z.string().nullable(),\n }),\n ),\n }),\n ),\n});\n\n// ============================================================================\n// List Response Schemas\n// ============================================================================\n\nexport const listDatasetsResponseSchema = z.object({\n datasets: z.array(datasetResponseSchema),\n pagination: paginationInfoSchema,\n});\n\nexport const listItemsResponseSchema = z.object({\n items: z.array(datasetItemResponseSchema),\n pagination: paginationInfoSchema,\n});\n\nexport const listExperimentsResponseSchema = z.object({\n experiments: z.array(experimentResponseSchema),\n pagination: paginationInfoSchema,\n});\n\nexport const listExperimentResultsResponseSchema = z.object({\n results: z.array(experimentResultResponseSchema),\n pagination: paginationInfoSchema,\n});\n\n// ============================================================================\n// Version Schemas\n// ============================================================================\n\n// Path params for item version routes\nexport const datasetItemVersionPathParams = z.object({\n datasetId: z.string().describe('Unique identifier for the dataset'),\n itemId: z.string().describe('Unique identifier for the dataset item'),\n datasetVersion: z.coerce.number().int().describe('Dataset version number'),\n});\n\n// Item history row response schema (SCD-2 DatasetItemRow shape)\nexport const itemVersionResponseSchema = z.object({\n id: z.string(),\n datasetId: z.string(),\n datasetVersion: z.number().int(),\n input: z.unknown(),\n groundTruth: z.unknown().optional(),\n metadata: z.record(z.string(), z.unknown()).optional(),\n validTo: z.number().int().nullable(),\n isDeleted: z.boolean(),\n createdAt: z.coerce.date(),\n updatedAt: z.coerce.date(),\n});\n\nexport const listItemVersionsResponseSchema = z.object({\n history: z.array(itemVersionResponseSchema),\n});\n\n// Dataset version response schema\nexport const datasetVersionResponseSchema = z.object({\n id: z.string(),\n datasetId: z.string(),\n version: z.number().int(),\n createdAt: z.coerce.date(),\n});\n\nexport const listDatasetVersionsResponseSchema = z.object({\n versions: z.array(datasetVersionResponseSchema),\n pagination: paginationInfoSchema,\n});\n\n// ============================================================================\n// Batch Operation Schemas\n// ============================================================================\n\nexport const batchInsertItemsBodySchema = z.object({\n items: z.array(\n z.object({\n input: z.unknown(),\n groundTruth: z.unknown().optional(),\n requestContext: z.record(z.string(), z.unknown()).optional(),\n metadata: z.record(z.string(), z.unknown()).optional(),\n source: datasetItemSourceSchema,\n }),\n ),\n});\n\nexport const batchInsertItemsResponseSchema = z.object({\n items: z.array(datasetItemResponseSchema),\n count: z.number(),\n});\n\nexport const batchDeleteItemsBodySchema = z.object({\n itemIds: z.array(z.string()),\n});\n\nexport const batchDeleteItemsResponseSchema = z.object({\n success: z.boolean(),\n deletedCount: z.number(),\n});\n\n// ============================================================================\n// AI Generation Schemas\n// ============================================================================\n\nexport const generateItemsBodySchema = z.object({\n modelId: z.string().describe('Model identifier in \"provider/model\" format (e.g., \"openai/gpt-4o\")'),\n prompt: z.string().describe('Description of the kind of test data to generate'),\n count: z.number().int().min(1).max(50).default(5).describe('Number of items to generate'),\n agentContext: z\n .object({\n description: z.string().optional(),\n instructions: z.string().optional(),\n tools: z.array(z.string()).optional(),\n })\n .optional()\n .describe('Context about the agent to generate relevant test data'),\n});\n\nconst generatedItemSchema = z.object({\n input: z.unknown(),\n groundTruth: z.unknown().optional(),\n});\n\nexport const generateItemsResponseSchema = z.object({\n items: z.array(generatedItemSchema),\n});\n\n// ============================================================================\n// Cluster Failures\n// ============================================================================\n\nexport const clusterFailuresBodySchema = z.object({\n modelId: z.string().describe('Model identifier in \"provider/model\" format (e.g., \"openai/gpt-4o\")'),\n items: z\n .array(\n z.object({\n id: z.string(),\n input: z.unknown(),\n output: z.unknown().optional(),\n error: z.string().optional(),\n scores: z.record(z.string(), z.number()).optional(),\n existingTags: z.array(z.string()).optional().describe('Tags already applied to this item'),\n }),\n )\n .min(1)\n .max(200)\n .describe('Failure items to cluster'),\n availableTags: z\n .array(z.string())\n .optional()\n .describe('Existing tag vocabulary from the dataset. The LLM should prefer reusing these tags when applicable.'),\n prompt: z\n .string()\n .optional()\n .describe('Optional user instructions to guide the analysis (e.g., \"focus on tool usage failures\")'),\n});\n\nconst failureClusterSchema = z.object({\n id: z.string().describe('A unique cluster identifier'),\n label: z.string().describe('Short label for this failure pattern'),\n description: z.string().describe('Description of the common pattern'),\n itemIds: z.array(z.string()).describe('IDs of items belonging to this cluster'),\n});\n\nexport const clusterFailuresResponseSchema = z.object({\n clusters: z.array(failureClusterSchema),\n /** Per-item proposed tag assignments. Each entry maps an item ID to the tags the LLM suggests adding. */\n proposedTags: z\n .array(\n z.object({\n itemId: z.string(),\n tags: z.array(z.string()),\n reason: z.string().describe('Brief explanation of why these tags were assigned to this item'),\n }),\n )\n .optional(),\n});\n"]}
|
package/dist/docs/SKILL.md
CHANGED
|
@@ -3,7 +3,7 @@ name: mastra-server
|
|
|
3
3
|
description: Documentation for @mastra/server. Use when working with @mastra/server APIs, configuration, or implementation.
|
|
4
4
|
metadata:
|
|
5
5
|
package: "@mastra/server"
|
|
6
|
-
version: "1.
|
|
6
|
+
version: "1.16.0-alpha.1"
|
|
7
7
|
---
|
|
8
8
|
|
|
9
9
|
## When to use
|
|
@@ -17,6 +17,7 @@ Read the individual reference documents for detailed explanations and code examp
|
|
|
17
17
|
### Docs
|
|
18
18
|
|
|
19
19
|
- [Custom adapters](references/docs-server-custom-adapters.md) - Create a custom server adapter for frameworks other than Hono or Express.
|
|
20
|
+
- [Middleware](references/docs-server-middleware.md) - Apply custom middleware functions to intercept requests.
|
|
20
21
|
|
|
21
22
|
### Reference
|
|
22
23
|
|
|
@@ -0,0 +1,237 @@
|
|
|
1
|
+
# Middleware
|
|
2
|
+
|
|
3
|
+
Mastra servers can execute custom middleware functions before or after an API route handler is invoked. This is useful for things like authentication, logging, injecting request-specific context or adding CORS headers.
|
|
4
|
+
|
|
5
|
+
A middleware receives the [Hono](https://hono.dev) `Context` (`c`) and a `next` function. If it returns a `Response` the request is short-circuited. Calling `next()` continues processing the next middleware or route handler.
|
|
6
|
+
|
|
7
|
+
```typescript
|
|
8
|
+
import { Mastra } from '@mastra/core'
|
|
9
|
+
|
|
10
|
+
export const mastra = new Mastra({
|
|
11
|
+
server: {
|
|
12
|
+
middleware: [
|
|
13
|
+
{
|
|
14
|
+
handler: async (c, next) => {
|
|
15
|
+
// Example: Add authentication check
|
|
16
|
+
const authHeader = c.req.header('Authorization')
|
|
17
|
+
if (!authHeader) {
|
|
18
|
+
return new Response('Unauthorized', { status: 401 })
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
await next()
|
|
22
|
+
},
|
|
23
|
+
path: '/api/*',
|
|
24
|
+
},
|
|
25
|
+
// Add a global request logger
|
|
26
|
+
async (c, next) => {
|
|
27
|
+
console.log(`${c.req.method} ${c.req.url}`)
|
|
28
|
+
await next()
|
|
29
|
+
},
|
|
30
|
+
],
|
|
31
|
+
},
|
|
32
|
+
})
|
|
33
|
+
```
|
|
34
|
+
|
|
35
|
+
To attach middleware to a single route pass the `middleware` option to `registerApiRoute`:
|
|
36
|
+
|
|
37
|
+
```typescript
|
|
38
|
+
registerApiRoute('/my-custom-route', {
|
|
39
|
+
method: 'GET',
|
|
40
|
+
middleware: [
|
|
41
|
+
async (c, next) => {
|
|
42
|
+
console.log(`${c.req.method} ${c.req.url}`)
|
|
43
|
+
await next()
|
|
44
|
+
},
|
|
45
|
+
],
|
|
46
|
+
handler: async c => {
|
|
47
|
+
const mastra = c.get('mastra')
|
|
48
|
+
return c.json({ message: 'Hello, world!' })
|
|
49
|
+
},
|
|
50
|
+
})
|
|
51
|
+
```
|
|
52
|
+
|
|
53
|
+
## Common examples
|
|
54
|
+
|
|
55
|
+
### Using `RequestContext`
|
|
56
|
+
|
|
57
|
+
You can populate `RequestContext` dynamically in server middleware by extracting information from the request. In this example, the `temperature-unit` is set based on the Cloudflare `CF-IPCountry` header to ensure responses match the user's locale.
|
|
58
|
+
|
|
59
|
+
```typescript
|
|
60
|
+
import { Mastra } from '@mastra/core'
|
|
61
|
+
import { RequestContext } from '@mastra/core/request-context'
|
|
62
|
+
import { testWeatherAgent } from './agents/test-weather-agent'
|
|
63
|
+
|
|
64
|
+
export const mastra = new Mastra({
|
|
65
|
+
agents: { testWeatherAgent },
|
|
66
|
+
server: {
|
|
67
|
+
middleware: [
|
|
68
|
+
async (context, next) => {
|
|
69
|
+
const country = context.req.header('CF-IPCountry')
|
|
70
|
+
const requestContext = context.get('requestContext')
|
|
71
|
+
|
|
72
|
+
requestContext.set('temperature-unit', country === 'US' ? 'fahrenheit' : 'celsius')
|
|
73
|
+
|
|
74
|
+
await next()
|
|
75
|
+
},
|
|
76
|
+
],
|
|
77
|
+
},
|
|
78
|
+
})
|
|
79
|
+
```
|
|
80
|
+
|
|
81
|
+
### Authentication
|
|
82
|
+
|
|
83
|
+
```typescript
|
|
84
|
+
{
|
|
85
|
+
handler: async (c, next) => {
|
|
86
|
+
const authHeader = c.req.header('Authorization');
|
|
87
|
+
if (!authHeader || !authHeader.startsWith('Bearer ')) {
|
|
88
|
+
return new Response('Unauthorized', { status: 401 });
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
// Validate token here
|
|
92
|
+
await next();
|
|
93
|
+
},
|
|
94
|
+
path: '/api/*',
|
|
95
|
+
}
|
|
96
|
+
```
|
|
97
|
+
|
|
98
|
+
### Authorization (User Isolation)
|
|
99
|
+
|
|
100
|
+
Authentication verifies who the user is. Authorization controls what they can access. Without authorization middleware, an authenticated user could access other users' threads by guessing IDs or manipulating the `resourceId` parameter.
|
|
101
|
+
|
|
102
|
+
Mastra provides reserved context keys that, when set by middleware, take precedence over client-provided values. The server automatically enforces these keys across memory and agent endpoints:
|
|
103
|
+
|
|
104
|
+
```typescript
|
|
105
|
+
import { Mastra } from '@mastra/core'
|
|
106
|
+
import { MASTRA_RESOURCE_ID_KEY } from '@mastra/core/request-context'
|
|
107
|
+
import { getAuthenticatedUser } from '@mastra/server/auth'
|
|
108
|
+
|
|
109
|
+
export const mastra = new Mastra({
|
|
110
|
+
server: {
|
|
111
|
+
auth: {
|
|
112
|
+
authenticateToken: async token => {
|
|
113
|
+
// Your auth logic returns the user
|
|
114
|
+
return verifyToken(token) // { id: 'user-123', ... }
|
|
115
|
+
},
|
|
116
|
+
},
|
|
117
|
+
middleware: [
|
|
118
|
+
{
|
|
119
|
+
path: '/api/*',
|
|
120
|
+
handler: async (c, next) => {
|
|
121
|
+
const token = c.req.header('Authorization')
|
|
122
|
+
if (!token) {
|
|
123
|
+
return c.json({ error: 'Unauthorized' }, 401)
|
|
124
|
+
}
|
|
125
|
+
|
|
126
|
+
const user = await getAuthenticatedUser<{ id: string }>({
|
|
127
|
+
mastra: c.get('mastra'),
|
|
128
|
+
token,
|
|
129
|
+
request: c.req.raw,
|
|
130
|
+
})
|
|
131
|
+
const requestContext = c.get('requestContext')
|
|
132
|
+
|
|
133
|
+
if (!user) {
|
|
134
|
+
return c.json({ error: 'Unauthorized' }, 401)
|
|
135
|
+
}
|
|
136
|
+
|
|
137
|
+
// Force all API operations to use this user's ID
|
|
138
|
+
// This takes precedence over any client-provided resourceId
|
|
139
|
+
requestContext.set(MASTRA_RESOURCE_ID_KEY, user.id)
|
|
140
|
+
|
|
141
|
+
return next()
|
|
142
|
+
},
|
|
143
|
+
},
|
|
144
|
+
],
|
|
145
|
+
},
|
|
146
|
+
})
|
|
147
|
+
```
|
|
148
|
+
|
|
149
|
+
`server.middleware` runs before Mastra's per-route auth checks. When middleware needs the authenticated user, call `getAuthenticatedUser()` to resolve it from the configured auth provider without changing the default route auth flow.
|
|
150
|
+
|
|
151
|
+
With this middleware, the server automatically:
|
|
152
|
+
|
|
153
|
+
- **Filters thread listing** to only return threads owned by the user
|
|
154
|
+
- **Validates thread access** and returns 403 if accessing another user's thread
|
|
155
|
+
- **Forces thread creation** to use the authenticated user's ID
|
|
156
|
+
- **Validates message operations** including deletion, ensuring messages belong to owned threads
|
|
157
|
+
|
|
158
|
+
Even if a client passes `?resourceId=other-user-id`, the middleware-set value takes precedence. Attempts to access threads or messages owned by other users will return a 403 error.
|
|
159
|
+
|
|
160
|
+
#### Using `MASTRA_THREAD_ID_KEY`
|
|
161
|
+
|
|
162
|
+
You can also set `MASTRA_THREAD_ID_KEY` to override the client-provided thread ID:
|
|
163
|
+
|
|
164
|
+
```typescript
|
|
165
|
+
import { MASTRA_RESOURCE_ID_KEY, MASTRA_THREAD_ID_KEY } from '@mastra/core/request-context'
|
|
166
|
+
|
|
167
|
+
// Force operations to use a specific thread
|
|
168
|
+
requestContext.set(MASTRA_THREAD_ID_KEY, validatedThreadId)
|
|
169
|
+
```
|
|
170
|
+
|
|
171
|
+
This is useful when you want to restrict operations to a specific thread that you've validated through other means.
|
|
172
|
+
|
|
173
|
+
### CORS support
|
|
174
|
+
|
|
175
|
+
```typescript
|
|
176
|
+
{
|
|
177
|
+
handler: async (c, next) => {
|
|
178
|
+
c.header('Access-Control-Allow-Origin', '*');
|
|
179
|
+
c.header(
|
|
180
|
+
'Access-Control-Allow-Methods',
|
|
181
|
+
'GET, POST, PUT, DELETE, OPTIONS',
|
|
182
|
+
);
|
|
183
|
+
c.header(
|
|
184
|
+
'Access-Control-Allow-Headers',
|
|
185
|
+
'Content-Type, Authorization',
|
|
186
|
+
);
|
|
187
|
+
|
|
188
|
+
if (c.req.method === 'OPTIONS') {
|
|
189
|
+
return new Response(null, { status: 204 });
|
|
190
|
+
}
|
|
191
|
+
|
|
192
|
+
await next();
|
|
193
|
+
},
|
|
194
|
+
}
|
|
195
|
+
```
|
|
196
|
+
|
|
197
|
+
### Request logging
|
|
198
|
+
|
|
199
|
+
```typescript
|
|
200
|
+
{
|
|
201
|
+
handler: async (c, next) => {
|
|
202
|
+
const start = Date.now();
|
|
203
|
+
await next();
|
|
204
|
+
const duration = Date.now() - start;
|
|
205
|
+
console.log(`${c.req.method} ${c.req.url} - ${duration}ms`);
|
|
206
|
+
},
|
|
207
|
+
}
|
|
208
|
+
```
|
|
209
|
+
|
|
210
|
+
### Special Mastra headers
|
|
211
|
+
|
|
212
|
+
When integrating with Mastra Cloud or custom clients the following headers can be inspected by middleware to tailor behavior:
|
|
213
|
+
|
|
214
|
+
```typescript
|
|
215
|
+
{
|
|
216
|
+
handler: async (c, next) => {
|
|
217
|
+
const isFromMastraCloud = c.req.header('x-mastra-cloud') === 'true';
|
|
218
|
+
const clientType = c.req.header('x-mastra-client-type');
|
|
219
|
+
const isStudio =
|
|
220
|
+
c.req.header('x-studio') === 'true';
|
|
221
|
+
|
|
222
|
+
if (isFromMastraCloud) {
|
|
223
|
+
// Special handling
|
|
224
|
+
}
|
|
225
|
+
await next();
|
|
226
|
+
},
|
|
227
|
+
}
|
|
228
|
+
```
|
|
229
|
+
|
|
230
|
+
- `x-mastra-cloud`: request originates from Mastra Cloud
|
|
231
|
+
- `x-mastra-client-type`: identifies the client SDK, e.g. `js` or `python`
|
|
232
|
+
- `x-studio`: request triggered from Studio
|
|
233
|
+
|
|
234
|
+
# Related
|
|
235
|
+
|
|
236
|
+
- [Request Context](https://mastra.ai/docs/server/request-context)
|
|
237
|
+
- [Reserved Keys](https://mastra.ai/docs/server/request-context)
|
|
@@ -69,7 +69,7 @@ abstract registerContextMiddleware(): void
|
|
|
69
69
|
|
|
70
70
|
### `registerAuthMiddleware()`
|
|
71
71
|
|
|
72
|
-
|
|
72
|
+
Run the adapter auth hook during initialization. Official adapters may implement this as a no-op when auth is enforced per-route.
|
|
73
73
|
|
|
74
74
|
```typescript
|
|
75
75
|
abstract registerAuthMiddleware(): void
|
|
@@ -266,7 +266,8 @@ export class MyServer extends MastraServer<MyApp, MyRequest, MyResponse> {
|
|
|
266
266
|
registerAuthMiddleware(): void {
|
|
267
267
|
const auth = this.mastra.getServer()?.auth
|
|
268
268
|
if (!auth) return
|
|
269
|
-
//
|
|
269
|
+
// Register global auth middleware, or leave this empty and
|
|
270
|
+
// enforce auth when routes are registered.
|
|
270
271
|
}
|
|
271
272
|
|
|
272
273
|
async registerRoute(app, route, { prefix }) {
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import type { Mastra } from '@mastra/core/mastra';
|
|
2
2
|
import type { MastraAuthConfig } from '@mastra/core/server';
|
|
3
|
+
import type { HonoRequest } from 'hono';
|
|
3
4
|
/**
|
|
4
5
|
* Check if a route is a registered custom route that requires authentication.
|
|
5
6
|
* Returns true only if the route is explicitly registered with requiresAuth: true.
|
|
@@ -40,6 +41,12 @@ export type AuthResult = {
|
|
|
40
41
|
status: number;
|
|
41
42
|
body: Record<string, unknown>;
|
|
42
43
|
};
|
|
44
|
+
export interface GetAuthenticatedUserOptions {
|
|
45
|
+
mastra: Mastra;
|
|
46
|
+
token: string;
|
|
47
|
+
request: Request | HonoRequest;
|
|
48
|
+
}
|
|
49
|
+
export declare const getAuthenticatedUser: <TUser = unknown>({ mastra, token, request, }: GetAuthenticatedUserOptions) => Promise<TUser | null>;
|
|
43
50
|
/**
|
|
44
51
|
* Single auth middleware: authenticate → authorize.
|
|
45
52
|
* Skip checks (dev playground, unprotected path, public path) are evaluated once.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"helpers.d.ts","sourceRoot":"","sources":["../../../src/server/auth/helpers.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAClD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;
|
|
1
|
+
{"version":3,"file":"helpers.d.ts","sourceRoot":"","sources":["../../../src/server/auth/helpers.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAClD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAC5D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,MAAM,CAAC;AAKxC;;;;GAIG;AACH,eAAO,MAAM,sBAAsB,GACjC,MAAM,MAAM,EACZ,QAAQ,MAAM,EACd,wBAAwB,GAAG,CAAC,MAAM,EAAE,OAAO,CAAC,KAC3C,OAuCF,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,sBAAsB,GACjC,MAAM,MAAM,EACZ,QAAQ,MAAM,EACd,WAAW,CAAC,IAAI,EAAE,MAAM,KAAK,MAAM,GAAG,SAAS,EAC/C,YAAY,gBAAgB,EAC5B,wBAAwB,GAAG,CAAC,MAAM,EAAE,OAAO,CAAC,KAC3C,OASF,CAAC;AAEF,eAAO,MAAM,mBAAmB,GAC9B,MAAM,MAAM,EACZ,QAAQ,MAAM,EACd,wBAAwB,GAAG,CAAC,MAAM,EAAE,OAAO,CAAC,KAC3C,OAuCF,CAAC;AAQF,eAAO,MAAM,eAAe,GAC1B,MAAM,MAAM,EACZ,QAAQ,MAAM,EACd,YAAY,gBAAgB,EAC5B,wBAAwB,GAAG,CAAC,MAAM,EAAE,OAAO,CAAC,KAC3C,OAGF,CAAC;AAEF,eAAO,MAAM,iBAAiB,GAAI,MAAM,MAAM,EAAE,QAAQ,MAAM,EAAE,YAAY,gBAAgB,KAAG,OAK9F,CAAC;AAiCF,eAAO,MAAM,kBAAkB,GAAI,MAAM,MAAM,EAAE,SAAS,MAAM,KAAG,OAUlE,CAAC;AAEF,eAAO,MAAM,eAAe,GAAI,MAAM,MAAM,EAAE,UAAU,MAAM,GAAG,MAAM,GAAG,MAAM,EAAE,GAAG,SAAS,KAAG,OAgBhG,CAAC;AAEF,eAAO,MAAM,iBAAiB,GAAI,QAAQ,MAAM,GAAG,MAAM,EAAE,EAAE,OAAO,MAAM,KAAG,OAU5E,CAAC;AAMF,MAAM,WAAW,qBAAqB;IACpC,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,MAAM,GAAG,SAAS,CAAC;IAChD,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,gBAAgB,CAAC;IAC7B,qBAAqB,CAAC,EAAE,GAAG,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC7C,cAAc,EAAE;QAAE,GAAG,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,OAAO,CAAC;QAAC,GAAG,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,KAAK,IAAI,CAAA;KAAE,CAAC;IAC9F,UAAU,EAAE,OAAO,CAAC;IACpB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,qBAAqB,EAAE,MAAM,OAAO,CAAC;CACtC;AAED,MAAM,MAAM,UAAU,GAAG;IAAE,MAAM,EAAE,MAAM,CAAA;CAAE,GAAG;IAAE,MAAM,EAAE,OAAO,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;CAAE,CAAC;AAIjH,MAAM,WAAW,2BAA2B;IAC1C,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,OAAO,GAAG,WAAW,CAAC;CAChC;AAED,eAAO,MAAM,oBAAoB,GAAU,KAAK,GAAG,OAAO,EAAE,6BAIzD,2BAA2B,KAAG,OAAO,CAAC,KAAK,GAAG,IAAI,CAYpD,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,kBAAkB,GAAU,KAAK,qBAAqB,KAAG,OAAO,CAAC,UAAU,CAyHvF,CAAC;AAGF,eAAO,MAAM,UAAU,GACrB,OAAO,gBAAgB,CAAC,OAAO,CAAC,EAChC,MAAM,MAAM,EACZ,QAAQ,MAAM,EACd,MAAM,OAAO,KACZ,OAAO,CAAC,OAAO,CA+BjB,CAAC"}
|