@mastra/core 1.3.0 → 1.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +462 -0
- package/datasets.d.ts +1 -0
- package/dist/agent/agent.d.ts +1 -1
- package/dist/agent/index.cjs +13 -13
- package/dist/agent/index.js +2 -2
- package/dist/agent/message-list/adapters/AIV4Adapter.d.ts.map +1 -1
- package/dist/agent/message-list/adapters/AIV5Adapter.d.ts.map +1 -1
- package/dist/agent/message-list/conversion/output-converter.d.ts +2 -1
- package/dist/agent/message-list/conversion/output-converter.d.ts.map +1 -1
- package/dist/agent/message-list/index.cjs +18 -18
- package/dist/agent/message-list/index.js +1 -1
- package/dist/agent/workflows/prepare-stream/index.d.ts +1 -1
- package/dist/chunk-3JVFFAJX.cjs +1207 -0
- package/dist/chunk-3JVFFAJX.cjs.map +1 -0
- package/dist/{chunk-WL3AW3YA.js → chunk-3X3CZUXI.js} +4070 -3983
- package/dist/chunk-3X3CZUXI.js.map +1 -0
- package/dist/{chunk-2GWTJFVM.js → chunk-4EHGOATH.js} +46 -14
- package/dist/chunk-4EHGOATH.js.map +1 -0
- package/dist/{chunk-YNXIGRQE.cjs → chunk-4IJ4UDZX.cjs} +319 -83
- package/dist/chunk-4IJ4UDZX.cjs.map +1 -0
- package/dist/{chunk-CGPH7CMG.cjs → chunk-4KFEMXTV.cjs} +46 -14
- package/dist/chunk-4KFEMXTV.cjs.map +1 -0
- package/dist/{chunk-PHYJYZ32.js → chunk-4TQ4EBYX.js} +16 -8
- package/dist/chunk-4TQ4EBYX.js.map +1 -0
- package/dist/{chunk-SIZEIYNH.js → chunk-4XSAZPPS.js} +254 -18
- package/dist/chunk-4XSAZPPS.js.map +1 -0
- package/dist/{chunk-KUTU2YZF.js → chunk-5Q5Y34SS.js} +5 -5
- package/dist/{chunk-KUTU2YZF.js.map → chunk-5Q5Y34SS.js.map} +1 -1
- package/dist/{chunk-EH6SAGEO.cjs → chunk-64WGYTQK.cjs} +72 -53
- package/dist/{chunk-EH6SAGEO.cjs.map → chunk-64WGYTQK.cjs.map} +1 -1
- package/dist/{chunk-OOCEAC6U.cjs → chunk-65PHUUMF.cjs} +3 -3
- package/dist/{chunk-OOCEAC6U.cjs.map → chunk-65PHUUMF.cjs.map} +1 -1
- package/dist/{chunk-JNE2ABVB.js → chunk-7NKUSQEV.js} +1094 -10
- package/dist/chunk-7NKUSQEV.js.map +1 -0
- package/dist/{chunk-ZHFM7HCQ.js → chunk-AXHBJ4GX.js} +3 -3
- package/dist/{chunk-ZHFM7HCQ.js.map → chunk-AXHBJ4GX.js.map} +1 -1
- package/dist/{chunk-ILQXPZCD.js → chunk-AY6DBRS3.js} +37 -21
- package/dist/chunk-AY6DBRS3.js.map +1 -0
- package/dist/{chunk-TERSHTY5.cjs → chunk-BP7VYTOP.cjs} +1116 -21
- package/dist/chunk-BP7VYTOP.cjs.map +1 -0
- package/dist/{chunk-UE2G2LRP.cjs → chunk-CZ4NQANZ.cjs} +37 -21
- package/dist/chunk-CZ4NQANZ.cjs.map +1 -0
- package/dist/{chunk-NCC45KOB.cjs → chunk-DBSVT6AR.cjs} +7 -7
- package/dist/{chunk-NCC45KOB.cjs.map → chunk-DBSVT6AR.cjs.map} +1 -1
- package/dist/{chunk-BXLLXTT4.js → chunk-FLPEGTEK.js} +4 -4
- package/dist/{chunk-BXLLXTT4.js.map → chunk-FLPEGTEK.js.map} +1 -1
- package/dist/{chunk-ON2KVIUJ.cjs → chunk-HYRYTTMT.cjs} +7 -7
- package/dist/{chunk-ON2KVIUJ.cjs.map → chunk-HYRYTTMT.cjs.map} +1 -1
- package/dist/chunk-NJ7TL3LQ.js +1196 -0
- package/dist/chunk-NJ7TL3LQ.js.map +1 -0
- package/dist/{chunk-EUG4AON3.cjs → chunk-NKYWDNCI.cjs} +8 -7
- package/dist/{chunk-EUG4AON3.cjs.map → chunk-NKYWDNCI.cjs.map} +1 -1
- package/dist/{chunk-UHVG25VW.cjs → chunk-NZG2JAKS.cjs} +23 -15
- package/dist/chunk-NZG2JAKS.cjs.map +1 -0
- package/dist/{chunk-44SUGDBR.js → chunk-PS5ONCXY.js} +109 -5
- package/dist/chunk-PS5ONCXY.js.map +1 -0
- package/dist/{chunk-57QAF2ZQ.js → chunk-QTTWRCB5.js} +4 -4
- package/dist/{chunk-57QAF2ZQ.js.map → chunk-QTTWRCB5.js.map} +1 -1
- package/dist/{chunk-VM25PDSW.js → chunk-RZ4CIIZR.js} +4 -4
- package/dist/{chunk-VM25PDSW.js.map → chunk-RZ4CIIZR.js.map} +1 -1
- package/dist/{chunk-C3XU7ZDC.cjs → chunk-SU5APAM6.cjs} +123 -4
- package/dist/chunk-SU5APAM6.cjs.map +1 -0
- package/dist/{chunk-3MJCJLZS.js → chunk-U2HKJZCI.js} +24 -5
- package/dist/{chunk-3MJCJLZS.js.map → chunk-U2HKJZCI.js.map} +1 -1
- package/dist/{chunk-GCTAD6B7.cjs → chunk-VD5YA6RH.cjs} +12 -12
- package/dist/{chunk-GCTAD6B7.cjs.map → chunk-VD5YA6RH.cjs.map} +1 -1
- package/dist/{chunk-KAJNBNWP.cjs → chunk-YNNJLLFN.cjs} +4071 -3984
- package/dist/chunk-YNNJLLFN.cjs.map +1 -0
- package/dist/datasets/dataset.d.ts +153 -0
- package/dist/datasets/dataset.d.ts.map +1 -0
- package/dist/datasets/experiment/analytics/aggregate.d.ts +46 -0
- package/dist/datasets/experiment/analytics/aggregate.d.ts.map +1 -0
- package/dist/datasets/experiment/analytics/compare.d.ts +33 -0
- package/dist/datasets/experiment/analytics/compare.d.ts.map +1 -0
- package/dist/datasets/experiment/analytics/index.d.ts +9 -0
- package/dist/datasets/experiment/analytics/index.d.ts.map +1 -0
- package/dist/datasets/experiment/analytics/types.d.ts +103 -0
- package/dist/datasets/experiment/analytics/types.d.ts.map +1 -0
- package/dist/datasets/experiment/executor.d.ts +40 -0
- package/dist/datasets/experiment/executor.d.ts.map +1 -0
- package/dist/datasets/experiment/index.d.ts +31 -0
- package/dist/datasets/experiment/index.d.ts.map +1 -0
- package/dist/datasets/experiment/scorer.d.ts +21 -0
- package/dist/datasets/experiment/scorer.d.ts.map +1 -0
- package/dist/datasets/experiment/types.d.ts +140 -0
- package/dist/datasets/experiment/types.d.ts.map +1 -0
- package/dist/datasets/index.cjs +69 -0
- package/dist/datasets/index.cjs.map +1 -0
- package/dist/datasets/index.d.ts +6 -0
- package/dist/datasets/index.d.ts.map +1 -0
- package/dist/datasets/index.js +4 -0
- package/dist/datasets/index.js.map +1 -0
- package/dist/datasets/manager.d.ts +73 -0
- package/dist/datasets/manager.d.ts.map +1 -0
- package/dist/datasets/validation/errors.d.ts +44 -0
- package/dist/datasets/validation/errors.d.ts.map +1 -0
- package/dist/datasets/validation/index.d.ts +3 -0
- package/dist/datasets/validation/index.d.ts.map +1 -0
- package/dist/datasets/validation/validator.d.ts +24 -0
- package/dist/datasets/validation/validator.d.ts.map +1 -0
- package/dist/docs/SKILL.md +1 -3
- package/dist/docs/assets/SOURCE_MAP.json +436 -346
- package/dist/docs/references/docs-memory-observational-memory.md +86 -11
- package/dist/docs/references/docs-streaming-events.md +23 -0
- package/dist/docs/references/docs-workspace-filesystem.md +72 -1
- package/dist/docs/references/docs-workspace-overview.md +95 -12
- package/dist/docs/references/docs-workspace-sandbox.md +2 -0
- package/dist/docs/references/guides-agent-frameworks-ai-sdk.md +6 -2
- package/dist/docs/references/reference-ai-sdk-with-mastra.md +1 -1
- package/dist/docs/references/reference-memory-observational-memory.md +318 -9
- package/dist/docs/references/reference-streaming-workflows-stream.md +1 -0
- package/dist/docs/references/reference-workflows-workflow-methods-foreach.md +30 -0
- package/dist/docs/references/reference.md +3 -0
- package/dist/editor/index.d.ts +1 -1
- package/dist/editor/index.d.ts.map +1 -1
- package/dist/editor/types.d.ts +21 -3
- package/dist/editor/types.d.ts.map +1 -1
- package/dist/evals/index.cjs +20 -20
- package/dist/evals/index.js +3 -3
- package/dist/evals/scoreTraces/index.cjs +5 -5
- package/dist/evals/scoreTraces/index.js +2 -2
- package/dist/features/index.cjs +1 -1
- package/dist/features/index.cjs.map +1 -1
- package/dist/features/index.d.ts.map +1 -1
- package/dist/features/index.js +1 -1
- package/dist/features/index.js.map +1 -1
- package/dist/index.cjs +2 -7
- package/dist/index.d.ts +0 -9
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -2
- package/dist/llm/index.cjs +10 -10
- package/dist/llm/index.js +2 -2
- package/dist/llm/model/provider-types.generated.d.ts +1694 -1659
- package/dist/loop/index.cjs +12 -12
- package/dist/loop/index.js +1 -1
- package/dist/loop/network/index.d.ts +1 -1
- package/dist/loop/workflows/agentic-execution/index.d.ts +1 -1
- package/dist/loop/workflows/agentic-execution/llm-execution-step.d.ts.map +1 -1
- package/dist/loop/workflows/agentic-execution/llm-mapping-step.d.ts.map +1 -1
- package/dist/loop/workflows/agentic-execution/tool-call-step.d.ts.map +1 -1
- package/dist/loop/workflows/agentic-loop/index.d.ts +1 -1
- package/dist/loop/workflows/errors.d.ts +4 -0
- package/dist/loop/workflows/errors.d.ts.map +1 -0
- package/dist/mastra/index.cjs +2 -2
- package/dist/mastra/index.d.ts +2 -0
- package/dist/mastra/index.d.ts.map +1 -1
- package/dist/mastra/index.js +1 -1
- package/dist/memory/index.cjs +14 -14
- package/dist/memory/index.js +1 -1
- package/dist/memory/memory.d.ts +5 -0
- package/dist/memory/memory.d.ts.map +1 -1
- package/dist/memory/types.d.ts +56 -0
- package/dist/memory/types.d.ts.map +1 -1
- package/dist/processors/index.cjs +41 -41
- package/dist/processors/index.js +1 -1
- package/dist/processors/processors/skills.d.ts +1 -1
- package/dist/processors/processors/skills.d.ts.map +1 -1
- package/dist/processors/runner.d.ts.map +1 -1
- package/dist/processors/trailing-assistant-guard.d.ts +34 -0
- package/dist/processors/trailing-assistant-guard.d.ts.map +1 -0
- package/dist/provider-registry-6LZAGQET.cjs +40 -0
- package/dist/{provider-registry-C6XCYX44.cjs.map → provider-registry-6LZAGQET.cjs.map} +1 -1
- package/dist/provider-registry-QUNT7S55.js +3 -0
- package/dist/{provider-registry-NWU4YFQW.js.map → provider-registry-QUNT7S55.js.map} +1 -1
- package/dist/provider-registry.json +4068 -3981
- package/dist/relevance/index.cjs +3 -3
- package/dist/relevance/index.js +1 -1
- package/dist/storage/base.d.ts +4 -1
- package/dist/storage/base.d.ts.map +1 -1
- package/dist/storage/constants.cjs +87 -27
- package/dist/storage/constants.d.ts +21 -2
- package/dist/storage/constants.d.ts.map +1 -1
- package/dist/storage/constants.js +1 -1
- package/dist/storage/domains/agents/inmemory.d.ts.map +1 -1
- package/dist/storage/domains/datasets/base.d.ts +83 -0
- package/dist/storage/domains/datasets/base.d.ts.map +1 -0
- package/dist/storage/domains/datasets/index.d.ts +3 -0
- package/dist/storage/domains/datasets/index.d.ts.map +1 -0
- package/dist/storage/domains/datasets/inmemory.d.ts +40 -0
- package/dist/storage/domains/datasets/inmemory.d.ts.map +1 -0
- package/dist/storage/domains/experiments/base.d.ts +28 -0
- package/dist/storage/domains/experiments/base.d.ts.map +1 -0
- package/dist/storage/domains/experiments/index.d.ts +3 -0
- package/dist/storage/domains/experiments/index.d.ts.map +1 -0
- package/dist/storage/domains/experiments/inmemory.d.ts +28 -0
- package/dist/storage/domains/experiments/inmemory.d.ts.map +1 -0
- package/dist/storage/domains/index.d.ts +3 -0
- package/dist/storage/domains/index.d.ts.map +1 -1
- package/dist/storage/domains/inmemory-db.d.ts +9 -1
- package/dist/storage/domains/inmemory-db.d.ts.map +1 -1
- package/dist/storage/domains/mcp-clients/base.d.ts +47 -0
- package/dist/storage/domains/mcp-clients/base.d.ts.map +1 -0
- package/dist/storage/domains/mcp-clients/index.d.ts +3 -0
- package/dist/storage/domains/mcp-clients/index.d.ts.map +1 -0
- package/dist/storage/domains/mcp-clients/inmemory.d.ts +31 -0
- package/dist/storage/domains/mcp-clients/inmemory.d.ts.map +1 -0
- package/dist/storage/domains/operations/inmemory.d.ts.map +1 -1
- package/dist/storage/index.cjs +201 -117
- package/dist/storage/index.js +2 -2
- package/dist/storage/mock.d.ts.map +1 -1
- package/dist/storage/types.d.ts +338 -3
- package/dist/storage/types.d.ts.map +1 -1
- package/dist/stream/base/output.d.ts.map +1 -1
- package/dist/stream/index.cjs +11 -11
- package/dist/stream/index.js +2 -2
- package/dist/stream/types.d.ts +15 -0
- package/dist/stream/types.d.ts.map +1 -1
- package/dist/test-utils/llm-mock.cjs +4 -4
- package/dist/test-utils/llm-mock.js +1 -1
- package/dist/tool-loop-agent/index.cjs +4 -4
- package/dist/tool-loop-agent/index.js +1 -1
- package/dist/tool-provider/index.cjs +4 -0
- package/dist/tool-provider/index.cjs.map +1 -0
- package/dist/tool-provider/index.d.ts +2 -0
- package/dist/tool-provider/index.d.ts.map +1 -0
- package/dist/tool-provider/index.js +3 -0
- package/dist/tool-provider/index.js.map +1 -0
- package/dist/tool-provider/types.d.ts +113 -0
- package/dist/tool-provider/types.d.ts.map +1 -0
- package/dist/utils.cjs +23 -23
- package/dist/utils.d.ts +1 -1
- package/dist/utils.d.ts.map +1 -1
- package/dist/utils.js +1 -1
- package/dist/vector/index.cjs +7 -7
- package/dist/vector/index.js +1 -1
- package/dist/workflows/evented/index.cjs +10 -10
- package/dist/workflows/evented/index.js +1 -1
- package/dist/workflows/evented/workflow-event-processor/index.d.ts.map +1 -1
- package/dist/workflows/handlers/control-flow.d.ts.map +1 -1
- package/dist/workflows/index.cjs +25 -25
- package/dist/workflows/index.js +1 -1
- package/dist/workflows/workflow.d.ts +2 -2
- package/dist/workflows/workflow.d.ts.map +1 -1
- package/dist/workspace/filesystem/filesystem.d.ts +5 -15
- package/dist/workspace/filesystem/filesystem.d.ts.map +1 -1
- package/dist/workspace/filesystem/local-filesystem.d.ts +18 -2
- package/dist/workspace/filesystem/local-filesystem.d.ts.map +1 -1
- package/dist/workspace/filesystem/mastra-filesystem.d.ts +21 -1
- package/dist/workspace/filesystem/mastra-filesystem.d.ts.map +1 -1
- package/dist/workspace/index.cjs +41 -41
- package/dist/workspace/index.d.ts +1 -1
- package/dist/workspace/index.d.ts.map +1 -1
- package/dist/workspace/index.js +1 -1
- package/dist/workspace/lifecycle.d.ts +49 -53
- package/dist/workspace/lifecycle.d.ts.map +1 -1
- package/dist/workspace/sandbox/local-sandbox.d.ts +1 -1
- package/dist/workspace/sandbox/local-sandbox.d.ts.map +1 -1
- package/dist/workspace/sandbox/mastra-sandbox.d.ts +3 -2
- package/dist/workspace/sandbox/mastra-sandbox.d.ts.map +1 -1
- package/dist/workspace/sandbox/sandbox.d.ts +3 -4
- package/dist/workspace/sandbox/sandbox.d.ts.map +1 -1
- package/dist/workspace/workspace.d.ts +2 -15
- package/dist/workspace/workspace.d.ts.map +1 -1
- package/package.json +7 -7
- package/src/llm/model/provider-types.generated.d.ts +1694 -1659
- package/tool-provider.d.ts +1 -0
- package/dist/chunk-2GWTJFVM.js.map +0 -1
- package/dist/chunk-44SUGDBR.js.map +0 -1
- package/dist/chunk-C3XU7ZDC.cjs.map +0 -1
- package/dist/chunk-CGPH7CMG.cjs.map +0 -1
- package/dist/chunk-ILQXPZCD.js.map +0 -1
- package/dist/chunk-JNE2ABVB.js.map +0 -1
- package/dist/chunk-KAJNBNWP.cjs.map +0 -1
- package/dist/chunk-PHYJYZ32.js.map +0 -1
- package/dist/chunk-SIZEIYNH.js.map +0 -1
- package/dist/chunk-TERSHTY5.cjs.map +0 -1
- package/dist/chunk-UE2G2LRP.cjs.map +0 -1
- package/dist/chunk-UHVG25VW.cjs.map +0 -1
- package/dist/chunk-WL3AW3YA.js.map +0 -1
- package/dist/chunk-YNXIGRQE.cjs.map +0 -1
- package/dist/docs/references/reference-cli-mastra.md +0 -336
- package/dist/docs/references/reference-deployer-cloudflare.md +0 -56
- package/dist/provider-registry-C6XCYX44.cjs +0 -40
- package/dist/provider-registry-NWU4YFQW.js +0 -3
|
@@ -1,10 +1,12 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
-
var
|
|
4
|
-
var
|
|
5
|
-
var
|
|
3
|
+
var chunkCZ4NQANZ_cjs = require('./chunk-CZ4NQANZ.cjs');
|
|
4
|
+
var chunkSU5APAM6_cjs = require('./chunk-SU5APAM6.cjs');
|
|
5
|
+
var chunk65PHUUMF_cjs = require('./chunk-65PHUUMF.cjs');
|
|
6
6
|
var chunk4U7ZLI36_cjs = require('./chunk-4U7ZLI36.cjs');
|
|
7
7
|
var chunkRO47SMI7_cjs = require('./chunk-RO47SMI7.cjs');
|
|
8
|
+
var jsonToZod = require('@mastra/schema-compat/json-to-zod');
|
|
9
|
+
var zod = require('zod');
|
|
8
10
|
|
|
9
11
|
// src/storage/base.ts
|
|
10
12
|
function normalizePerPage(perPageInput, defaultValue) {
|
|
@@ -61,8 +63,11 @@ var MastraCompositeStore = class extends chunkRO47SMI7_cjs.MastraBase {
|
|
|
61
63
|
scores: domainOverrides.scores ?? defaultStores?.scores,
|
|
62
64
|
observability: domainOverrides.observability ?? defaultStores?.observability,
|
|
63
65
|
agents: domainOverrides.agents ?? defaultStores?.agents,
|
|
66
|
+
datasets: domainOverrides.datasets ?? defaultStores?.datasets,
|
|
67
|
+
experiments: domainOverrides.experiments ?? defaultStores?.experiments,
|
|
64
68
|
promptBlocks: domainOverrides.promptBlocks ?? defaultStores?.promptBlocks,
|
|
65
|
-
scorerDefinitions: domainOverrides.scorerDefinitions ?? defaultStores?.scorerDefinitions
|
|
69
|
+
scorerDefinitions: domainOverrides.scorerDefinitions ?? defaultStores?.scorerDefinitions,
|
|
70
|
+
mcpClients: domainOverrides.mcpClients ?? defaultStores?.mcpClients
|
|
66
71
|
};
|
|
67
72
|
}
|
|
68
73
|
}
|
|
@@ -107,12 +112,21 @@ var MastraCompositeStore = class extends chunkRO47SMI7_cjs.MastraBase {
|
|
|
107
112
|
if (this.stores?.agents) {
|
|
108
113
|
initTasks.push(this.stores.agents.init());
|
|
109
114
|
}
|
|
115
|
+
if (this.stores?.datasets) {
|
|
116
|
+
initTasks.push(this.stores.datasets.init());
|
|
117
|
+
}
|
|
118
|
+
if (this.stores?.experiments) {
|
|
119
|
+
initTasks.push(this.stores.experiments.init());
|
|
120
|
+
}
|
|
110
121
|
if (this.stores?.promptBlocks) {
|
|
111
122
|
initTasks.push(this.stores.promptBlocks.init());
|
|
112
123
|
}
|
|
113
124
|
if (this.stores?.scorerDefinitions) {
|
|
114
125
|
initTasks.push(this.stores.scorerDefinitions.init());
|
|
115
126
|
}
|
|
127
|
+
if (this.stores?.mcpClients) {
|
|
128
|
+
initTasks.push(this.stores.mcpClients.init());
|
|
129
|
+
}
|
|
116
130
|
this.hasInitialized = Promise.all(initTasks).then(() => true);
|
|
117
131
|
await this.hasInitialized;
|
|
118
132
|
}
|
|
@@ -313,7 +327,9 @@ var InMemoryAgentsStorage = class extends AgentsStorage {
|
|
|
313
327
|
"inputProcessors",
|
|
314
328
|
"outputProcessors",
|
|
315
329
|
"memory",
|
|
316
|
-
"scorers"
|
|
330
|
+
"scorers",
|
|
331
|
+
"mcpClients",
|
|
332
|
+
"requestContextSchema"
|
|
317
333
|
];
|
|
318
334
|
const hasConfigUpdate = configFieldNames.some((field) => field in configFields);
|
|
319
335
|
const updatedAgent = {
|
|
@@ -392,7 +408,7 @@ var InMemoryAgentsStorage = class extends AgentsStorage {
|
|
|
392
408
|
if (metadata && Object.keys(metadata).length > 0) {
|
|
393
409
|
agents = agents.filter((agent) => {
|
|
394
410
|
if (!agent.metadata) return false;
|
|
395
|
-
return Object.entries(metadata).every(([key, value]) =>
|
|
411
|
+
return Object.entries(metadata).every(([key, value]) => chunk65PHUUMF_cjs.deepEqual(agent.metadata[key], value));
|
|
396
412
|
});
|
|
397
413
|
}
|
|
398
414
|
const sortedAgents = this.sortAgents(agents, field, direction);
|
|
@@ -559,8 +575,17 @@ var InMemoryDB = class {
|
|
|
559
575
|
promptBlockVersions = /* @__PURE__ */ new Map();
|
|
560
576
|
scorerDefinitions = /* @__PURE__ */ new Map();
|
|
561
577
|
scorerDefinitionVersions = /* @__PURE__ */ new Map();
|
|
578
|
+
mcpClients = /* @__PURE__ */ new Map();
|
|
579
|
+
mcpClientVersions = /* @__PURE__ */ new Map();
|
|
562
580
|
/** Observational memory records, keyed by resourceId, each holding array of records (generations) */
|
|
563
581
|
observationalMemory = /* @__PURE__ */ new Map();
|
|
582
|
+
// Dataset domain maps
|
|
583
|
+
datasets = /* @__PURE__ */ new Map();
|
|
584
|
+
datasetItems = /* @__PURE__ */ new Map();
|
|
585
|
+
datasetVersions = /* @__PURE__ */ new Map();
|
|
586
|
+
// Experiment domain maps
|
|
587
|
+
experiments = /* @__PURE__ */ new Map();
|
|
588
|
+
experimentResults = /* @__PURE__ */ new Map();
|
|
564
589
|
/**
|
|
565
590
|
* Clears all data from all collections.
|
|
566
591
|
* Useful for testing.
|
|
@@ -578,7 +603,318 @@ var InMemoryDB = class {
|
|
|
578
603
|
this.promptBlockVersions.clear();
|
|
579
604
|
this.scorerDefinitions.clear();
|
|
580
605
|
this.scorerDefinitionVersions.clear();
|
|
606
|
+
this.mcpClients.clear();
|
|
607
|
+
this.mcpClientVersions.clear();
|
|
581
608
|
this.observationalMemory.clear();
|
|
609
|
+
this.datasets.clear();
|
|
610
|
+
this.datasetItems.clear();
|
|
611
|
+
this.datasetVersions.clear();
|
|
612
|
+
this.experiments.clear();
|
|
613
|
+
this.experimentResults.clear();
|
|
614
|
+
}
|
|
615
|
+
};
|
|
616
|
+
|
|
617
|
+
// src/storage/domains/mcp-clients/base.ts
|
|
618
|
+
var MCPClientsStorage = class extends VersionedStorageDomain {
|
|
619
|
+
listKey = "mcpClients";
|
|
620
|
+
versionMetadataFields = [
|
|
621
|
+
"id",
|
|
622
|
+
"mcpClientId",
|
|
623
|
+
"versionNumber",
|
|
624
|
+
"changedFields",
|
|
625
|
+
"changeMessage",
|
|
626
|
+
"createdAt"
|
|
627
|
+
];
|
|
628
|
+
constructor() {
|
|
629
|
+
super({
|
|
630
|
+
component: "STORAGE",
|
|
631
|
+
name: "MCP_CLIENTS"
|
|
632
|
+
});
|
|
633
|
+
}
|
|
634
|
+
};
|
|
635
|
+
|
|
636
|
+
// src/storage/domains/mcp-clients/inmemory.ts
|
|
637
|
+
var InMemoryMCPClientsStorage = class extends MCPClientsStorage {
|
|
638
|
+
db;
|
|
639
|
+
constructor({ db }) {
|
|
640
|
+
super();
|
|
641
|
+
this.db = db;
|
|
642
|
+
}
|
|
643
|
+
async dangerouslyClearAll() {
|
|
644
|
+
this.db.mcpClients.clear();
|
|
645
|
+
this.db.mcpClientVersions.clear();
|
|
646
|
+
}
|
|
647
|
+
// ==========================================================================
|
|
648
|
+
// MCP Client CRUD Methods
|
|
649
|
+
// ==========================================================================
|
|
650
|
+
async getById(id) {
|
|
651
|
+
this.logger.debug(`InMemoryMCPClientsStorage: getById called for ${id}`);
|
|
652
|
+
const config = this.db.mcpClients.get(id);
|
|
653
|
+
return config ? this.deepCopyConfig(config) : null;
|
|
654
|
+
}
|
|
655
|
+
async create(input) {
|
|
656
|
+
const { mcpClient } = input;
|
|
657
|
+
this.logger.debug(`InMemoryMCPClientsStorage: create called for ${mcpClient.id}`);
|
|
658
|
+
if (this.db.mcpClients.has(mcpClient.id)) {
|
|
659
|
+
throw new Error(`MCP client with id ${mcpClient.id} already exists`);
|
|
660
|
+
}
|
|
661
|
+
const now = /* @__PURE__ */ new Date();
|
|
662
|
+
const newConfig = {
|
|
663
|
+
id: mcpClient.id,
|
|
664
|
+
status: "draft",
|
|
665
|
+
activeVersionId: void 0,
|
|
666
|
+
authorId: mcpClient.authorId,
|
|
667
|
+
metadata: mcpClient.metadata,
|
|
668
|
+
createdAt: now,
|
|
669
|
+
updatedAt: now
|
|
670
|
+
};
|
|
671
|
+
this.db.mcpClients.set(mcpClient.id, newConfig);
|
|
672
|
+
const { id: _id, authorId: _authorId, metadata: _metadata, ...snapshotConfig } = mcpClient;
|
|
673
|
+
const versionId = crypto.randomUUID();
|
|
674
|
+
await this.createVersion({
|
|
675
|
+
id: versionId,
|
|
676
|
+
mcpClientId: mcpClient.id,
|
|
677
|
+
versionNumber: 1,
|
|
678
|
+
...snapshotConfig,
|
|
679
|
+
changedFields: Object.keys(snapshotConfig),
|
|
680
|
+
changeMessage: "Initial version"
|
|
681
|
+
});
|
|
682
|
+
return this.deepCopyConfig(newConfig);
|
|
683
|
+
}
|
|
684
|
+
async update(input) {
|
|
685
|
+
const { id, ...updates } = input;
|
|
686
|
+
this.logger.debug(`InMemoryMCPClientsStorage: update called for ${id}`);
|
|
687
|
+
const existingConfig = this.db.mcpClients.get(id);
|
|
688
|
+
if (!existingConfig) {
|
|
689
|
+
throw new Error(`MCP client with id ${id} not found`);
|
|
690
|
+
}
|
|
691
|
+
const { authorId, activeVersionId, metadata, status, ...configFields } = updates;
|
|
692
|
+
const configFieldNames = ["name", "description", "servers"];
|
|
693
|
+
const hasConfigUpdate = configFieldNames.some((field) => field in configFields);
|
|
694
|
+
const updatedConfig = {
|
|
695
|
+
...existingConfig,
|
|
696
|
+
...authorId !== void 0 && { authorId },
|
|
697
|
+
...activeVersionId !== void 0 && { activeVersionId },
|
|
698
|
+
...status !== void 0 && { status },
|
|
699
|
+
...metadata !== void 0 && {
|
|
700
|
+
metadata: { ...existingConfig.metadata, ...metadata }
|
|
701
|
+
},
|
|
702
|
+
updatedAt: /* @__PURE__ */ new Date()
|
|
703
|
+
};
|
|
704
|
+
if (activeVersionId !== void 0 && status === void 0) {
|
|
705
|
+
updatedConfig.status = "published";
|
|
706
|
+
}
|
|
707
|
+
if (hasConfigUpdate) {
|
|
708
|
+
const latestVersion = await this.getLatestVersion(id);
|
|
709
|
+
if (!latestVersion) {
|
|
710
|
+
throw new Error(`No versions found for MCP client ${id}`);
|
|
711
|
+
}
|
|
712
|
+
const {
|
|
713
|
+
id: _versionId,
|
|
714
|
+
mcpClientId: _mcpClientId,
|
|
715
|
+
versionNumber: _versionNumber,
|
|
716
|
+
changedFields: _changedFields,
|
|
717
|
+
changeMessage: _changeMessage,
|
|
718
|
+
createdAt: _createdAt,
|
|
719
|
+
...latestConfig
|
|
720
|
+
} = latestVersion;
|
|
721
|
+
const newConfig = {
|
|
722
|
+
...latestConfig,
|
|
723
|
+
...configFields
|
|
724
|
+
};
|
|
725
|
+
const changedFields = configFieldNames.filter(
|
|
726
|
+
(field) => field in configFields && JSON.stringify(configFields[field]) !== JSON.stringify(latestConfig[field])
|
|
727
|
+
);
|
|
728
|
+
if (changedFields.length > 0) {
|
|
729
|
+
const newVersionId = crypto.randomUUID();
|
|
730
|
+
const newVersionNumber = latestVersion.versionNumber + 1;
|
|
731
|
+
await this.createVersion({
|
|
732
|
+
id: newVersionId,
|
|
733
|
+
mcpClientId: id,
|
|
734
|
+
versionNumber: newVersionNumber,
|
|
735
|
+
...newConfig,
|
|
736
|
+
changedFields,
|
|
737
|
+
changeMessage: `Updated ${changedFields.join(", ")}`
|
|
738
|
+
});
|
|
739
|
+
}
|
|
740
|
+
}
|
|
741
|
+
this.db.mcpClients.set(id, updatedConfig);
|
|
742
|
+
return this.deepCopyConfig(updatedConfig);
|
|
743
|
+
}
|
|
744
|
+
async delete(id) {
|
|
745
|
+
this.logger.debug(`InMemoryMCPClientsStorage: delete called for ${id}`);
|
|
746
|
+
this.db.mcpClients.delete(id);
|
|
747
|
+
await this.deleteVersionsByParentId(id);
|
|
748
|
+
}
|
|
749
|
+
async list(args) {
|
|
750
|
+
const { page = 0, perPage: perPageInput, orderBy, authorId, metadata } = args || {};
|
|
751
|
+
const { field, direction } = this.parseOrderBy(orderBy);
|
|
752
|
+
this.logger.debug(`InMemoryMCPClientsStorage: list called`);
|
|
753
|
+
const perPage = normalizePerPage(perPageInput, 100);
|
|
754
|
+
if (page < 0) {
|
|
755
|
+
throw new Error("page must be >= 0");
|
|
756
|
+
}
|
|
757
|
+
const maxOffset = Number.MAX_SAFE_INTEGER / 2;
|
|
758
|
+
if (page * perPage > maxOffset) {
|
|
759
|
+
throw new Error("page value too large");
|
|
760
|
+
}
|
|
761
|
+
let configs = Array.from(this.db.mcpClients.values());
|
|
762
|
+
if (authorId !== void 0) {
|
|
763
|
+
configs = configs.filter((config) => config.authorId === authorId);
|
|
764
|
+
}
|
|
765
|
+
if (metadata && Object.keys(metadata).length > 0) {
|
|
766
|
+
configs = configs.filter((config) => {
|
|
767
|
+
if (!config.metadata) return false;
|
|
768
|
+
return Object.entries(metadata).every(([key, value]) => chunk65PHUUMF_cjs.deepEqual(config.metadata[key], value));
|
|
769
|
+
});
|
|
770
|
+
}
|
|
771
|
+
const sortedConfigs = this.sortConfigs(configs, field, direction);
|
|
772
|
+
const clonedConfigs = sortedConfigs.map((config) => this.deepCopyConfig(config));
|
|
773
|
+
const { offset, perPage: perPageForResponse } = calculatePagination(page, perPageInput, perPage);
|
|
774
|
+
return {
|
|
775
|
+
mcpClients: clonedConfigs.slice(offset, offset + perPage),
|
|
776
|
+
total: clonedConfigs.length,
|
|
777
|
+
page,
|
|
778
|
+
perPage: perPageForResponse,
|
|
779
|
+
hasMore: offset + perPage < clonedConfigs.length
|
|
780
|
+
};
|
|
781
|
+
}
|
|
782
|
+
// ==========================================================================
|
|
783
|
+
// MCP Client Version Methods
|
|
784
|
+
// ==========================================================================
|
|
785
|
+
async createVersion(input) {
|
|
786
|
+
this.logger.debug(`InMemoryMCPClientsStorage: createVersion called for MCP client ${input.mcpClientId}`);
|
|
787
|
+
if (this.db.mcpClientVersions.has(input.id)) {
|
|
788
|
+
throw new Error(`Version with id ${input.id} already exists`);
|
|
789
|
+
}
|
|
790
|
+
for (const version2 of this.db.mcpClientVersions.values()) {
|
|
791
|
+
if (version2.mcpClientId === input.mcpClientId && version2.versionNumber === input.versionNumber) {
|
|
792
|
+
throw new Error(`Version number ${input.versionNumber} already exists for MCP client ${input.mcpClientId}`);
|
|
793
|
+
}
|
|
794
|
+
}
|
|
795
|
+
const version = {
|
|
796
|
+
...input,
|
|
797
|
+
createdAt: /* @__PURE__ */ new Date()
|
|
798
|
+
};
|
|
799
|
+
this.db.mcpClientVersions.set(input.id, this.deepCopyVersion(version));
|
|
800
|
+
return this.deepCopyVersion(version);
|
|
801
|
+
}
|
|
802
|
+
async getVersion(id) {
|
|
803
|
+
this.logger.debug(`InMemoryMCPClientsStorage: getVersion called for ${id}`);
|
|
804
|
+
const version = this.db.mcpClientVersions.get(id);
|
|
805
|
+
return version ? this.deepCopyVersion(version) : null;
|
|
806
|
+
}
|
|
807
|
+
async getVersionByNumber(mcpClientId, versionNumber) {
|
|
808
|
+
this.logger.debug(
|
|
809
|
+
`InMemoryMCPClientsStorage: getVersionByNumber called for MCP client ${mcpClientId}, v${versionNumber}`
|
|
810
|
+
);
|
|
811
|
+
for (const version of this.db.mcpClientVersions.values()) {
|
|
812
|
+
if (version.mcpClientId === mcpClientId && version.versionNumber === versionNumber) {
|
|
813
|
+
return this.deepCopyVersion(version);
|
|
814
|
+
}
|
|
815
|
+
}
|
|
816
|
+
return null;
|
|
817
|
+
}
|
|
818
|
+
async getLatestVersion(mcpClientId) {
|
|
819
|
+
this.logger.debug(`InMemoryMCPClientsStorage: getLatestVersion called for MCP client ${mcpClientId}`);
|
|
820
|
+
let latest = null;
|
|
821
|
+
for (const version of this.db.mcpClientVersions.values()) {
|
|
822
|
+
if (version.mcpClientId === mcpClientId) {
|
|
823
|
+
if (!latest || version.versionNumber > latest.versionNumber) {
|
|
824
|
+
latest = version;
|
|
825
|
+
}
|
|
826
|
+
}
|
|
827
|
+
}
|
|
828
|
+
return latest ? this.deepCopyVersion(latest) : null;
|
|
829
|
+
}
|
|
830
|
+
async listVersions(input) {
|
|
831
|
+
const { mcpClientId, page = 0, perPage: perPageInput, orderBy } = input;
|
|
832
|
+
const { field, direction } = this.parseVersionOrderBy(orderBy);
|
|
833
|
+
this.logger.debug(`InMemoryMCPClientsStorage: listVersions called for MCP client ${mcpClientId}`);
|
|
834
|
+
const perPage = normalizePerPage(perPageInput, 20);
|
|
835
|
+
if (page < 0) {
|
|
836
|
+
throw new Error("page must be >= 0");
|
|
837
|
+
}
|
|
838
|
+
const maxOffset = Number.MAX_SAFE_INTEGER / 2;
|
|
839
|
+
if (page * perPage > maxOffset) {
|
|
840
|
+
throw new Error("page value too large");
|
|
841
|
+
}
|
|
842
|
+
let versions = Array.from(this.db.mcpClientVersions.values()).filter((v) => v.mcpClientId === mcpClientId);
|
|
843
|
+
versions = this.sortVersions(versions, field, direction);
|
|
844
|
+
const clonedVersions = versions.map((v) => this.deepCopyVersion(v));
|
|
845
|
+
const total = clonedVersions.length;
|
|
846
|
+
const { offset, perPage: perPageForResponse } = calculatePagination(page, perPageInput, perPage);
|
|
847
|
+
const paginatedVersions = clonedVersions.slice(offset, offset + perPage);
|
|
848
|
+
return {
|
|
849
|
+
versions: paginatedVersions,
|
|
850
|
+
total,
|
|
851
|
+
page,
|
|
852
|
+
perPage: perPageForResponse,
|
|
853
|
+
hasMore: offset + perPage < total
|
|
854
|
+
};
|
|
855
|
+
}
|
|
856
|
+
async deleteVersion(id) {
|
|
857
|
+
this.logger.debug(`InMemoryMCPClientsStorage: deleteVersion called for ${id}`);
|
|
858
|
+
this.db.mcpClientVersions.delete(id);
|
|
859
|
+
}
|
|
860
|
+
async deleteVersionsByParentId(entityId) {
|
|
861
|
+
this.logger.debug(`InMemoryMCPClientsStorage: deleteVersionsByParentId called for MCP client ${entityId}`);
|
|
862
|
+
const idsToDelete = [];
|
|
863
|
+
for (const [id, version] of this.db.mcpClientVersions.entries()) {
|
|
864
|
+
if (version.mcpClientId === entityId) {
|
|
865
|
+
idsToDelete.push(id);
|
|
866
|
+
}
|
|
867
|
+
}
|
|
868
|
+
for (const id of idsToDelete) {
|
|
869
|
+
this.db.mcpClientVersions.delete(id);
|
|
870
|
+
}
|
|
871
|
+
}
|
|
872
|
+
async countVersions(mcpClientId) {
|
|
873
|
+
this.logger.debug(`InMemoryMCPClientsStorage: countVersions called for MCP client ${mcpClientId}`);
|
|
874
|
+
let count = 0;
|
|
875
|
+
for (const version of this.db.mcpClientVersions.values()) {
|
|
876
|
+
if (version.mcpClientId === mcpClientId) {
|
|
877
|
+
count++;
|
|
878
|
+
}
|
|
879
|
+
}
|
|
880
|
+
return count;
|
|
881
|
+
}
|
|
882
|
+
// ==========================================================================
|
|
883
|
+
// Private Helper Methods
|
|
884
|
+
// ==========================================================================
|
|
885
|
+
deepCopyConfig(config) {
|
|
886
|
+
return {
|
|
887
|
+
...config,
|
|
888
|
+
metadata: config.metadata ? { ...config.metadata } : config.metadata
|
|
889
|
+
};
|
|
890
|
+
}
|
|
891
|
+
deepCopyVersion(version) {
|
|
892
|
+
return {
|
|
893
|
+
...version,
|
|
894
|
+
servers: version.servers ? JSON.parse(JSON.stringify(version.servers)) : version.servers,
|
|
895
|
+
changedFields: version.changedFields ? [...version.changedFields] : version.changedFields
|
|
896
|
+
};
|
|
897
|
+
}
|
|
898
|
+
sortConfigs(configs, field, direction) {
|
|
899
|
+
return configs.sort((a, b) => {
|
|
900
|
+
const aValue = a[field].getTime();
|
|
901
|
+
const bValue = b[field].getTime();
|
|
902
|
+
return direction === "ASC" ? aValue - bValue : bValue - aValue;
|
|
903
|
+
});
|
|
904
|
+
}
|
|
905
|
+
sortVersions(versions, field, direction) {
|
|
906
|
+
return versions.sort((a, b) => {
|
|
907
|
+
let aVal;
|
|
908
|
+
let bVal;
|
|
909
|
+
if (field === "createdAt") {
|
|
910
|
+
aVal = a.createdAt.getTime();
|
|
911
|
+
bVal = b.createdAt.getTime();
|
|
912
|
+
} else {
|
|
913
|
+
aVal = a.versionNumber;
|
|
914
|
+
bVal = b.versionNumber;
|
|
915
|
+
}
|
|
916
|
+
return direction === "ASC" ? aVal - bVal : bVal - aVal;
|
|
917
|
+
});
|
|
582
918
|
}
|
|
583
919
|
};
|
|
584
920
|
|
|
@@ -597,7 +933,7 @@ function safelyParseJSON(input) {
|
|
|
597
933
|
}
|
|
598
934
|
function transformRow(row, tableName, options = {}) {
|
|
599
935
|
const { preferredTimestampFields = {}, convertTimestamps = false, nullValuePattern, fieldMappings = {} } = options;
|
|
600
|
-
const tableSchema =
|
|
936
|
+
const tableSchema = chunkSU5APAM6_cjs.TABLE_SCHEMAS[tableName];
|
|
601
937
|
const result = {};
|
|
602
938
|
for (const [key, columnSchema] of Object.entries(tableSchema)) {
|
|
603
939
|
const sourceKey = fieldMappings[key] ?? key;
|
|
@@ -628,7 +964,7 @@ function transformRow(row, tableName, options = {}) {
|
|
|
628
964
|
return result;
|
|
629
965
|
}
|
|
630
966
|
function transformScoreRow(row, options = {}) {
|
|
631
|
-
return transformRow(row,
|
|
967
|
+
return transformRow(row, chunkSU5APAM6_cjs.TABLE_SCORERS, options);
|
|
632
968
|
}
|
|
633
969
|
function toUpperSnakeCase(str) {
|
|
634
970
|
return str.replace(/([a-z])([A-Z])/g, "$1_$2").replace(/([A-Z])([A-Z][a-z])/g, "$1_$2").toUpperCase().replace(/[^A-Z0-9]+/g, "_").replace(/^_+|_+$/g, "");
|
|
@@ -1250,7 +1586,7 @@ var InMemoryMemory = class extends MemoryStorage {
|
|
|
1250
1586
|
});
|
|
1251
1587
|
const total = messages.length;
|
|
1252
1588
|
const paginatedMessages = messages.slice(offset, offset + perPage);
|
|
1253
|
-
const list = new
|
|
1589
|
+
const list = new chunkCZ4NQANZ_cjs.MessageList().add(
|
|
1254
1590
|
paginatedMessages.map((m) => this.parseStoredMessage(m)),
|
|
1255
1591
|
"memory"
|
|
1256
1592
|
);
|
|
@@ -1284,7 +1620,7 @@ var InMemoryMemory = class extends MemoryStorage {
|
|
|
1284
1620
|
async listMessagesById({ messageIds }) {
|
|
1285
1621
|
this.logger.debug(`InMemoryMemory: listMessagesById called`);
|
|
1286
1622
|
const rawMessages = messageIds.map((id) => this.db.messages.get(id)).filter((message) => !!message);
|
|
1287
|
-
const list = new
|
|
1623
|
+
const list = new chunkCZ4NQANZ_cjs.MessageList().add(
|
|
1288
1624
|
rawMessages.map((m) => this.parseStoredMessage(m)),
|
|
1289
1625
|
"memory"
|
|
1290
1626
|
);
|
|
@@ -1316,7 +1652,7 @@ var InMemoryMemory = class extends MemoryStorage {
|
|
|
1316
1652
|
};
|
|
1317
1653
|
this.db.messages.set(key, storageMessage);
|
|
1318
1654
|
}
|
|
1319
|
-
const list = new
|
|
1655
|
+
const list = new chunkCZ4NQANZ_cjs.MessageList().add(messages, "memory");
|
|
1320
1656
|
return { messages: list.get.all.db() };
|
|
1321
1657
|
}
|
|
1322
1658
|
async updateMessages(args) {
|
|
@@ -2157,7 +2493,7 @@ var ObservabilityInMemory = class extends ObservabilityStorage {
|
|
|
2157
2493
|
};
|
|
2158
2494
|
}
|
|
2159
2495
|
async listTraces(args) {
|
|
2160
|
-
const { filters, pagination, orderBy } =
|
|
2496
|
+
const { filters, pagination, orderBy } = chunkSU5APAM6_cjs.listTracesArgsSchema.parse(args);
|
|
2161
2497
|
const matchingRootSpans = [];
|
|
2162
2498
|
for (const [, traceEntry] of this.db.traces) {
|
|
2163
2499
|
if (!traceEntry.rootSpan) continue;
|
|
@@ -2186,7 +2522,7 @@ var ObservabilityInMemory = class extends ObservabilityStorage {
|
|
|
2186
2522
|
const end = start + perPage;
|
|
2187
2523
|
const paged = matchingRootSpans.slice(start, end);
|
|
2188
2524
|
return {
|
|
2189
|
-
spans:
|
|
2525
|
+
spans: chunkSU5APAM6_cjs.toTraceSpans(paged),
|
|
2190
2526
|
pagination: { total, page, perPage, hasMore: end < total }
|
|
2191
2527
|
};
|
|
2192
2528
|
}
|
|
@@ -2488,7 +2824,7 @@ var InMemoryPromptBlocksStorage = class extends PromptBlocksStorage {
|
|
|
2488
2824
|
if (metadata && Object.keys(metadata).length > 0) {
|
|
2489
2825
|
blocks = blocks.filter((block) => {
|
|
2490
2826
|
if (!block.metadata) return false;
|
|
2491
|
-
return Object.entries(metadata).every(([key, value]) =>
|
|
2827
|
+
return Object.entries(metadata).every(([key, value]) => chunk65PHUUMF_cjs.deepEqual(block.metadata[key], value));
|
|
2492
2828
|
});
|
|
2493
2829
|
}
|
|
2494
2830
|
const sortedBlocks = this.sortBlocks(blocks, field, direction);
|
|
@@ -2799,7 +3135,7 @@ var InMemoryScorerDefinitionsStorage = class extends ScorerDefinitionsStorage {
|
|
|
2799
3135
|
if (metadata && Object.keys(metadata).length > 0) {
|
|
2800
3136
|
scorers = scorers.filter((scorer) => {
|
|
2801
3137
|
if (!scorer.metadata) return false;
|
|
2802
|
-
return Object.entries(metadata).every(([key, value]) =>
|
|
3138
|
+
return Object.entries(metadata).every(([key, value]) => chunk65PHUUMF_cjs.deepEqual(scorer.metadata[key], value));
|
|
2803
3139
|
});
|
|
2804
3140
|
}
|
|
2805
3141
|
const sortedScorers = this.sortScorers(scorers, field, direction);
|
|
@@ -3393,7 +3729,8 @@ var InMemoryStore = class extends MastraCompositeStore {
|
|
|
3393
3729
|
observability: new ObservabilityInMemory({ db: this.#db }),
|
|
3394
3730
|
agents: new InMemoryAgentsStorage({ db: this.#db }),
|
|
3395
3731
|
promptBlocks: new InMemoryPromptBlocksStorage({ db: this.#db }),
|
|
3396
|
-
scorerDefinitions: new InMemoryScorerDefinitionsStorage({ db: this.#db })
|
|
3732
|
+
scorerDefinitions: new InMemoryScorerDefinitionsStorage({ db: this.#db }),
|
|
3733
|
+
mcpClients: new InMemoryMCPClientsStorage({ db: this.#db })
|
|
3397
3734
|
};
|
|
3398
3735
|
}
|
|
3399
3736
|
/**
|
|
@@ -3532,7 +3869,14 @@ var StoreOperationsInMemory = class extends StoreOperations {
|
|
|
3532
3869
|
mastra_prompt_blocks: /* @__PURE__ */ new Map(),
|
|
3533
3870
|
mastra_prompt_block_versions: /* @__PURE__ */ new Map(),
|
|
3534
3871
|
mastra_scorer_definitions: /* @__PURE__ */ new Map(),
|
|
3535
|
-
mastra_scorer_definition_versions: /* @__PURE__ */ new Map()
|
|
3872
|
+
mastra_scorer_definition_versions: /* @__PURE__ */ new Map(),
|
|
3873
|
+
mastra_mcp_clients: /* @__PURE__ */ new Map(),
|
|
3874
|
+
mastra_mcp_client_versions: /* @__PURE__ */ new Map(),
|
|
3875
|
+
mastra_datasets: /* @__PURE__ */ new Map(),
|
|
3876
|
+
mastra_dataset_items: /* @__PURE__ */ new Map(),
|
|
3877
|
+
mastra_dataset_versions: /* @__PURE__ */ new Map(),
|
|
3878
|
+
mastra_experiments: /* @__PURE__ */ new Map(),
|
|
3879
|
+
mastra_experiment_results: /* @__PURE__ */ new Map()
|
|
3536
3880
|
};
|
|
3537
3881
|
}
|
|
3538
3882
|
getDatabase() {
|
|
@@ -3541,7 +3885,7 @@ var StoreOperationsInMemory = class extends StoreOperations {
|
|
|
3541
3885
|
async insert({ tableName, record }) {
|
|
3542
3886
|
const table = this.data[tableName];
|
|
3543
3887
|
let key = record.id;
|
|
3544
|
-
if ([
|
|
3888
|
+
if ([chunkSU5APAM6_cjs.TABLE_WORKFLOW_SNAPSHOT].includes(tableName) && !record.id && record.run_id) {
|
|
3545
3889
|
key = record.workflow_name ? `${record.workflow_name}-${record.run_id}` : record.run_id;
|
|
3546
3890
|
record.id = key;
|
|
3547
3891
|
} else if (!record.id) {
|
|
@@ -3554,7 +3898,7 @@ var StoreOperationsInMemory = class extends StoreOperations {
|
|
|
3554
3898
|
const table = this.data[tableName];
|
|
3555
3899
|
for (const record of records) {
|
|
3556
3900
|
let key = record.id;
|
|
3557
|
-
if ([
|
|
3901
|
+
if ([chunkSU5APAM6_cjs.TABLE_WORKFLOW_SNAPSHOT].includes(tableName) && !record.id && record.run_id) {
|
|
3558
3902
|
key = record.run_id;
|
|
3559
3903
|
record.id = key;
|
|
3560
3904
|
} else if (!record.id) {
|
|
@@ -3597,13 +3941,759 @@ var StoreOperationsInMemory = class extends StoreOperations {
|
|
|
3597
3941
|
}
|
|
3598
3942
|
};
|
|
3599
3943
|
|
|
3944
|
+
// src/datasets/validation/errors.ts
|
|
3945
|
+
var SchemaValidationError = class extends Error {
|
|
3946
|
+
constructor(field, errors) {
|
|
3947
|
+
const summary = errors.slice(0, 3).map((e) => e.message).join("; ");
|
|
3948
|
+
super(`Validation failed for ${field}: ${summary}`);
|
|
3949
|
+
this.field = field;
|
|
3950
|
+
this.errors = errors;
|
|
3951
|
+
this.name = "SchemaValidationError";
|
|
3952
|
+
}
|
|
3953
|
+
};
|
|
3954
|
+
var SchemaUpdateValidationError = class extends Error {
|
|
3955
|
+
constructor(failingItems) {
|
|
3956
|
+
const count = failingItems.length;
|
|
3957
|
+
super(`Cannot update schema: ${count} existing item(s) would fail validation`);
|
|
3958
|
+
this.failingItems = failingItems;
|
|
3959
|
+
this.name = "SchemaUpdateValidationError";
|
|
3960
|
+
}
|
|
3961
|
+
};
|
|
3962
|
+
|
|
3963
|
+
// src/datasets/validation/validator.ts
|
|
3964
|
+
function resolveZodSchema(zodString) {
|
|
3965
|
+
return Function("z", `"use strict";return (${zodString});`)(zod.z);
|
|
3966
|
+
}
|
|
3967
|
+
var SchemaValidator = class {
|
|
3968
|
+
cache = /* @__PURE__ */ new Map();
|
|
3969
|
+
/** Get or compile validator for schema */
|
|
3970
|
+
getValidator(schema, cacheKey) {
|
|
3971
|
+
let zodSchema = this.cache.get(cacheKey);
|
|
3972
|
+
if (!zodSchema) {
|
|
3973
|
+
const zodString = jsonToZod.jsonSchemaToZod(schema);
|
|
3974
|
+
zodSchema = resolveZodSchema(zodString);
|
|
3975
|
+
this.cache.set(cacheKey, zodSchema);
|
|
3976
|
+
}
|
|
3977
|
+
return zodSchema;
|
|
3978
|
+
}
|
|
3979
|
+
/** Clear cached validator (call when schema changes) */
|
|
3980
|
+
clearCache(cacheKey) {
|
|
3981
|
+
this.cache.delete(cacheKey);
|
|
3982
|
+
}
|
|
3983
|
+
/** Validate data against schema */
|
|
3984
|
+
validate(data, schema, field, cacheKey) {
|
|
3985
|
+
const zodSchema = this.getValidator(schema, cacheKey);
|
|
3986
|
+
const result = zodSchema.safeParse(data);
|
|
3987
|
+
if (!result.success) {
|
|
3988
|
+
throw new SchemaValidationError(field, this.formatErrors(result.error));
|
|
3989
|
+
}
|
|
3990
|
+
}
|
|
3991
|
+
/** Validate multiple items, returning valid/invalid split */
|
|
3992
|
+
validateBatch(items, inputSchema, outputSchema, cacheKeyPrefix, maxErrors = 10) {
|
|
3993
|
+
const result = { valid: [], invalid: [] };
|
|
3994
|
+
const inputValidator = inputSchema ? this.getValidator(inputSchema, `${cacheKeyPrefix}:input`) : null;
|
|
3995
|
+
const outputValidator = outputSchema ? this.getValidator(outputSchema, `${cacheKeyPrefix}:output`) : null;
|
|
3996
|
+
for (const [i, item] of items.entries()) {
|
|
3997
|
+
let hasError = false;
|
|
3998
|
+
if (inputValidator) {
|
|
3999
|
+
const inputResult = inputValidator.safeParse(item.input);
|
|
4000
|
+
if (!inputResult.success) {
|
|
4001
|
+
result.invalid.push({
|
|
4002
|
+
index: i,
|
|
4003
|
+
data: item,
|
|
4004
|
+
field: "input",
|
|
4005
|
+
errors: this.formatErrors(inputResult.error)
|
|
4006
|
+
});
|
|
4007
|
+
hasError = true;
|
|
4008
|
+
if (result.invalid.length >= maxErrors) break;
|
|
4009
|
+
}
|
|
4010
|
+
}
|
|
4011
|
+
if (!hasError && outputValidator && item.groundTruth !== void 0) {
|
|
4012
|
+
const outputResult = outputValidator.safeParse(item.groundTruth);
|
|
4013
|
+
if (!outputResult.success) {
|
|
4014
|
+
result.invalid.push({
|
|
4015
|
+
index: i,
|
|
4016
|
+
data: item,
|
|
4017
|
+
field: "groundTruth",
|
|
4018
|
+
errors: this.formatErrors(outputResult.error)
|
|
4019
|
+
});
|
|
4020
|
+
hasError = true;
|
|
4021
|
+
if (result.invalid.length >= maxErrors) break;
|
|
4022
|
+
}
|
|
4023
|
+
}
|
|
4024
|
+
if (!hasError) {
|
|
4025
|
+
result.valid.push({ index: i, data: item });
|
|
4026
|
+
}
|
|
4027
|
+
}
|
|
4028
|
+
return result;
|
|
4029
|
+
}
|
|
4030
|
+
/** Format Zod errors to FieldError array */
|
|
4031
|
+
formatErrors(error) {
|
|
4032
|
+
return error.issues.slice(0, 5).map((issue) => ({
|
|
4033
|
+
// Convert Zod path array to JSON Pointer string
|
|
4034
|
+
path: issue.path.length > 0 ? "/" + issue.path.join("/") : "/",
|
|
4035
|
+
code: issue.code,
|
|
4036
|
+
message: issue.message
|
|
4037
|
+
}));
|
|
4038
|
+
}
|
|
4039
|
+
};
|
|
4040
|
+
var validatorInstance = null;
|
|
4041
|
+
function getSchemaValidator() {
|
|
4042
|
+
if (!validatorInstance) {
|
|
4043
|
+
validatorInstance = new SchemaValidator();
|
|
4044
|
+
}
|
|
4045
|
+
return validatorInstance;
|
|
4046
|
+
}
|
|
4047
|
+
function createValidator() {
|
|
4048
|
+
return new SchemaValidator();
|
|
4049
|
+
}
|
|
4050
|
+
|
|
4051
|
+
// src/storage/domains/datasets/base.ts
|
|
4052
|
+
var DatasetsStorage = class extends StorageDomain {
|
|
4053
|
+
constructor() {
|
|
4054
|
+
super({
|
|
4055
|
+
component: "STORAGE",
|
|
4056
|
+
name: "DATASETS"
|
|
4057
|
+
});
|
|
4058
|
+
}
|
|
4059
|
+
async dangerouslyClearAll() {
|
|
4060
|
+
}
|
|
4061
|
+
/**
|
|
4062
|
+
* Update a dataset. Validates existing items against new schemas if schemas are changing.
|
|
4063
|
+
* Subclasses implement _doUpdateDataset for actual storage operation.
|
|
4064
|
+
*/
|
|
4065
|
+
async updateDataset(args) {
|
|
4066
|
+
const existing = await this.getDatasetById({ id: args.id });
|
|
4067
|
+
if (!existing) {
|
|
4068
|
+
throw new Error(`Dataset not found: ${args.id}`);
|
|
4069
|
+
}
|
|
4070
|
+
const inputSchemaChanging = args.inputSchema !== void 0 && JSON.stringify(args.inputSchema) !== JSON.stringify(existing.inputSchema);
|
|
4071
|
+
const groundTruthSchemaChanging = args.groundTruthSchema !== void 0 && JSON.stringify(args.groundTruthSchema) !== JSON.stringify(existing.groundTruthSchema);
|
|
4072
|
+
if (inputSchemaChanging || groundTruthSchemaChanging) {
|
|
4073
|
+
const itemsResult = await this.listItems({
|
|
4074
|
+
datasetId: args.id,
|
|
4075
|
+
pagination: { page: 0, perPage: false }
|
|
4076
|
+
// Get all items
|
|
4077
|
+
});
|
|
4078
|
+
const items = itemsResult.items;
|
|
4079
|
+
if (items.length > 0) {
|
|
4080
|
+
const validator = getSchemaValidator();
|
|
4081
|
+
const newInputSchema = args.inputSchema !== void 0 ? args.inputSchema : existing.inputSchema;
|
|
4082
|
+
const newOutputSchema = args.groundTruthSchema !== void 0 ? args.groundTruthSchema : existing.groundTruthSchema;
|
|
4083
|
+
const result = validator.validateBatch(
|
|
4084
|
+
items.map((i) => ({ input: i.input, groundTruth: i.groundTruth })),
|
|
4085
|
+
newInputSchema,
|
|
4086
|
+
newOutputSchema,
|
|
4087
|
+
`dataset:${args.id}:schema-update`,
|
|
4088
|
+
10
|
|
4089
|
+
// Max 10 errors to report
|
|
4090
|
+
);
|
|
4091
|
+
if (result.invalid.length > 0) {
|
|
4092
|
+
throw new SchemaUpdateValidationError(result.invalid);
|
|
4093
|
+
}
|
|
4094
|
+
validator.clearCache(`dataset:${args.id}:input`);
|
|
4095
|
+
validator.clearCache(`dataset:${args.id}:output`);
|
|
4096
|
+
}
|
|
4097
|
+
}
|
|
4098
|
+
return this._doUpdateDataset(args);
|
|
4099
|
+
}
|
|
4100
|
+
/**
|
|
4101
|
+
* Add an item to a dataset. Validates input/groundTruth against dataset schemas.
|
|
4102
|
+
* Subclasses implement _doAddItem which handles SCD-2 versioning internally.
|
|
4103
|
+
*/
|
|
4104
|
+
async addItem(args) {
|
|
4105
|
+
const dataset = await this.getDatasetById({ id: args.datasetId });
|
|
4106
|
+
if (!dataset) {
|
|
4107
|
+
throw new Error(`Dataset not found: ${args.datasetId}`);
|
|
4108
|
+
}
|
|
4109
|
+
const validator = getSchemaValidator();
|
|
4110
|
+
const cacheKey = `dataset:${args.datasetId}`;
|
|
4111
|
+
if (dataset.inputSchema) {
|
|
4112
|
+
validator.validate(args.input, dataset.inputSchema, "input", `${cacheKey}:input`);
|
|
4113
|
+
}
|
|
4114
|
+
if (dataset.groundTruthSchema && args.groundTruth !== void 0) {
|
|
4115
|
+
validator.validate(args.groundTruth, dataset.groundTruthSchema, "groundTruth", `${cacheKey}:output`);
|
|
4116
|
+
}
|
|
4117
|
+
return this._doAddItem(args);
|
|
4118
|
+
}
|
|
4119
|
+
/**
|
|
4120
|
+
* Update an item in a dataset. Validates changed fields against dataset schemas.
|
|
4121
|
+
* Subclasses implement _doUpdateItem which handles SCD-2 versioning internally.
|
|
4122
|
+
*/
|
|
4123
|
+
async updateItem(args) {
|
|
4124
|
+
const dataset = await this.getDatasetById({ id: args.datasetId });
|
|
4125
|
+
if (!dataset) {
|
|
4126
|
+
throw new Error(`Dataset not found: ${args.datasetId}`);
|
|
4127
|
+
}
|
|
4128
|
+
const validator = getSchemaValidator();
|
|
4129
|
+
const cacheKey = `dataset:${args.datasetId}`;
|
|
4130
|
+
if (args.input !== void 0 && dataset.inputSchema) {
|
|
4131
|
+
validator.validate(args.input, dataset.inputSchema, "input", `${cacheKey}:input`);
|
|
4132
|
+
}
|
|
4133
|
+
if (args.groundTruth !== void 0 && dataset.groundTruthSchema) {
|
|
4134
|
+
validator.validate(args.groundTruth, dataset.groundTruthSchema, "groundTruth", `${cacheKey}:output`);
|
|
4135
|
+
}
|
|
4136
|
+
return this._doUpdateItem(args);
|
|
4137
|
+
}
|
|
4138
|
+
/**
|
|
4139
|
+
* Delete an item from a dataset. Creates a tombstone row via SCD-2.
|
|
4140
|
+
* Subclasses implement _doDeleteItem which handles SCD-2 versioning internally.
|
|
4141
|
+
*/
|
|
4142
|
+
async deleteItem(args) {
|
|
4143
|
+
return this._doDeleteItem(args);
|
|
4144
|
+
}
|
|
4145
|
+
/**
|
|
4146
|
+
* Batch insert items to a dataset. Validates all items against dataset schemas,
|
|
4147
|
+
* then delegates to subclass which handles SCD-2 versioning internally.
|
|
4148
|
+
*/
|
|
4149
|
+
async batchInsertItems(input) {
|
|
4150
|
+
const dataset = await this.getDatasetById({ id: input.datasetId });
|
|
4151
|
+
if (!dataset) {
|
|
4152
|
+
throw new Error(`Dataset not found: ${input.datasetId}`);
|
|
4153
|
+
}
|
|
4154
|
+
const validator = getSchemaValidator();
|
|
4155
|
+
const cacheKey = `dataset:${input.datasetId}`;
|
|
4156
|
+
for (const itemData of input.items) {
|
|
4157
|
+
if (dataset.inputSchema) {
|
|
4158
|
+
validator.validate(itemData.input, dataset.inputSchema, "input", `${cacheKey}:input`);
|
|
4159
|
+
}
|
|
4160
|
+
if (dataset.groundTruthSchema && itemData.groundTruth !== void 0) {
|
|
4161
|
+
validator.validate(itemData.groundTruth, dataset.groundTruthSchema, "groundTruth", `${cacheKey}:output`);
|
|
4162
|
+
}
|
|
4163
|
+
}
|
|
4164
|
+
return this._doBatchInsertItems(input);
|
|
4165
|
+
}
|
|
4166
|
+
/**
|
|
4167
|
+
* Batch delete items from a dataset. Creates tombstone rows via SCD-2.
|
|
4168
|
+
* Subclasses implement _doBatchDeleteItems which handles SCD-2 versioning internally.
|
|
4169
|
+
*/
|
|
4170
|
+
async batchDeleteItems(input) {
|
|
4171
|
+
const dataset = await this.getDatasetById({ id: input.datasetId });
|
|
4172
|
+
if (!dataset) {
|
|
4173
|
+
throw new Error(`Dataset not found: ${input.datasetId}`);
|
|
4174
|
+
}
|
|
4175
|
+
return this._doBatchDeleteItems(input);
|
|
4176
|
+
}
|
|
4177
|
+
};
|
|
4178
|
+
|
|
4179
|
+
// src/storage/domains/datasets/inmemory.ts
|
|
4180
|
+
function toDatasetItem(row) {
|
|
4181
|
+
return {
|
|
4182
|
+
id: row.id,
|
|
4183
|
+
datasetId: row.datasetId,
|
|
4184
|
+
datasetVersion: row.datasetVersion,
|
|
4185
|
+
input: row.input,
|
|
4186
|
+
groundTruth: row.groundTruth,
|
|
4187
|
+
metadata: row.metadata,
|
|
4188
|
+
createdAt: row.createdAt,
|
|
4189
|
+
updatedAt: row.updatedAt
|
|
4190
|
+
};
|
|
4191
|
+
}
|
|
4192
|
+
var DatasetsInMemory = class extends DatasetsStorage {
|
|
4193
|
+
db;
|
|
4194
|
+
constructor({ db }) {
|
|
4195
|
+
super();
|
|
4196
|
+
this.db = db;
|
|
4197
|
+
}
|
|
4198
|
+
async dangerouslyClearAll() {
|
|
4199
|
+
this.db.datasets.clear();
|
|
4200
|
+
this.db.datasetItems.clear();
|
|
4201
|
+
this.db.datasetVersions.clear();
|
|
4202
|
+
}
|
|
4203
|
+
// Dataset CRUD
|
|
4204
|
+
async createDataset(input) {
|
|
4205
|
+
const id = crypto.randomUUID();
|
|
4206
|
+
const now = /* @__PURE__ */ new Date();
|
|
4207
|
+
const dataset = {
|
|
4208
|
+
id,
|
|
4209
|
+
name: input.name,
|
|
4210
|
+
description: input.description,
|
|
4211
|
+
metadata: input.metadata,
|
|
4212
|
+
inputSchema: input.inputSchema,
|
|
4213
|
+
groundTruthSchema: input.groundTruthSchema,
|
|
4214
|
+
version: 0,
|
|
4215
|
+
createdAt: now,
|
|
4216
|
+
updatedAt: now
|
|
4217
|
+
};
|
|
4218
|
+
this.db.datasets.set(id, dataset);
|
|
4219
|
+
return dataset;
|
|
4220
|
+
}
|
|
4221
|
+
async getDatasetById({ id }) {
|
|
4222
|
+
return this.db.datasets.get(id) ?? null;
|
|
4223
|
+
}
|
|
4224
|
+
async _doUpdateDataset(args) {
|
|
4225
|
+
const existing = this.db.datasets.get(args.id);
|
|
4226
|
+
if (!existing) {
|
|
4227
|
+
throw new Error(`Dataset not found: ${args.id}`);
|
|
4228
|
+
}
|
|
4229
|
+
const updated = {
|
|
4230
|
+
...existing,
|
|
4231
|
+
name: args.name ?? existing.name,
|
|
4232
|
+
description: args.description ?? existing.description,
|
|
4233
|
+
metadata: args.metadata ?? existing.metadata,
|
|
4234
|
+
inputSchema: args.inputSchema !== void 0 ? args.inputSchema : existing.inputSchema,
|
|
4235
|
+
groundTruthSchema: args.groundTruthSchema !== void 0 ? args.groundTruthSchema : existing.groundTruthSchema,
|
|
4236
|
+
updatedAt: /* @__PURE__ */ new Date()
|
|
4237
|
+
};
|
|
4238
|
+
this.db.datasets.set(args.id, updated);
|
|
4239
|
+
return updated;
|
|
4240
|
+
}
|
|
4241
|
+
async deleteDataset({ id }) {
|
|
4242
|
+
for (const [itemId, rows] of this.db.datasetItems) {
|
|
4243
|
+
if (rows.length > 0 && rows[0].datasetId === id) {
|
|
4244
|
+
this.db.datasetItems.delete(itemId);
|
|
4245
|
+
}
|
|
4246
|
+
}
|
|
4247
|
+
for (const [vId, v] of this.db.datasetVersions) {
|
|
4248
|
+
if (v.datasetId === id) {
|
|
4249
|
+
this.db.datasetVersions.delete(vId);
|
|
4250
|
+
}
|
|
4251
|
+
}
|
|
4252
|
+
for (const [expId, exp] of this.db.experiments) {
|
|
4253
|
+
if (exp.datasetId === id) {
|
|
4254
|
+
this.db.experiments.set(expId, { ...exp, datasetId: null, datasetVersion: null });
|
|
4255
|
+
}
|
|
4256
|
+
}
|
|
4257
|
+
this.db.datasets.delete(id);
|
|
4258
|
+
}
|
|
4259
|
+
async listDatasets(args) {
|
|
4260
|
+
const datasets = Array.from(this.db.datasets.values());
|
|
4261
|
+
datasets.sort((a, b) => b.createdAt.getTime() - a.createdAt.getTime());
|
|
4262
|
+
const { page, perPage: perPageInput } = args.pagination;
|
|
4263
|
+
const perPage = normalizePerPage(perPageInput, 100);
|
|
4264
|
+
const { offset: start, perPage: perPageForResponse } = calculatePagination(page, perPageInput, perPage);
|
|
4265
|
+
const end = perPageInput === false ? datasets.length : start + perPage;
|
|
4266
|
+
return {
|
|
4267
|
+
datasets: datasets.slice(start, end),
|
|
4268
|
+
pagination: {
|
|
4269
|
+
total: datasets.length,
|
|
4270
|
+
page,
|
|
4271
|
+
perPage: perPageForResponse,
|
|
4272
|
+
hasMore: perPageInput === false ? false : datasets.length > end
|
|
4273
|
+
}
|
|
4274
|
+
};
|
|
4275
|
+
}
|
|
4276
|
+
// --- SCD-2 item mutations ---
|
|
4277
|
+
async _doAddItem(args) {
|
|
4278
|
+
const dataset = this.db.datasets.get(args.datasetId);
|
|
4279
|
+
if (!dataset) {
|
|
4280
|
+
throw new Error(`Dataset not found: ${args.datasetId}`);
|
|
4281
|
+
}
|
|
4282
|
+
const newVersion = dataset.version + 1;
|
|
4283
|
+
this.db.datasets.set(args.datasetId, { ...dataset, version: newVersion });
|
|
4284
|
+
const now = /* @__PURE__ */ new Date();
|
|
4285
|
+
const id = crypto.randomUUID();
|
|
4286
|
+
const row = {
|
|
4287
|
+
id,
|
|
4288
|
+
datasetId: args.datasetId,
|
|
4289
|
+
datasetVersion: newVersion,
|
|
4290
|
+
validTo: null,
|
|
4291
|
+
isDeleted: false,
|
|
4292
|
+
input: args.input,
|
|
4293
|
+
groundTruth: args.groundTruth,
|
|
4294
|
+
metadata: args.metadata,
|
|
4295
|
+
createdAt: now,
|
|
4296
|
+
updatedAt: now
|
|
4297
|
+
};
|
|
4298
|
+
this.db.datasetItems.set(id, [row]);
|
|
4299
|
+
await this.createDatasetVersion(args.datasetId, newVersion);
|
|
4300
|
+
return toDatasetItem(row);
|
|
4301
|
+
}
|
|
4302
|
+
async _doUpdateItem(args) {
|
|
4303
|
+
const rows = this.db.datasetItems.get(args.id);
|
|
4304
|
+
if (!rows || rows.length === 0) {
|
|
4305
|
+
throw new Error(`Item not found: ${args.id}`);
|
|
4306
|
+
}
|
|
4307
|
+
const currentRow = rows.find((r) => r.validTo === null && !r.isDeleted);
|
|
4308
|
+
if (!currentRow) {
|
|
4309
|
+
throw new Error(`Item not found: ${args.id}`);
|
|
4310
|
+
}
|
|
4311
|
+
if (currentRow.datasetId !== args.datasetId) {
|
|
4312
|
+
throw new Error(`Item ${args.id} does not belong to dataset ${args.datasetId}`);
|
|
4313
|
+
}
|
|
4314
|
+
const dataset = this.db.datasets.get(args.datasetId);
|
|
4315
|
+
if (!dataset) {
|
|
4316
|
+
throw new Error(`Dataset not found: ${args.datasetId}`);
|
|
4317
|
+
}
|
|
4318
|
+
const newVersion = dataset.version + 1;
|
|
4319
|
+
this.db.datasets.set(args.datasetId, { ...dataset, version: newVersion });
|
|
4320
|
+
currentRow.validTo = newVersion;
|
|
4321
|
+
const now = /* @__PURE__ */ new Date();
|
|
4322
|
+
const newRow = {
|
|
4323
|
+
id: args.id,
|
|
4324
|
+
datasetId: args.datasetId,
|
|
4325
|
+
datasetVersion: newVersion,
|
|
4326
|
+
validTo: null,
|
|
4327
|
+
isDeleted: false,
|
|
4328
|
+
input: args.input ?? currentRow.input,
|
|
4329
|
+
groundTruth: args.groundTruth ?? currentRow.groundTruth,
|
|
4330
|
+
metadata: args.metadata ?? currentRow.metadata,
|
|
4331
|
+
createdAt: currentRow.createdAt,
|
|
4332
|
+
updatedAt: now
|
|
4333
|
+
};
|
|
4334
|
+
rows.push(newRow);
|
|
4335
|
+
await this.createDatasetVersion(args.datasetId, newVersion);
|
|
4336
|
+
return toDatasetItem(newRow);
|
|
4337
|
+
}
|
|
4338
|
+
async _doDeleteItem({ id, datasetId }) {
|
|
4339
|
+
const rows = this.db.datasetItems.get(id);
|
|
4340
|
+
if (!rows || rows.length === 0) {
|
|
4341
|
+
return;
|
|
4342
|
+
}
|
|
4343
|
+
const currentRow = rows.find((r) => r.validTo === null && !r.isDeleted);
|
|
4344
|
+
if (!currentRow) {
|
|
4345
|
+
return;
|
|
4346
|
+
}
|
|
4347
|
+
if (currentRow.datasetId !== datasetId) {
|
|
4348
|
+
throw new Error(`Item ${id} does not belong to dataset ${datasetId}`);
|
|
4349
|
+
}
|
|
4350
|
+
const dataset = this.db.datasets.get(datasetId);
|
|
4351
|
+
if (!dataset) {
|
|
4352
|
+
throw new Error(`Dataset not found: ${datasetId}`);
|
|
4353
|
+
}
|
|
4354
|
+
const newVersion = dataset.version + 1;
|
|
4355
|
+
this.db.datasets.set(datasetId, { ...dataset, version: newVersion });
|
|
4356
|
+
currentRow.validTo = newVersion;
|
|
4357
|
+
const now = /* @__PURE__ */ new Date();
|
|
4358
|
+
rows.push({
|
|
4359
|
+
id,
|
|
4360
|
+
datasetId,
|
|
4361
|
+
datasetVersion: newVersion,
|
|
4362
|
+
validTo: null,
|
|
4363
|
+
isDeleted: true,
|
|
4364
|
+
input: currentRow.input,
|
|
4365
|
+
groundTruth: currentRow.groundTruth,
|
|
4366
|
+
metadata: currentRow.metadata,
|
|
4367
|
+
createdAt: currentRow.createdAt,
|
|
4368
|
+
updatedAt: now
|
|
4369
|
+
});
|
|
4370
|
+
await this.createDatasetVersion(datasetId, newVersion);
|
|
4371
|
+
}
|
|
4372
|
+
// --- SCD-2 queries ---
|
|
4373
|
+
async getItemById(args) {
|
|
4374
|
+
const rows = this.db.datasetItems.get(args.id);
|
|
4375
|
+
if (!rows || rows.length === 0) return null;
|
|
4376
|
+
if (args.datasetVersion !== void 0) {
|
|
4377
|
+
const row = rows.find((r) => r.datasetVersion === args.datasetVersion && !r.isDeleted);
|
|
4378
|
+
return row ? toDatasetItem(row) : null;
|
|
4379
|
+
}
|
|
4380
|
+
const current = rows.find((r) => r.validTo === null && !r.isDeleted);
|
|
4381
|
+
return current ? toDatasetItem(current) : null;
|
|
4382
|
+
}
|
|
4383
|
+
async getItemsByVersion({ datasetId, version }) {
|
|
4384
|
+
const items = [];
|
|
4385
|
+
for (const rows of this.db.datasetItems.values()) {
|
|
4386
|
+
if (rows.length === 0 || rows[0].datasetId !== datasetId) continue;
|
|
4387
|
+
const visible = rows.find(
|
|
4388
|
+
(r) => r.datasetVersion <= version && (r.validTo === null || r.validTo > version) && !r.isDeleted
|
|
4389
|
+
);
|
|
4390
|
+
if (visible) {
|
|
4391
|
+
items.push(toDatasetItem(visible));
|
|
4392
|
+
}
|
|
4393
|
+
}
|
|
4394
|
+
items.sort((a, b) => b.createdAt.getTime() - a.createdAt.getTime() || b.id.localeCompare(a.id));
|
|
4395
|
+
return items;
|
|
4396
|
+
}
|
|
4397
|
+
async getItemHistory(itemId) {
|
|
4398
|
+
const rows = this.db.datasetItems.get(itemId);
|
|
4399
|
+
if (!rows) return [];
|
|
4400
|
+
return [...rows].sort((a, b) => b.datasetVersion - a.datasetVersion);
|
|
4401
|
+
}
|
|
4402
|
+
async listItems(args) {
|
|
4403
|
+
let items;
|
|
4404
|
+
if (args.version !== void 0) {
|
|
4405
|
+
items = await this.getItemsByVersion({ datasetId: args.datasetId, version: args.version });
|
|
4406
|
+
} else {
|
|
4407
|
+
items = [];
|
|
4408
|
+
for (const rows of this.db.datasetItems.values()) {
|
|
4409
|
+
if (rows.length === 0 || rows[0].datasetId !== args.datasetId) continue;
|
|
4410
|
+
const current = rows.find((r) => r.validTo === null && !r.isDeleted);
|
|
4411
|
+
if (current) {
|
|
4412
|
+
items.push(toDatasetItem(current));
|
|
4413
|
+
}
|
|
4414
|
+
}
|
|
4415
|
+
}
|
|
4416
|
+
if (args.search) {
|
|
4417
|
+
const searchLower = args.search.toLowerCase();
|
|
4418
|
+
items = items.filter((item) => {
|
|
4419
|
+
const inputStr = typeof item.input === "string" ? item.input : JSON.stringify(item.input);
|
|
4420
|
+
const outputStr = item.groundTruth ? typeof item.groundTruth === "string" ? item.groundTruth : JSON.stringify(item.groundTruth) : "";
|
|
4421
|
+
return inputStr.toLowerCase().includes(searchLower) || outputStr.toLowerCase().includes(searchLower);
|
|
4422
|
+
});
|
|
4423
|
+
}
|
|
4424
|
+
items.sort((a, b) => b.createdAt.getTime() - a.createdAt.getTime() || b.id.localeCompare(a.id));
|
|
4425
|
+
const { page, perPage: perPageInput } = args.pagination;
|
|
4426
|
+
const perPage = normalizePerPage(perPageInput, 100);
|
|
4427
|
+
const { offset: start, perPage: perPageForResponse } = calculatePagination(page, perPageInput, perPage);
|
|
4428
|
+
const end = perPageInput === false ? items.length : start + perPage;
|
|
4429
|
+
return {
|
|
4430
|
+
items: items.slice(start, end),
|
|
4431
|
+
pagination: {
|
|
4432
|
+
total: items.length,
|
|
4433
|
+
page,
|
|
4434
|
+
perPage: perPageForResponse,
|
|
4435
|
+
hasMore: perPageInput === false ? false : items.length > end
|
|
4436
|
+
}
|
|
4437
|
+
};
|
|
4438
|
+
}
|
|
4439
|
+
// --- Dataset version methods ---
|
|
4440
|
+
async createDatasetVersion(datasetId, version) {
|
|
4441
|
+
const id = crypto.randomUUID();
|
|
4442
|
+
const dsVersion = {
|
|
4443
|
+
id,
|
|
4444
|
+
datasetId,
|
|
4445
|
+
version,
|
|
4446
|
+
createdAt: /* @__PURE__ */ new Date()
|
|
4447
|
+
};
|
|
4448
|
+
this.db.datasetVersions.set(id, dsVersion);
|
|
4449
|
+
return dsVersion;
|
|
4450
|
+
}
|
|
4451
|
+
async listDatasetVersions(input) {
|
|
4452
|
+
const versions = [];
|
|
4453
|
+
for (const v of this.db.datasetVersions.values()) {
|
|
4454
|
+
if (v.datasetId === input.datasetId) {
|
|
4455
|
+
versions.push(v);
|
|
4456
|
+
}
|
|
4457
|
+
}
|
|
4458
|
+
versions.sort((a, b) => b.version - a.version);
|
|
4459
|
+
const { page, perPage: perPageInput } = input.pagination;
|
|
4460
|
+
const perPage = normalizePerPage(perPageInput, 100);
|
|
4461
|
+
const { offset: start, perPage: perPageForResponse } = calculatePagination(page, perPageInput, perPage);
|
|
4462
|
+
const end = perPageInput === false ? versions.length : start + perPage;
|
|
4463
|
+
return {
|
|
4464
|
+
versions: versions.slice(start, end),
|
|
4465
|
+
pagination: {
|
|
4466
|
+
total: versions.length,
|
|
4467
|
+
page,
|
|
4468
|
+
perPage: perPageForResponse,
|
|
4469
|
+
hasMore: perPageInput === false ? false : versions.length > end
|
|
4470
|
+
}
|
|
4471
|
+
};
|
|
4472
|
+
}
|
|
4473
|
+
// --- Bulk operations (SCD-2 internally) ---
|
|
4474
|
+
async _doBatchInsertItems(input) {
|
|
4475
|
+
const dataset = this.db.datasets.get(input.datasetId);
|
|
4476
|
+
if (!dataset) {
|
|
4477
|
+
throw new Error(`Dataset not found: ${input.datasetId}`);
|
|
4478
|
+
}
|
|
4479
|
+
const newVersion = dataset.version + 1;
|
|
4480
|
+
this.db.datasets.set(input.datasetId, { ...dataset, version: newVersion });
|
|
4481
|
+
const now = /* @__PURE__ */ new Date();
|
|
4482
|
+
const items = [];
|
|
4483
|
+
for (const itemInput of input.items) {
|
|
4484
|
+
const id = crypto.randomUUID();
|
|
4485
|
+
const row = {
|
|
4486
|
+
id,
|
|
4487
|
+
datasetId: input.datasetId,
|
|
4488
|
+
datasetVersion: newVersion,
|
|
4489
|
+
validTo: null,
|
|
4490
|
+
isDeleted: false,
|
|
4491
|
+
input: itemInput.input,
|
|
4492
|
+
groundTruth: itemInput.groundTruth,
|
|
4493
|
+
metadata: itemInput.metadata,
|
|
4494
|
+
createdAt: now,
|
|
4495
|
+
updatedAt: now
|
|
4496
|
+
};
|
|
4497
|
+
this.db.datasetItems.set(id, [row]);
|
|
4498
|
+
items.push(toDatasetItem(row));
|
|
4499
|
+
}
|
|
4500
|
+
await this.createDatasetVersion(input.datasetId, newVersion);
|
|
4501
|
+
return items;
|
|
4502
|
+
}
|
|
4503
|
+
async _doBatchDeleteItems(input) {
|
|
4504
|
+
const dataset = this.db.datasets.get(input.datasetId);
|
|
4505
|
+
if (!dataset) {
|
|
4506
|
+
throw new Error(`Dataset not found: ${input.datasetId}`);
|
|
4507
|
+
}
|
|
4508
|
+
const newVersion = dataset.version + 1;
|
|
4509
|
+
this.db.datasets.set(input.datasetId, { ...dataset, version: newVersion });
|
|
4510
|
+
const now = /* @__PURE__ */ new Date();
|
|
4511
|
+
for (const itemId of input.itemIds) {
|
|
4512
|
+
const rows = this.db.datasetItems.get(itemId);
|
|
4513
|
+
if (!rows) continue;
|
|
4514
|
+
const currentRow = rows.find((r) => r.validTo === null && !r.isDeleted);
|
|
4515
|
+
if (!currentRow || currentRow.datasetId !== input.datasetId) continue;
|
|
4516
|
+
currentRow.validTo = newVersion;
|
|
4517
|
+
rows.push({
|
|
4518
|
+
id: itemId,
|
|
4519
|
+
datasetId: input.datasetId,
|
|
4520
|
+
datasetVersion: newVersion,
|
|
4521
|
+
validTo: null,
|
|
4522
|
+
isDeleted: true,
|
|
4523
|
+
input: currentRow.input,
|
|
4524
|
+
groundTruth: currentRow.groundTruth,
|
|
4525
|
+
metadata: currentRow.metadata,
|
|
4526
|
+
createdAt: currentRow.createdAt,
|
|
4527
|
+
updatedAt: now
|
|
4528
|
+
});
|
|
4529
|
+
}
|
|
4530
|
+
await this.createDatasetVersion(input.datasetId, newVersion);
|
|
4531
|
+
}
|
|
4532
|
+
};
|
|
4533
|
+
|
|
4534
|
+
// src/storage/domains/experiments/base.ts
|
|
4535
|
+
var ExperimentsStorage = class extends StorageDomain {
|
|
4536
|
+
constructor() {
|
|
4537
|
+
super({
|
|
4538
|
+
component: "STORAGE",
|
|
4539
|
+
name: "EXPERIMENTS"
|
|
4540
|
+
});
|
|
4541
|
+
}
|
|
4542
|
+
async dangerouslyClearAll() {
|
|
4543
|
+
}
|
|
4544
|
+
};
|
|
4545
|
+
|
|
4546
|
+
// src/storage/domains/experiments/inmemory.ts
|
|
4547
|
+
var ExperimentsInMemory = class extends ExperimentsStorage {
|
|
4548
|
+
db;
|
|
4549
|
+
constructor({ db }) {
|
|
4550
|
+
super();
|
|
4551
|
+
this.db = db;
|
|
4552
|
+
}
|
|
4553
|
+
async dangerouslyClearAll() {
|
|
4554
|
+
this.db.experiments.clear();
|
|
4555
|
+
this.db.experimentResults.clear();
|
|
4556
|
+
}
|
|
4557
|
+
// Experiment lifecycle
|
|
4558
|
+
async createExperiment(input) {
|
|
4559
|
+
const now = /* @__PURE__ */ new Date();
|
|
4560
|
+
const experiment = {
|
|
4561
|
+
id: input.id ?? crypto.randomUUID(),
|
|
4562
|
+
datasetId: input.datasetId,
|
|
4563
|
+
datasetVersion: input.datasetVersion,
|
|
4564
|
+
targetType: input.targetType,
|
|
4565
|
+
targetId: input.targetId,
|
|
4566
|
+
name: input.name,
|
|
4567
|
+
description: input.description,
|
|
4568
|
+
metadata: input.metadata,
|
|
4569
|
+
status: "pending",
|
|
4570
|
+
totalItems: input.totalItems,
|
|
4571
|
+
succeededCount: 0,
|
|
4572
|
+
failedCount: 0,
|
|
4573
|
+
skippedCount: 0,
|
|
4574
|
+
startedAt: null,
|
|
4575
|
+
completedAt: null,
|
|
4576
|
+
createdAt: now,
|
|
4577
|
+
updatedAt: now
|
|
4578
|
+
};
|
|
4579
|
+
this.db.experiments.set(experiment.id, experiment);
|
|
4580
|
+
return experiment;
|
|
4581
|
+
}
|
|
4582
|
+
async updateExperiment(input) {
|
|
4583
|
+
const existing = this.db.experiments.get(input.id);
|
|
4584
|
+
if (!existing) {
|
|
4585
|
+
throw new Error(`Experiment not found: ${input.id}`);
|
|
4586
|
+
}
|
|
4587
|
+
const updated = {
|
|
4588
|
+
...existing,
|
|
4589
|
+
status: input.status ?? existing.status,
|
|
4590
|
+
succeededCount: input.succeededCount ?? existing.succeededCount,
|
|
4591
|
+
failedCount: input.failedCount ?? existing.failedCount,
|
|
4592
|
+
skippedCount: input.skippedCount ?? existing.skippedCount,
|
|
4593
|
+
startedAt: input.startedAt ?? existing.startedAt,
|
|
4594
|
+
completedAt: input.completedAt ?? existing.completedAt,
|
|
4595
|
+
name: input.name ?? existing.name,
|
|
4596
|
+
description: input.description ?? existing.description,
|
|
4597
|
+
metadata: input.metadata ?? existing.metadata,
|
|
4598
|
+
updatedAt: /* @__PURE__ */ new Date()
|
|
4599
|
+
};
|
|
4600
|
+
this.db.experiments.set(input.id, updated);
|
|
4601
|
+
return updated;
|
|
4602
|
+
}
|
|
4603
|
+
async getExperimentById(args) {
|
|
4604
|
+
return this.db.experiments.get(args.id) ?? null;
|
|
4605
|
+
}
|
|
4606
|
+
async listExperiments(args) {
|
|
4607
|
+
let experiments = Array.from(this.db.experiments.values());
|
|
4608
|
+
if (args.datasetId) {
|
|
4609
|
+
experiments = experiments.filter((r) => r.datasetId === args.datasetId);
|
|
4610
|
+
}
|
|
4611
|
+
experiments.sort((a, b) => b.createdAt.getTime() - a.createdAt.getTime());
|
|
4612
|
+
const { page, perPage: perPageInput } = args.pagination;
|
|
4613
|
+
const perPage = normalizePerPage(perPageInput, 100);
|
|
4614
|
+
const { offset: start, perPage: perPageForResponse } = calculatePagination(page, perPageInput, perPage);
|
|
4615
|
+
const end = perPageInput === false ? experiments.length : start + perPage;
|
|
4616
|
+
return {
|
|
4617
|
+
experiments: experiments.slice(start, end),
|
|
4618
|
+
pagination: {
|
|
4619
|
+
total: experiments.length,
|
|
4620
|
+
page,
|
|
4621
|
+
perPage: perPageForResponse,
|
|
4622
|
+
hasMore: perPageInput === false ? false : experiments.length > end
|
|
4623
|
+
}
|
|
4624
|
+
};
|
|
4625
|
+
}
|
|
4626
|
+
async deleteExperiment(args) {
|
|
4627
|
+
this.db.experiments.delete(args.id);
|
|
4628
|
+
for (const [resultId, result] of this.db.experimentResults) {
|
|
4629
|
+
if (result.experimentId === args.id) {
|
|
4630
|
+
this.db.experimentResults.delete(resultId);
|
|
4631
|
+
}
|
|
4632
|
+
}
|
|
4633
|
+
}
|
|
4634
|
+
// Results (per-item)
|
|
4635
|
+
async addExperimentResult(input) {
|
|
4636
|
+
const now = /* @__PURE__ */ new Date();
|
|
4637
|
+
const result = {
|
|
4638
|
+
id: input.id ?? crypto.randomUUID(),
|
|
4639
|
+
experimentId: input.experimentId,
|
|
4640
|
+
itemId: input.itemId,
|
|
4641
|
+
itemDatasetVersion: input.itemDatasetVersion,
|
|
4642
|
+
input: input.input,
|
|
4643
|
+
output: input.output,
|
|
4644
|
+
groundTruth: input.groundTruth,
|
|
4645
|
+
error: input.error,
|
|
4646
|
+
startedAt: input.startedAt,
|
|
4647
|
+
completedAt: input.completedAt,
|
|
4648
|
+
retryCount: input.retryCount,
|
|
4649
|
+
traceId: input.traceId ?? null,
|
|
4650
|
+
createdAt: now
|
|
4651
|
+
};
|
|
4652
|
+
this.db.experimentResults.set(result.id, result);
|
|
4653
|
+
return result;
|
|
4654
|
+
}
|
|
4655
|
+
async getExperimentResultById(args) {
|
|
4656
|
+
return this.db.experimentResults.get(args.id) ?? null;
|
|
4657
|
+
}
|
|
4658
|
+
async listExperimentResults(args) {
|
|
4659
|
+
let results = Array.from(this.db.experimentResults.values()).filter((r) => r.experimentId === args.experimentId);
|
|
4660
|
+
results.sort((a, b) => a.startedAt.getTime() - b.startedAt.getTime());
|
|
4661
|
+
const { page, perPage: perPageInput } = args.pagination;
|
|
4662
|
+
const perPage = normalizePerPage(perPageInput, 100);
|
|
4663
|
+
const { offset: start, perPage: perPageForResponse } = calculatePagination(page, perPageInput, perPage);
|
|
4664
|
+
const end = perPageInput === false ? results.length : start + perPage;
|
|
4665
|
+
return {
|
|
4666
|
+
results: results.slice(start, end),
|
|
4667
|
+
pagination: {
|
|
4668
|
+
total: results.length,
|
|
4669
|
+
page,
|
|
4670
|
+
perPage: perPageForResponse,
|
|
4671
|
+
hasMore: perPageInput === false ? false : results.length > end
|
|
4672
|
+
}
|
|
4673
|
+
};
|
|
4674
|
+
}
|
|
4675
|
+
async deleteExperimentResults(args) {
|
|
4676
|
+
for (const [resultId, result] of this.db.experimentResults) {
|
|
4677
|
+
if (result.experimentId === args.experimentId) {
|
|
4678
|
+
this.db.experimentResults.delete(resultId);
|
|
4679
|
+
}
|
|
4680
|
+
}
|
|
4681
|
+
}
|
|
4682
|
+
};
|
|
4683
|
+
|
|
3600
4684
|
exports.AgentsStorage = AgentsStorage;
|
|
4685
|
+
exports.DatasetsInMemory = DatasetsInMemory;
|
|
4686
|
+
exports.DatasetsStorage = DatasetsStorage;
|
|
4687
|
+
exports.ExperimentsInMemory = ExperimentsInMemory;
|
|
4688
|
+
exports.ExperimentsStorage = ExperimentsStorage;
|
|
3601
4689
|
exports.InMemoryAgentsStorage = InMemoryAgentsStorage;
|
|
3602
4690
|
exports.InMemoryDB = InMemoryDB;
|
|
4691
|
+
exports.InMemoryMCPClientsStorage = InMemoryMCPClientsStorage;
|
|
3603
4692
|
exports.InMemoryMemory = InMemoryMemory;
|
|
3604
4693
|
exports.InMemoryPromptBlocksStorage = InMemoryPromptBlocksStorage;
|
|
3605
4694
|
exports.InMemoryScorerDefinitionsStorage = InMemoryScorerDefinitionsStorage;
|
|
3606
4695
|
exports.InMemoryStore = InMemoryStore;
|
|
4696
|
+
exports.MCPClientsStorage = MCPClientsStorage;
|
|
3607
4697
|
exports.MastraCompositeStore = MastraCompositeStore;
|
|
3608
4698
|
exports.MastraStorage = MastraStorage;
|
|
3609
4699
|
exports.MemoryStorage = MemoryStorage;
|
|
@@ -3611,6 +4701,9 @@ exports.MockStore = MockStore;
|
|
|
3611
4701
|
exports.ObservabilityInMemory = ObservabilityInMemory;
|
|
3612
4702
|
exports.ObservabilityStorage = ObservabilityStorage;
|
|
3613
4703
|
exports.PromptBlocksStorage = PromptBlocksStorage;
|
|
4704
|
+
exports.SchemaUpdateValidationError = SchemaUpdateValidationError;
|
|
4705
|
+
exports.SchemaValidationError = SchemaValidationError;
|
|
4706
|
+
exports.SchemaValidator = SchemaValidator;
|
|
3614
4707
|
exports.ScorerDefinitionsStorage = ScorerDefinitionsStorage;
|
|
3615
4708
|
exports.ScoresInMemory = ScoresInMemory;
|
|
3616
4709
|
exports.ScoresStorage = ScoresStorage;
|
|
@@ -3624,10 +4717,12 @@ exports.calculatePagination = calculatePagination;
|
|
|
3624
4717
|
exports.createPendingMarker = createPendingMarker;
|
|
3625
4718
|
exports.createStorageErrorId = createStorageErrorId;
|
|
3626
4719
|
exports.createStoreErrorId = createStoreErrorId;
|
|
4720
|
+
exports.createValidator = createValidator;
|
|
3627
4721
|
exports.createVectorErrorId = createVectorErrorId;
|
|
3628
4722
|
exports.ensureDate = ensureDate;
|
|
3629
4723
|
exports.filterByDateRange = filterByDateRange;
|
|
3630
4724
|
exports.getDefaultValue = getDefaultValue;
|
|
4725
|
+
exports.getSchemaValidator = getSchemaValidator;
|
|
3631
4726
|
exports.getSqlType = getSqlType;
|
|
3632
4727
|
exports.jsonValueEquals = jsonValueEquals;
|
|
3633
4728
|
exports.normalizePerPage = normalizePerPage;
|
|
@@ -3635,5 +4730,5 @@ exports.safelyParseJSON = safelyParseJSON;
|
|
|
3635
4730
|
exports.serializeDate = serializeDate;
|
|
3636
4731
|
exports.transformRow = transformRow;
|
|
3637
4732
|
exports.transformScoreRow = transformScoreRow;
|
|
3638
|
-
//# sourceMappingURL=chunk-
|
|
3639
|
-
//# sourceMappingURL=chunk-
|
|
4733
|
+
//# sourceMappingURL=chunk-BP7VYTOP.cjs.map
|
|
4734
|
+
//# sourceMappingURL=chunk-BP7VYTOP.cjs.map
|