@mastra/core 1.2.1-alpha.0 → 1.3.0-alpha.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +341 -0
- package/dist/_types/@internal_ai-sdk-v5/dist/index.d.ts +2093 -262
- package/dist/agent/agent-legacy.d.ts.map +1 -1
- package/dist/agent/agent.d.ts +12 -3
- package/dist/agent/agent.d.ts.map +1 -1
- package/dist/agent/index.cjs +13 -13
- package/dist/agent/index.js +2 -2
- package/dist/agent/message-list/index.cjs +18 -18
- package/dist/agent/message-list/index.js +1 -1
- package/dist/agent/message-list/message-list.d.ts.map +1 -1
- package/dist/agent/types.d.ts +6 -1
- package/dist/agent/types.d.ts.map +1 -1
- package/dist/agent/workflows/prepare-stream/index.d.ts +3 -1
- package/dist/agent/workflows/prepare-stream/index.d.ts.map +1 -1
- package/dist/agent/workflows/prepare-stream/map-results-step.d.ts.map +1 -1
- package/dist/agent/workflows/prepare-stream/stream-step.d.ts +3 -1
- package/dist/agent/workflows/prepare-stream/stream-step.d.ts.map +1 -1
- package/dist/base.cjs +2 -2
- package/dist/base.d.ts +13 -1
- package/dist/base.d.ts.map +1 -1
- package/dist/base.js +1 -1
- package/dist/bundler/index.cjs +2 -2
- package/dist/bundler/index.js +1 -1
- package/dist/cache/index.cjs +3 -3
- package/dist/cache/index.js +1 -1
- package/dist/{chunk-ENCTSDWC.js → chunk-2GWTJFVM.js} +2410 -1402
- package/dist/chunk-2GWTJFVM.js.map +1 -0
- package/dist/{chunk-OB4V67IX.cjs → chunk-2K5PNW2U.cjs} +4 -4
- package/dist/{chunk-OB4V67IX.cjs.map → chunk-2K5PNW2U.cjs.map} +1 -1
- package/dist/{chunk-VZXYBFCX.cjs → chunk-2P6DD7M5.cjs} +10 -10
- package/dist/{chunk-VZXYBFCX.cjs.map → chunk-2P6DD7M5.cjs.map} +1 -1
- package/dist/{chunk-Q2D7LERO.cjs → chunk-2VD5OGOT.cjs} +4 -4
- package/dist/{chunk-Q2D7LERO.cjs.map → chunk-2VD5OGOT.cjs.map} +1 -1
- package/dist/{chunk-2DMSFLJY.cjs → chunk-6TZKQI4R.cjs} +8 -8
- package/dist/chunk-6TZKQI4R.cjs.map +1 -0
- package/dist/{chunk-4NG7CKEG.js → chunk-6VGCVSP4.js} +3 -3
- package/dist/{chunk-4NG7CKEG.js.map → chunk-6VGCVSP4.js.map} +1 -1
- package/dist/{chunk-IIZF4W7B.cjs → chunk-7UWHFWST.cjs} +52 -5
- package/dist/chunk-7UWHFWST.cjs.map +1 -0
- package/dist/{chunk-VW7YQWDW.cjs → chunk-BFIOQFGF.cjs} +28 -2
- package/dist/chunk-BFIOQFGF.cjs.map +1 -0
- package/dist/{chunk-E3VFKTIA.js → chunk-BXLLXTT4.js} +2245 -179
- package/dist/chunk-BXLLXTT4.js.map +1 -0
- package/dist/{chunk-HMCXNOF6.cjs → chunk-CGPH7CMG.cjs} +2431 -1417
- package/dist/chunk-CGPH7CMG.cjs.map +1 -0
- package/dist/{chunk-GVLPTDJA.cjs → chunk-D5JZT6EK.cjs} +236 -63
- package/dist/chunk-D5JZT6EK.cjs.map +1 -0
- package/dist/{chunk-5SOS47PH.cjs → chunk-FLHFB23E.cjs} +454 -222
- package/dist/chunk-FLHFB23E.cjs.map +1 -0
- package/dist/{chunk-XCPEEIHI.cjs → chunk-GCTAD6B7.cjs} +3012 -927
- package/dist/chunk-GCTAD6B7.cjs.map +1 -0
- package/dist/{chunk-W3AQUG66.js → chunk-GIY5BINT.js} +4 -4
- package/dist/{chunk-W3AQUG66.js.map → chunk-GIY5BINT.js.map} +1 -1
- package/dist/{chunk-M6VFJX5A.js → chunk-GMSAGYTB.js} +3 -3
- package/dist/{chunk-M6VFJX5A.js.map → chunk-GMSAGYTB.js.map} +1 -1
- package/dist/{chunk-JRJJ5VQE.cjs → chunk-GZD6443M.cjs} +99 -55
- package/dist/chunk-GZD6443M.cjs.map +1 -0
- package/dist/{chunk-Z6NRYYOH.js → chunk-ILQXPZCD.js} +9 -4
- package/dist/chunk-ILQXPZCD.js.map +1 -0
- package/dist/{chunk-5YVR7B4R.js → chunk-JQNREL64.js} +29 -9
- package/dist/chunk-JQNREL64.js.map +1 -0
- package/dist/{chunk-QOFI2WBM.cjs → chunk-JU6K7UDX.cjs} +991 -229
- package/dist/chunk-JU6K7UDX.cjs.map +1 -0
- package/dist/{chunk-HN2MSTR6.cjs → chunk-KAJNBNWP.cjs} +283 -38
- package/dist/chunk-KAJNBNWP.cjs.map +1 -0
- package/dist/{chunk-MSWXEOZC.js → chunk-KL2JPSRX.js} +5 -5
- package/dist/chunk-KL2JPSRX.js.map +1 -0
- package/dist/{chunk-MQB7XFXP.js → chunk-LHRHOPUC.js} +3 -3
- package/dist/{chunk-MQB7XFXP.js.map → chunk-LHRHOPUC.js.map} +1 -1
- package/dist/{chunk-VX7UA3SO.js → chunk-MOOJ3H3C.js} +974 -217
- package/dist/chunk-MOOJ3H3C.js.map +1 -0
- package/dist/{chunk-HU2ONA2W.cjs → chunk-ON2KVIUJ.cjs} +17 -17
- package/dist/{chunk-HU2ONA2W.cjs.map → chunk-ON2KVIUJ.cjs.map} +1 -1
- package/dist/{chunk-I66TMZJ3.cjs → chunk-OOCEAC6U.cjs} +21 -18
- package/dist/chunk-OOCEAC6U.cjs.map +1 -0
- package/dist/{chunk-MNWW2R3U.js → chunk-OV7OOUUR.js} +90 -54
- package/dist/chunk-OV7OOUUR.js.map +1 -0
- package/dist/{chunk-C4WWWQHT.cjs → chunk-RO47SMI7.cjs} +23 -3
- package/dist/chunk-RO47SMI7.cjs.map +1 -0
- package/dist/{chunk-6FG6FU5Y.cjs → chunk-RQ56ZSIR.cjs} +4 -4
- package/dist/{chunk-6FG6FU5Y.cjs.map → chunk-RQ56ZSIR.cjs.map} +1 -1
- package/dist/{chunk-IW3BNL7A.js → chunk-RS6CZXGA.js} +50 -3
- package/dist/chunk-RS6CZXGA.js.map +1 -0
- package/dist/{chunk-AIJLACR2.js → chunk-S53FKKVL.js} +27 -3
- package/dist/chunk-S53FKKVL.js.map +1 -0
- package/dist/{chunk-G6E3QNJC.js → chunk-SBPPGJL6.js} +4078 -4333
- package/dist/chunk-SBPPGJL6.js.map +1 -0
- package/dist/{chunk-UZL4H5P2.cjs → chunk-SH4PCZ3X.cjs} +5375 -5648
- package/dist/chunk-SH4PCZ3X.cjs.map +1 -0
- package/dist/{chunk-ZWM2CAIM.js → chunk-STKNQDVA.js} +4 -4
- package/dist/{chunk-ZWM2CAIM.js.map → chunk-STKNQDVA.js.map} +1 -1
- package/dist/{chunk-A5QFWX67.cjs → chunk-U2CABSMC.cjs} +79 -59
- package/dist/chunk-U2CABSMC.cjs.map +1 -0
- package/dist/{chunk-7MDVYPWX.cjs → chunk-UE2G2LRP.cjs} +9 -4
- package/dist/chunk-UE2G2LRP.cjs.map +1 -0
- package/dist/{chunk-AUF6U2BL.js → chunk-VM25PDSW.js} +5 -5
- package/dist/{chunk-AUF6U2BL.js.map → chunk-VM25PDSW.js.map} +1 -1
- package/dist/{chunk-RXD5EGQF.js → chunk-VVD56FI4.js} +228 -55
- package/dist/chunk-VVD56FI4.js.map +1 -0
- package/dist/{chunk-JIT2OY3X.js → chunk-WCAFTXGK.js} +23 -3
- package/dist/chunk-WCAFTXGK.js.map +1 -0
- package/dist/{chunk-P62OJXQ4.js → chunk-WL3AW3YA.js} +282 -37
- package/dist/chunk-WL3AW3YA.js.map +1 -0
- package/dist/{chunk-YLODOPYM.cjs → chunk-XDD5V446.cjs} +4163 -5352
- package/dist/chunk-XDD5V446.cjs.map +1 -0
- package/dist/{chunk-B4M33FCS.cjs → chunk-XQVYEOI7.cjs} +7 -7
- package/dist/{chunk-B4M33FCS.cjs.map → chunk-XQVYEOI7.cjs.map} +1 -1
- package/dist/{chunk-BP2TSCBW.js → chunk-ZATLLPIH.js} +4391 -5561
- package/dist/chunk-ZATLLPIH.js.map +1 -0
- package/dist/{chunk-T6PRRKMW.js → chunk-ZHFM7HCQ.js} +9 -6
- package/dist/chunk-ZHFM7HCQ.js.map +1 -0
- package/dist/{chunk-WFUNLRQX.js → chunk-ZRUTE56J.js} +366 -134
- package/dist/chunk-ZRUTE56J.js.map +1 -0
- package/dist/deployer/index.cjs +2 -2
- package/dist/deployer/index.js +1 -1
- package/dist/docs/SKILL.md +2 -9
- package/dist/docs/assets/SOURCE_MAP.json +399 -342
- package/dist/docs/references/docs-agents-agent-memory.md +45 -1
- package/dist/docs/references/docs-agents-network-approval.md +1 -1
- package/dist/docs/references/docs-agents-networks.md +3 -3
- package/dist/docs/references/docs-agents-overview.md +8 -0
- package/dist/docs/references/docs-agents-using-tools.md +82 -72
- package/dist/docs/references/docs-memory-observational-memory.md +11 -8
- package/dist/docs/references/docs-observability-overview.md +1 -1
- package/dist/docs/references/docs-observability-tracing-exporters-langsmith.md +70 -0
- package/dist/docs/references/docs-observability-tracing-overview.md +1 -1
- package/dist/docs/references/docs-server-middleware.md +0 -2
- package/dist/docs/references/docs-server-request-context.md +17 -0
- package/dist/docs/references/docs-workflows-agents-and-tools.md +2 -2
- package/dist/docs/references/docs-workflows-overview.md +1 -1
- package/dist/docs/references/docs-workspace-filesystem.md +2 -0
- package/dist/docs/references/docs-workspace-overview.md +3 -1
- package/dist/docs/references/docs-workspace-sandbox.md +2 -0
- package/dist/docs/references/docs-workspace-search.md +2 -0
- package/dist/docs/references/docs-workspace-skills.md +3 -1
- package/dist/docs/references/reference-agents-getTools.md +1 -6
- package/dist/docs/references/reference-agents-listAgents.md +1 -1
- package/dist/docs/references/reference-agents-network.md +0 -2
- package/dist/docs/references/reference-cli-mastra.md +29 -4
- package/dist/docs/references/reference-client-js-agents.md +1 -1
- package/dist/docs/references/reference-configuration.md +1 -1
- package/dist/docs/references/reference-core-getStoredAgentById.md +2 -2
- package/dist/docs/references/reference-core-listStoredAgents.md +1 -1
- package/dist/docs/references/reference-memory-observational-memory.md +2 -0
- package/dist/docs/references/reference-tools-mcp-client.md +0 -2
- package/dist/docs/references/reference-workflows-step.md +2 -0
- package/dist/docs/references/reference-workflows-workflow-methods-map.md +2 -2
- package/dist/docs/references/reference-workspace-filesystem.md +2 -0
- package/dist/docs/references/reference-workspace-local-filesystem.md +2 -0
- package/dist/docs/references/reference-workspace-local-sandbox.md +2 -0
- package/dist/docs/references/reference-workspace-sandbox.md +2 -0
- package/dist/docs/references/reference-workspace-workspace-class.md +2 -0
- package/dist/docs/references/reference.md +7 -2
- package/dist/editor/index.d.ts +1 -1
- package/dist/editor/index.d.ts.map +1 -1
- package/dist/editor/types.d.ts +53 -48
- package/dist/editor/types.d.ts.map +1 -1
- package/dist/evals/base.d.ts +15 -0
- package/dist/evals/base.d.ts.map +1 -1
- package/dist/evals/index.cjs +20 -20
- package/dist/evals/index.js +3 -3
- package/dist/evals/run/index.d.ts +3 -3
- package/dist/evals/run/index.d.ts.map +1 -1
- 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 +4 -4
- package/dist/index.d.ts +3 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -2
- package/dist/integration/index.cjs +2 -2
- package/dist/integration/index.js +1 -1
- package/dist/llm/index.cjs +16 -16
- package/dist/llm/index.js +5 -5
- package/dist/llm/model/gateways/constants.d.ts.map +1 -1
- package/dist/llm/model/gateways/models-dev.d.ts.map +1 -1
- package/dist/llm/model/model.loop.d.ts +1 -1
- package/dist/llm/model/model.loop.d.ts.map +1 -1
- package/dist/llm/model/provider-types.generated.d.ts +128 -10
- package/dist/llm/model/resolve-model.d.ts.map +1 -1
- package/dist/loop/index.cjs +12 -12
- package/dist/loop/index.js +1 -1
- package/dist/loop/network/index.d.ts +3 -3
- package/dist/loop/network/index.d.ts.map +1 -1
- package/dist/loop/network/run-command-tool.d.ts +1 -1
- package/dist/loop/types.d.ts +13 -0
- package/dist/loop/types.d.ts.map +1 -1
- package/dist/loop/workflows/agentic-execution/index.d.ts +9 -9
- package/dist/loop/workflows/agentic-execution/llm-execution-step.d.ts +7 -7
- 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 +3 -3
- package/dist/loop/workflows/agentic-execution/tool-call-step.d.ts.map +1 -1
- package/dist/loop/workflows/agentic-loop/index.d.ts +9 -9
- package/dist/loop/workflows/schema.d.ts +12 -12
- package/dist/mastra/index.cjs +2 -2
- package/dist/mastra/index.d.ts +91 -5
- package/dist/mastra/index.d.ts.map +1 -1
- package/dist/mastra/index.js +1 -1
- package/dist/mcp/index.cjs +2 -2
- package/dist/mcp/index.js +1 -1
- package/dist/memory/index.cjs +14 -14
- package/dist/memory/index.js +1 -1
- package/dist/memory/mock.d.ts.map +1 -1
- package/dist/memory/types.d.ts +128 -0
- package/dist/memory/types.d.ts.map +1 -1
- package/dist/models-dev-FQVUTQ7L.js +3 -0
- package/dist/{models-dev-Z45JSLWD.js.map → models-dev-FQVUTQ7L.js.map} +1 -1
- package/dist/models-dev-PPIXUUCU.cjs +12 -0
- package/dist/{models-dev-OQKVMEIT.cjs.map → models-dev-PPIXUUCU.cjs.map} +1 -1
- package/dist/netlify-4RIKF7Y3.js +3 -0
- package/dist/{netlify-SSWMYSAX.js.map → netlify-4RIKF7Y3.js.map} +1 -1
- package/dist/netlify-V5F7JEJH.cjs +12 -0
- package/dist/{netlify-TXZZCT6N.cjs.map → netlify-V5F7JEJH.cjs.map} +1 -1
- package/dist/processors/index.cjs +41 -41
- package/dist/processors/index.js +1 -1
- package/dist/processors/step-schema.d.ts +44 -44
- package/dist/provider-registry-C6XCYX44.cjs +40 -0
- package/dist/{provider-registry-NR7FXV2Q.cjs.map → provider-registry-C6XCYX44.cjs.map} +1 -1
- package/dist/provider-registry-NWU4YFQW.js +3 -0
- package/dist/{provider-registry-RPOTQNHI.js.map → provider-registry-NWU4YFQW.js.map} +1 -1
- package/dist/provider-registry.json +278 -33
- package/dist/relevance/index.cjs +3 -3
- package/dist/relevance/index.js +1 -1
- package/dist/server/index.cjs +3 -3
- package/dist/server/index.js +1 -1
- package/dist/storage/base.d.ts +3 -1
- package/dist/storage/base.d.ts.map +1 -1
- package/dist/storage/constants.cjs +51 -19
- package/dist/storage/constants.d.ts +10 -2
- package/dist/storage/constants.d.ts.map +1 -1
- package/dist/storage/constants.js +1 -1
- package/dist/storage/domains/agents/base.d.ts +13 -164
- package/dist/storage/domains/agents/base.d.ts.map +1 -1
- package/dist/storage/domains/agents/index.d.ts +0 -1
- package/dist/storage/domains/agents/index.d.ts.map +1 -1
- package/dist/storage/domains/agents/inmemory.d.ts +6 -10
- package/dist/storage/domains/agents/inmemory.d.ts.map +1 -1
- 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 +7 -1
- package/dist/storage/domains/inmemory-db.d.ts.map +1 -1
- package/dist/storage/domains/memory/base.d.ts +45 -5
- package/dist/storage/domains/memory/base.d.ts.map +1 -1
- package/dist/storage/domains/memory/inmemory.d.ts +7 -7
- package/dist/storage/domains/memory/inmemory.d.ts.map +1 -1
- package/dist/storage/domains/observability/types.d.ts +62 -62
- package/dist/storage/domains/operations/inmemory.d.ts.map +1 -1
- package/dist/storage/domains/prompt-blocks/base.d.ts +47 -0
- package/dist/storage/domains/prompt-blocks/base.d.ts.map +1 -0
- package/dist/storage/domains/prompt-blocks/index.d.ts +3 -0
- package/dist/storage/domains/prompt-blocks/index.d.ts.map +1 -0
- package/dist/storage/domains/prompt-blocks/inmemory.d.ts +31 -0
- package/dist/storage/domains/prompt-blocks/inmemory.d.ts.map +1 -0
- package/dist/storage/domains/scorer-definitions/base.d.ts +47 -0
- package/dist/storage/domains/scorer-definitions/base.d.ts.map +1 -0
- package/dist/storage/domains/scorer-definitions/index.d.ts +3 -0
- package/dist/storage/domains/scorer-definitions/index.d.ts.map +1 -0
- package/dist/storage/domains/scorer-definitions/inmemory.d.ts +31 -0
- package/dist/storage/domains/scorer-definitions/inmemory.d.ts.map +1 -0
- package/dist/storage/domains/versioned.d.ts +136 -0
- package/dist/storage/domains/versioned.d.ts.map +1 -0
- package/dist/storage/index.cjs +156 -104
- package/dist/storage/index.js +2 -2
- package/dist/storage/mock.d.ts.map +1 -1
- package/dist/storage/types.d.ts +481 -27
- package/dist/storage/types.d.ts.map +1 -1
- package/dist/stream/MastraAgentNetworkStream.d.ts +1 -1
- package/dist/stream/MastraWorkflowStream.d.ts +1 -1
- package/dist/stream/RunOutput.d.ts +1 -1
- package/dist/stream/RunOutput.d.ts.map +1 -1
- package/dist/stream/base/output.d.ts +4 -0
- 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/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/tools/index.cjs +4 -4
- package/dist/tools/index.js +1 -1
- package/dist/tools/is-vercel-tool.cjs +2 -2
- package/dist/tools/is-vercel-tool.js +1 -1
- package/dist/tools/tool-builder/builder.d.ts.map +1 -1
- package/dist/tools/types.d.ts +15 -0
- package/dist/tools/types.d.ts.map +1 -1
- package/dist/tools/validation.d.ts.map +1 -1
- package/dist/tts/index.cjs +2 -2
- package/dist/tts/index.js +1 -1
- package/dist/types/zod-compat.d.ts +2 -2
- package/dist/types/zod-compat.d.ts.map +1 -1
- package/dist/utils/zod-utils.d.ts +19 -0
- package/dist/utils/zod-utils.d.ts.map +1 -1
- package/dist/utils.cjs +28 -28
- package/dist/utils.d.ts +7 -1
- package/dist/utils.d.ts.map +1 -1
- package/dist/utils.js +2 -2
- package/dist/vector/index.cjs +9 -9
- package/dist/vector/index.js +2 -2
- package/dist/voice/index.cjs +6 -6
- package/dist/voice/index.js +1 -1
- package/dist/workflows/evented/index.cjs +10 -10
- package/dist/workflows/evented/index.js +1 -1
- package/dist/workflows/evented/step-executor.d.ts.map +1 -1
- package/dist/workflows/evented/workflow.d.ts +3 -1
- package/dist/workflows/evented/workflow.d.ts.map +1 -1
- package/dist/workflows/execution-engine.d.ts.map +1 -1
- package/dist/workflows/index.cjs +25 -25
- package/dist/workflows/index.js +1 -1
- package/dist/workflows/step.d.ts +4 -3
- package/dist/workflows/step.d.ts.map +1 -1
- package/dist/workflows/types.d.ts +2 -1
- package/dist/workflows/types.d.ts.map +1 -1
- package/dist/workflows/workflow.d.ts +12 -4
- package/dist/workflows/workflow.d.ts.map +1 -1
- package/dist/workspace/errors.d.ts +6 -0
- package/dist/workspace/errors.d.ts.map +1 -1
- package/dist/workspace/filesystem/composite-filesystem.d.ts +93 -0
- package/dist/workspace/filesystem/composite-filesystem.d.ts.map +1 -0
- package/dist/workspace/filesystem/filesystem.d.ts +35 -0
- package/dist/workspace/filesystem/filesystem.d.ts.map +1 -1
- package/dist/workspace/filesystem/index.d.ts +2 -0
- package/dist/workspace/filesystem/index.d.ts.map +1 -1
- package/dist/workspace/filesystem/local-filesystem.d.ts +9 -1
- package/dist/workspace/filesystem/local-filesystem.d.ts.map +1 -1
- package/dist/workspace/filesystem/mastra-filesystem.d.ts +92 -3
- package/dist/workspace/filesystem/mastra-filesystem.d.ts.map +1 -1
- package/dist/workspace/filesystem/mount.d.ts +34 -0
- package/dist/workspace/filesystem/mount.d.ts.map +1 -0
- package/dist/workspace/index.cjs +62 -34
- package/dist/workspace/index.d.ts +6 -2
- package/dist/workspace/index.d.ts.map +1 -1
- package/dist/workspace/index.js +1 -1
- package/dist/workspace/lifecycle.d.ts +29 -0
- package/dist/workspace/lifecycle.d.ts.map +1 -1
- package/dist/workspace/sandbox/errors.d.ts +50 -0
- package/dist/workspace/sandbox/errors.d.ts.map +1 -0
- package/dist/workspace/sandbox/index.d.ts +3 -0
- package/dist/workspace/sandbox/index.d.ts.map +1 -1
- package/dist/workspace/sandbox/local-sandbox.d.ts +17 -2
- package/dist/workspace/sandbox/local-sandbox.d.ts.map +1 -1
- package/dist/workspace/sandbox/mastra-sandbox.d.ts +153 -6
- package/dist/workspace/sandbox/mastra-sandbox.d.ts.map +1 -1
- package/dist/workspace/sandbox/mount-manager.d.ts +195 -0
- package/dist/workspace/sandbox/mount-manager.d.ts.map +1 -0
- package/dist/workspace/sandbox/sandbox.d.ts +37 -84
- package/dist/workspace/sandbox/sandbox.d.ts.map +1 -1
- package/dist/workspace/sandbox/types.d.ts +92 -0
- package/dist/workspace/sandbox/types.d.ts.map +1 -0
- package/dist/workspace/tools/tools.d.ts.map +1 -1
- package/dist/workspace/tools/tree-formatter.d.ts.map +1 -1
- package/dist/workspace/workspace.d.ts +73 -3
- package/dist/workspace/workspace.d.ts.map +1 -1
- package/package.json +16 -16
- package/src/llm/model/provider-types.generated.d.ts +128 -10
- package/dist/chunk-2DMSFLJY.cjs.map +0 -1
- package/dist/chunk-5SOS47PH.cjs.map +0 -1
- package/dist/chunk-5YVR7B4R.js.map +0 -1
- package/dist/chunk-7MDVYPWX.cjs.map +0 -1
- package/dist/chunk-A5QFWX67.cjs.map +0 -1
- package/dist/chunk-AIJLACR2.js.map +0 -1
- package/dist/chunk-BP2TSCBW.js.map +0 -1
- package/dist/chunk-C4WWWQHT.cjs.map +0 -1
- package/dist/chunk-E3VFKTIA.js.map +0 -1
- package/dist/chunk-ENCTSDWC.js.map +0 -1
- package/dist/chunk-G6E3QNJC.js.map +0 -1
- package/dist/chunk-GVLPTDJA.cjs.map +0 -1
- package/dist/chunk-HMCXNOF6.cjs.map +0 -1
- package/dist/chunk-HN2MSTR6.cjs.map +0 -1
- package/dist/chunk-I66TMZJ3.cjs.map +0 -1
- package/dist/chunk-IIZF4W7B.cjs.map +0 -1
- package/dist/chunk-IW3BNL7A.js.map +0 -1
- package/dist/chunk-JIT2OY3X.js.map +0 -1
- package/dist/chunk-JRJJ5VQE.cjs.map +0 -1
- package/dist/chunk-MNWW2R3U.js.map +0 -1
- package/dist/chunk-MSWXEOZC.js.map +0 -1
- package/dist/chunk-P62OJXQ4.js.map +0 -1
- package/dist/chunk-QOFI2WBM.cjs.map +0 -1
- package/dist/chunk-RXD5EGQF.js.map +0 -1
- package/dist/chunk-T6PRRKMW.js.map +0 -1
- package/dist/chunk-UZL4H5P2.cjs.map +0 -1
- package/dist/chunk-VW7YQWDW.cjs.map +0 -1
- package/dist/chunk-VX7UA3SO.js.map +0 -1
- package/dist/chunk-WFUNLRQX.js.map +0 -1
- package/dist/chunk-XCPEEIHI.cjs.map +0 -1
- package/dist/chunk-YLODOPYM.cjs.map +0 -1
- package/dist/chunk-Z6NRYYOH.js.map +0 -1
- package/dist/docs/references/docs-tools-mcp-advanced-usage.md +0 -143
- package/dist/docs/references/docs-tools-mcp-mcp-overview.md +0 -383
- package/dist/docs/references/docs-tools-mcp-overview.md +0 -78
- package/dist/docs/references/docs-workflows-input-data-mapping.md +0 -102
- package/dist/docs/references/reference-deployer-netlify.md +0 -14
- package/dist/docs/references/reference-deployer-vercel.md +0 -39
- package/dist/docs/references/reference-tools-client.md +0 -228
- package/dist/models-dev-OQKVMEIT.cjs +0 -12
- package/dist/models-dev-Z45JSLWD.js +0 -3
- package/dist/netlify-SSWMYSAX.js +0 -3
- package/dist/netlify-TXZZCT6N.cjs +0 -12
- package/dist/provider-registry-NR7FXV2Q.cjs +0 -40
- package/dist/provider-registry-RPOTQNHI.js +0 -3
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import { MessageList } from './chunk-
|
|
2
|
-
import { TABLE_SCHEMAS, TABLE_SCORERS, listTracesArgsSchema, toTraceSpans, TABLE_WORKFLOW_SNAPSHOT } from './chunk-
|
|
3
|
-
import { deepEqual } from './chunk-
|
|
1
|
+
import { MessageList } from './chunk-ILQXPZCD.js';
|
|
2
|
+
import { TABLE_SCHEMAS, TABLE_SCORERS, listTracesArgsSchema, toTraceSpans, TABLE_WORKFLOW_SNAPSHOT } from './chunk-OV7OOUUR.js';
|
|
3
|
+
import { deepEqual } from './chunk-ZHFM7HCQ.js';
|
|
4
4
|
import { MastraError } from './chunk-FJEVLHJT.js';
|
|
5
|
-
import { MastraBase } from './chunk-
|
|
5
|
+
import { MastraBase } from './chunk-WCAFTXGK.js';
|
|
6
6
|
|
|
7
7
|
// src/storage/base.ts
|
|
8
8
|
function normalizePerPage(perPageInput, defaultValue) {
|
|
@@ -58,7 +58,9 @@ var MastraCompositeStore = class extends MastraBase {
|
|
|
58
58
|
workflows: domainOverrides.workflows ?? defaultStores?.workflows,
|
|
59
59
|
scores: domainOverrides.scores ?? defaultStores?.scores,
|
|
60
60
|
observability: domainOverrides.observability ?? defaultStores?.observability,
|
|
61
|
-
agents: domainOverrides.agents ?? defaultStores?.agents
|
|
61
|
+
agents: domainOverrides.agents ?? defaultStores?.agents,
|
|
62
|
+
promptBlocks: domainOverrides.promptBlocks ?? defaultStores?.promptBlocks,
|
|
63
|
+
scorerDefinitions: domainOverrides.scorerDefinitions ?? defaultStores?.scorerDefinitions
|
|
62
64
|
};
|
|
63
65
|
}
|
|
64
66
|
}
|
|
@@ -103,6 +105,12 @@ var MastraCompositeStore = class extends MastraBase {
|
|
|
103
105
|
if (this.stores?.agents) {
|
|
104
106
|
initTasks.push(this.stores.agents.init());
|
|
105
107
|
}
|
|
108
|
+
if (this.stores?.promptBlocks) {
|
|
109
|
+
initTasks.push(this.stores.promptBlocks.init());
|
|
110
|
+
}
|
|
111
|
+
if (this.stores?.scorerDefinitions) {
|
|
112
|
+
initTasks.push(this.stores.scorerDefinitions.init());
|
|
113
|
+
}
|
|
106
114
|
this.hasInitialized = Promise.all(initTasks).then(() => true);
|
|
107
115
|
await this.hasInitialized;
|
|
108
116
|
}
|
|
@@ -121,12 +129,12 @@ var StorageDomain = class extends MastraBase {
|
|
|
121
129
|
}
|
|
122
130
|
};
|
|
123
131
|
|
|
124
|
-
// src/storage/domains/
|
|
125
|
-
var
|
|
132
|
+
// src/storage/domains/versioned.ts
|
|
133
|
+
var ENTITY_ORDER_BY_SET = {
|
|
126
134
|
createdAt: true,
|
|
127
135
|
updatedAt: true
|
|
128
136
|
};
|
|
129
|
-
var
|
|
137
|
+
var SORT_DIRECTION_SET = {
|
|
130
138
|
ASC: true,
|
|
131
139
|
DESC: true
|
|
132
140
|
};
|
|
@@ -134,119 +142,106 @@ var VERSION_ORDER_BY_SET = {
|
|
|
134
142
|
versionNumber: true,
|
|
135
143
|
createdAt: true
|
|
136
144
|
};
|
|
137
|
-
var
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
145
|
+
var VersionedStorageDomain = class extends StorageDomain {
|
|
146
|
+
// ==========================================================================
|
|
147
|
+
// Concrete resolution methods
|
|
148
|
+
// ==========================================================================
|
|
149
|
+
/**
|
|
150
|
+
* Strips version metadata fields from a version row, leaving only snapshot config fields.
|
|
151
|
+
*/
|
|
152
|
+
extractSnapshotConfig(version) {
|
|
153
|
+
const result = {};
|
|
154
|
+
const metadataSet = new Set(this.versionMetadataFields);
|
|
155
|
+
for (const [key, value] of Object.entries(version)) {
|
|
156
|
+
if (!metadataSet.has(key)) {
|
|
157
|
+
result[key] = value;
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
return result;
|
|
143
161
|
}
|
|
144
162
|
/**
|
|
145
|
-
*
|
|
146
|
-
* This is the preferred method for fetching stored agents as it ensures the returned
|
|
147
|
-
* configuration matches the active version.
|
|
148
|
-
*
|
|
149
|
-
* @param id - The unique identifier of the agent
|
|
150
|
-
* @returns The resolved agent (metadata + version config), or null if not found
|
|
163
|
+
* Resolves an entity by merging its thin record with the active (or latest) version config.
|
|
151
164
|
*/
|
|
152
|
-
async
|
|
153
|
-
const
|
|
154
|
-
if (!
|
|
165
|
+
async getByIdResolved(id) {
|
|
166
|
+
const entity = await this.getById(id);
|
|
167
|
+
if (!entity) {
|
|
155
168
|
return null;
|
|
156
169
|
}
|
|
170
|
+
return this.resolveEntity(entity);
|
|
171
|
+
}
|
|
172
|
+
/**
|
|
173
|
+
* Lists entities with version resolution.
|
|
174
|
+
*/
|
|
175
|
+
async listResolved(args) {
|
|
176
|
+
const result = await this.list(args);
|
|
177
|
+
const entities = result[this.listKey];
|
|
178
|
+
const resolved = await Promise.all(entities.map((entity) => this.resolveEntity(entity)));
|
|
179
|
+
return {
|
|
180
|
+
...result,
|
|
181
|
+
[this.listKey]: resolved
|
|
182
|
+
};
|
|
183
|
+
}
|
|
184
|
+
/**
|
|
185
|
+
* Resolves a single entity by merging it with its active or latest version.
|
|
186
|
+
*/
|
|
187
|
+
async resolveEntity(entity) {
|
|
157
188
|
let version = null;
|
|
158
|
-
if (
|
|
159
|
-
version = await this.getVersion(
|
|
189
|
+
if (entity.activeVersionId) {
|
|
190
|
+
version = await this.getVersion(entity.activeVersionId);
|
|
160
191
|
if (!version) {
|
|
161
|
-
|
|
162
|
-
`
|
|
192
|
+
this.logger?.warn?.(
|
|
193
|
+
`Entity ${entity.id} has activeVersionId ${entity.activeVersionId} but version not found. Falling back to latest version.`
|
|
163
194
|
);
|
|
164
195
|
}
|
|
165
196
|
}
|
|
166
197
|
if (!version) {
|
|
167
|
-
version = await this.getLatestVersion(
|
|
198
|
+
version = await this.getLatestVersion(entity.id);
|
|
168
199
|
}
|
|
169
200
|
if (version) {
|
|
170
|
-
const
|
|
171
|
-
id: _versionId,
|
|
172
|
-
agentId: _agentId,
|
|
173
|
-
versionNumber: _versionNumber,
|
|
174
|
-
changedFields: _changedFields,
|
|
175
|
-
changeMessage: _changeMessage,
|
|
176
|
-
createdAt: _createdAt,
|
|
177
|
-
...snapshotConfig
|
|
178
|
-
} = version;
|
|
201
|
+
const snapshotConfig = this.extractSnapshotConfig(version);
|
|
179
202
|
return {
|
|
180
|
-
...
|
|
203
|
+
...entity,
|
|
181
204
|
...snapshotConfig
|
|
182
205
|
};
|
|
183
206
|
}
|
|
184
|
-
return
|
|
185
|
-
}
|
|
186
|
-
/**
|
|
187
|
-
* Lists all agents with version resolution.
|
|
188
|
-
* For each agent that has an activeVersionId, the config is resolved from the version.
|
|
189
|
-
*
|
|
190
|
-
* @param args - Pagination and ordering options
|
|
191
|
-
* @returns Paginated list of resolved agents
|
|
192
|
-
*/
|
|
193
|
-
async listAgentsResolved(args) {
|
|
194
|
-
const result = await this.listAgents(args);
|
|
195
|
-
const resolvedAgents = await Promise.all(
|
|
196
|
-
result.agents.map(async (agent) => {
|
|
197
|
-
let version = null;
|
|
198
|
-
if (agent.activeVersionId) {
|
|
199
|
-
version = await this.getVersion(agent.activeVersionId);
|
|
200
|
-
}
|
|
201
|
-
if (!version) {
|
|
202
|
-
version = await this.getLatestVersion(agent.id);
|
|
203
|
-
}
|
|
204
|
-
if (version) {
|
|
205
|
-
const {
|
|
206
|
-
id: _versionId,
|
|
207
|
-
agentId: _agentId,
|
|
208
|
-
versionNumber: _versionNumber,
|
|
209
|
-
changedFields: _changedFields,
|
|
210
|
-
changeMessage: _changeMessage,
|
|
211
|
-
createdAt: _createdAt,
|
|
212
|
-
...snapshotConfig
|
|
213
|
-
} = version;
|
|
214
|
-
return {
|
|
215
|
-
...agent,
|
|
216
|
-
...snapshotConfig
|
|
217
|
-
};
|
|
218
|
-
}
|
|
219
|
-
return agent;
|
|
220
|
-
})
|
|
221
|
-
);
|
|
222
|
-
return {
|
|
223
|
-
...result,
|
|
224
|
-
agents: resolvedAgents
|
|
225
|
-
};
|
|
207
|
+
return entity;
|
|
226
208
|
}
|
|
227
209
|
// ==========================================================================
|
|
228
210
|
// Protected Helper Methods
|
|
229
211
|
// ==========================================================================
|
|
230
|
-
/**
|
|
231
|
-
* Parses orderBy input for consistent agent sorting behavior.
|
|
232
|
-
*/
|
|
233
212
|
parseOrderBy(orderBy, defaultDirection = "DESC") {
|
|
234
213
|
return {
|
|
235
|
-
field: orderBy?.field && orderBy.field in
|
|
236
|
-
direction: orderBy?.direction && orderBy.direction in
|
|
214
|
+
field: orderBy?.field && orderBy.field in ENTITY_ORDER_BY_SET ? orderBy.field : "createdAt",
|
|
215
|
+
direction: orderBy?.direction && orderBy.direction in SORT_DIRECTION_SET ? orderBy.direction : defaultDirection
|
|
237
216
|
};
|
|
238
217
|
}
|
|
239
|
-
/**
|
|
240
|
-
* Parses orderBy input for consistent version sorting behavior.
|
|
241
|
-
*/
|
|
242
218
|
parseVersionOrderBy(orderBy, defaultDirection = "DESC") {
|
|
243
219
|
return {
|
|
244
220
|
field: orderBy?.field && orderBy.field in VERSION_ORDER_BY_SET ? orderBy.field : "versionNumber",
|
|
245
|
-
direction: orderBy?.direction && orderBy.direction in
|
|
221
|
+
direction: orderBy?.direction && orderBy.direction in SORT_DIRECTION_SET ? orderBy.direction : defaultDirection
|
|
246
222
|
};
|
|
247
223
|
}
|
|
248
224
|
};
|
|
249
225
|
|
|
226
|
+
// src/storage/domains/agents/base.ts
|
|
227
|
+
var AgentsStorage = class extends VersionedStorageDomain {
|
|
228
|
+
listKey = "agents";
|
|
229
|
+
versionMetadataFields = [
|
|
230
|
+
"id",
|
|
231
|
+
"agentId",
|
|
232
|
+
"versionNumber",
|
|
233
|
+
"changedFields",
|
|
234
|
+
"changeMessage",
|
|
235
|
+
"createdAt"
|
|
236
|
+
];
|
|
237
|
+
constructor() {
|
|
238
|
+
super({
|
|
239
|
+
component: "STORAGE",
|
|
240
|
+
name: "AGENTS"
|
|
241
|
+
});
|
|
242
|
+
}
|
|
243
|
+
};
|
|
244
|
+
|
|
250
245
|
// src/storage/domains/agents/inmemory.ts
|
|
251
246
|
var InMemoryAgentsStorage = class extends AgentsStorage {
|
|
252
247
|
db;
|
|
@@ -261,13 +256,14 @@ var InMemoryAgentsStorage = class extends AgentsStorage {
|
|
|
261
256
|
// ==========================================================================
|
|
262
257
|
// Agent CRUD Methods
|
|
263
258
|
// ==========================================================================
|
|
264
|
-
async
|
|
265
|
-
this.logger.debug(`InMemoryAgentsStorage:
|
|
259
|
+
async getById(id) {
|
|
260
|
+
this.logger.debug(`InMemoryAgentsStorage: getById called for ${id}`);
|
|
266
261
|
const agent = this.db.agents.get(id);
|
|
267
262
|
return agent ? this.deepCopyAgent(agent) : null;
|
|
268
263
|
}
|
|
269
|
-
async
|
|
270
|
-
|
|
264
|
+
async create(input) {
|
|
265
|
+
const { agent } = input;
|
|
266
|
+
this.logger.debug(`InMemoryAgentsStorage: create called for ${agent.id}`);
|
|
271
267
|
if (this.db.agents.has(agent.id)) {
|
|
272
268
|
throw new Error(`Agent with id ${agent.id} already exists`);
|
|
273
269
|
}
|
|
@@ -294,8 +290,9 @@ var InMemoryAgentsStorage = class extends AgentsStorage {
|
|
|
294
290
|
});
|
|
295
291
|
return this.deepCopyAgent(newAgent);
|
|
296
292
|
}
|
|
297
|
-
async
|
|
298
|
-
|
|
293
|
+
async update(input) {
|
|
294
|
+
const { id, ...updates } = input;
|
|
295
|
+
this.logger.debug(`InMemoryAgentsStorage: update called for ${id}`);
|
|
299
296
|
const existingAgent = this.db.agents.get(id);
|
|
300
297
|
if (!existingAgent) {
|
|
301
298
|
throw new Error(`Agent with id ${id} not found`);
|
|
@@ -343,36 +340,41 @@ var InMemoryAgentsStorage = class extends AgentsStorage {
|
|
|
343
340
|
createdAt: _createdAt,
|
|
344
341
|
...latestConfig
|
|
345
342
|
} = latestVersion;
|
|
343
|
+
const sanitizedConfigFields = Object.fromEntries(
|
|
344
|
+
Object.entries(configFields).map(([key, value]) => [key, value === null ? void 0 : value])
|
|
345
|
+
);
|
|
346
346
|
const newConfig = {
|
|
347
347
|
...latestConfig,
|
|
348
|
-
...
|
|
348
|
+
...sanitizedConfigFields
|
|
349
349
|
};
|
|
350
350
|
const changedFields = configFieldNames.filter(
|
|
351
|
-
(field) => field in configFields && configFields[field] !== latestConfig[field]
|
|
351
|
+
(field) => field in configFields && JSON.stringify(configFields[field]) !== JSON.stringify(latestConfig[field])
|
|
352
352
|
);
|
|
353
|
-
|
|
354
|
-
|
|
355
|
-
|
|
356
|
-
|
|
357
|
-
|
|
358
|
-
|
|
359
|
-
|
|
360
|
-
|
|
361
|
-
|
|
362
|
-
|
|
353
|
+
if (changedFields.length > 0) {
|
|
354
|
+
const newVersionId = crypto.randomUUID();
|
|
355
|
+
const newVersionNumber = latestVersion.versionNumber + 1;
|
|
356
|
+
await this.createVersion({
|
|
357
|
+
id: newVersionId,
|
|
358
|
+
agentId: id,
|
|
359
|
+
versionNumber: newVersionNumber,
|
|
360
|
+
...newConfig,
|
|
361
|
+
changedFields,
|
|
362
|
+
changeMessage: `Updated ${changedFields.join(", ")}`
|
|
363
|
+
});
|
|
364
|
+
}
|
|
363
365
|
}
|
|
364
366
|
this.db.agents.set(id, updatedAgent);
|
|
365
367
|
return this.deepCopyAgent(updatedAgent);
|
|
366
368
|
}
|
|
367
|
-
async
|
|
368
|
-
this.logger.debug(`InMemoryAgentsStorage:
|
|
369
|
+
async delete(id) {
|
|
370
|
+
this.logger.debug(`InMemoryAgentsStorage: delete called for ${id}`);
|
|
369
371
|
this.db.agents.delete(id);
|
|
370
|
-
await this.
|
|
372
|
+
await this.deleteVersionsByParentId(id);
|
|
371
373
|
}
|
|
372
|
-
async
|
|
374
|
+
async list(args) {
|
|
373
375
|
const { page = 0, perPage: perPageInput, orderBy, authorId, metadata } = args || {};
|
|
374
376
|
const { field, direction } = this.parseOrderBy(orderBy);
|
|
375
|
-
this.logger.debug(`InMemoryAgentsStorage:
|
|
377
|
+
this.logger.debug(`InMemoryAgentsStorage: list called`);
|
|
376
378
|
const perPage = normalizePerPage(perPageInput, 100);
|
|
377
379
|
if (page < 0) {
|
|
378
380
|
throw new Error("page must be >= 0");
|
|
@@ -478,11 +480,11 @@ var InMemoryAgentsStorage = class extends AgentsStorage {
|
|
|
478
480
|
this.logger.debug(`InMemoryAgentsStorage: deleteVersion called for ${id}`);
|
|
479
481
|
this.db.agentVersions.delete(id);
|
|
480
482
|
}
|
|
481
|
-
async
|
|
482
|
-
this.logger.debug(`InMemoryAgentsStorage:
|
|
483
|
+
async deleteVersionsByParentId(entityId) {
|
|
484
|
+
this.logger.debug(`InMemoryAgentsStorage: deleteVersionsByParentId called for agent ${entityId}`);
|
|
483
485
|
const idsToDelete = [];
|
|
484
486
|
for (const [id, version] of this.db.agentVersions.entries()) {
|
|
485
|
-
if (version.agentId ===
|
|
487
|
+
if (version.agentId === entityId) {
|
|
486
488
|
idsToDelete.push(id);
|
|
487
489
|
}
|
|
488
490
|
}
|
|
@@ -516,20 +518,7 @@ var InMemoryAgentsStorage = class extends AgentsStorage {
|
|
|
516
518
|
* Deep copy a version to prevent external mutation of stored data
|
|
517
519
|
*/
|
|
518
520
|
deepCopyVersion(version) {
|
|
519
|
-
return
|
|
520
|
-
...version,
|
|
521
|
-
model: { ...version.model },
|
|
522
|
-
tools: version.tools ? [...version.tools] : version.tools,
|
|
523
|
-
defaultOptions: version.defaultOptions ? { ...version.defaultOptions } : version.defaultOptions,
|
|
524
|
-
workflows: version.workflows ? [...version.workflows] : version.workflows,
|
|
525
|
-
agents: version.agents ? [...version.agents] : version.agents,
|
|
526
|
-
integrationTools: version.integrationTools ? [...version.integrationTools] : version.integrationTools,
|
|
527
|
-
inputProcessors: version.inputProcessors ? [...version.inputProcessors] : version.inputProcessors,
|
|
528
|
-
outputProcessors: version.outputProcessors ? [...version.outputProcessors] : version.outputProcessors,
|
|
529
|
-
memory: version.memory ? { ...version.memory } : version.memory,
|
|
530
|
-
scorers: version.scorers ? { ...version.scorers } : version.scorers,
|
|
531
|
-
changedFields: version.changedFields ? [...version.changedFields] : version.changedFields
|
|
532
|
-
};
|
|
521
|
+
return structuredClone(version);
|
|
533
522
|
}
|
|
534
523
|
sortAgents(agents, field, direction) {
|
|
535
524
|
return agents.sort((a, b) => {
|
|
@@ -564,6 +553,10 @@ var InMemoryDB = class {
|
|
|
564
553
|
traces = /* @__PURE__ */ new Map();
|
|
565
554
|
agents = /* @__PURE__ */ new Map();
|
|
566
555
|
agentVersions = /* @__PURE__ */ new Map();
|
|
556
|
+
promptBlocks = /* @__PURE__ */ new Map();
|
|
557
|
+
promptBlockVersions = /* @__PURE__ */ new Map();
|
|
558
|
+
scorerDefinitions = /* @__PURE__ */ new Map();
|
|
559
|
+
scorerDefinitionVersions = /* @__PURE__ */ new Map();
|
|
567
560
|
/** Observational memory records, keyed by resourceId, each holding array of records (generations) */
|
|
568
561
|
observationalMemory = /* @__PURE__ */ new Map();
|
|
569
562
|
/**
|
|
@@ -579,6 +572,10 @@ var InMemoryDB = class {
|
|
|
579
572
|
this.traces.clear();
|
|
580
573
|
this.agents.clear();
|
|
581
574
|
this.agentVersions.clear();
|
|
575
|
+
this.promptBlocks.clear();
|
|
576
|
+
this.promptBlockVersions.clear();
|
|
577
|
+
this.scorerDefinitions.clear();
|
|
578
|
+
this.scorerDefinitionVersions.clear();
|
|
582
579
|
this.observationalMemory.clear();
|
|
583
580
|
}
|
|
584
581
|
};
|
|
@@ -847,40 +844,29 @@ var MemoryStorage = class extends StorageDomain {
|
|
|
847
844
|
throw new Error(`Observational memory is not implemented by this storage adapter (${this.constructor.name}).`);
|
|
848
845
|
}
|
|
849
846
|
// ============================================
|
|
850
|
-
// Buffering Methods (
|
|
851
|
-
// These methods
|
|
852
|
-
// which has been disabled. Keeping commented for future reference.
|
|
847
|
+
// Buffering Methods (for async observation/reflection)
|
|
848
|
+
// These methods support async buffering when `bufferTokens` is configured.
|
|
853
849
|
// ============================================
|
|
854
|
-
|
|
855
|
-
|
|
856
|
-
|
|
857
|
-
|
|
858
|
-
|
|
859
|
-
|
|
860
|
-
|
|
861
|
-
|
|
862
|
-
|
|
863
|
-
|
|
864
|
-
|
|
865
|
-
|
|
866
|
-
|
|
867
|
-
|
|
868
|
-
|
|
869
|
-
|
|
870
|
-
|
|
871
|
-
|
|
872
|
-
|
|
873
|
-
|
|
874
|
-
// async markMessagesAsBuffering(_id: string, _messageIds: string[]): Promise<void> {
|
|
875
|
-
// throw new Error(`Observational memory is not implemented by this storage adapter (${this.constructor.name}).`);
|
|
876
|
-
// }
|
|
877
|
-
// /**
|
|
878
|
-
// * Mark messages as buffered (observation complete but not active).
|
|
879
|
-
// * Moves messageIds from bufferingMessageIds → bufferedMessageIds.
|
|
880
|
-
// */
|
|
881
|
-
// async markMessagesAsBuffered(_id: string, _messageIds: string[]): Promise<void> {
|
|
882
|
-
// throw new Error(`Observational memory is not implemented by this storage adapter (${this.constructor.name}).`);
|
|
883
|
-
// }
|
|
850
|
+
/**
|
|
851
|
+
* Update buffered observations.
|
|
852
|
+
* Called when observations are created asynchronously via `bufferTokens`.
|
|
853
|
+
*/
|
|
854
|
+
async updateBufferedObservations(_input) {
|
|
855
|
+
throw new Error(`Observational memory is not implemented by this storage adapter (${this.constructor.name}).`);
|
|
856
|
+
}
|
|
857
|
+
/**
|
|
858
|
+
* Swap buffered observations to active.
|
|
859
|
+
* Atomic operation that:
|
|
860
|
+
* 1. Appends bufferedObservations → activeObservations (based on activationRatio)
|
|
861
|
+
* 2. Moves activated bufferedMessageIds → observedMessageIds
|
|
862
|
+
* 3. Keeps remaining buffered content if activationRatio < 100
|
|
863
|
+
* 4. Updates lastObservedAt
|
|
864
|
+
*
|
|
865
|
+
* Returns info about what was activated for UI feedback.
|
|
866
|
+
*/
|
|
867
|
+
async swapBufferedToActive(_input) {
|
|
868
|
+
throw new Error(`Observational memory is not implemented by this storage adapter (${this.constructor.name}).`);
|
|
869
|
+
}
|
|
884
870
|
/**
|
|
885
871
|
* Create a new generation from a reflection.
|
|
886
872
|
* Creates a new record with:
|
|
@@ -891,19 +877,21 @@ var MemoryStorage = class extends StorageDomain {
|
|
|
891
877
|
async createReflectionGeneration(_input) {
|
|
892
878
|
throw new Error(`Observational memory is not implemented by this storage adapter (${this.constructor.name}).`);
|
|
893
879
|
}
|
|
894
|
-
|
|
895
|
-
|
|
896
|
-
|
|
897
|
-
|
|
898
|
-
|
|
899
|
-
|
|
900
|
-
|
|
901
|
-
|
|
902
|
-
|
|
903
|
-
|
|
904
|
-
|
|
905
|
-
|
|
906
|
-
|
|
880
|
+
/**
|
|
881
|
+
* Update buffered reflection (async reflection in progress).
|
|
882
|
+
* Called when reflection runs asynchronously via `bufferTokens`.
|
|
883
|
+
*/
|
|
884
|
+
async updateBufferedReflection(_input) {
|
|
885
|
+
throw new Error(`Observational memory is not implemented by this storage adapter (${this.constructor.name}).`);
|
|
886
|
+
}
|
|
887
|
+
/**
|
|
888
|
+
* Swap buffered reflection to active observations.
|
|
889
|
+
* Creates a new generation where activeObservations = bufferedReflection + unreflected observations.
|
|
890
|
+
* The `tokenCount` in input is the processor-computed token count for the combined content.
|
|
891
|
+
*/
|
|
892
|
+
async swapBufferedReflectionToActive(_input) {
|
|
893
|
+
throw new Error(`Observational memory is not implemented by this storage adapter (${this.constructor.name}).`);
|
|
894
|
+
}
|
|
907
895
|
/**
|
|
908
896
|
* Set the isReflecting flag.
|
|
909
897
|
*/
|
|
@@ -916,6 +904,23 @@ var MemoryStorage = class extends StorageDomain {
|
|
|
916
904
|
async setObservingFlag(_id, _isObserving) {
|
|
917
905
|
throw new Error(`Observational memory is not implemented by this storage adapter (${this.constructor.name}).`);
|
|
918
906
|
}
|
|
907
|
+
/**
|
|
908
|
+
* Set the isBufferingObservation flag and update lastBufferedAtTokens.
|
|
909
|
+
* Called when async observation buffering starts (true) or ends/fails (false).
|
|
910
|
+
* @param id - Record ID
|
|
911
|
+
* @param isBuffering - Whether buffering is in progress
|
|
912
|
+
* @param lastBufferedAtTokens - The pending token count at which this buffer was triggered (only set when isBuffering=true)
|
|
913
|
+
*/
|
|
914
|
+
async setBufferingObservationFlag(_id, _isBuffering, _lastBufferedAtTokens) {
|
|
915
|
+
throw new Error(`Observational memory is not implemented by this storage adapter (${this.constructor.name}).`);
|
|
916
|
+
}
|
|
917
|
+
/**
|
|
918
|
+
* Set the isBufferingReflection flag.
|
|
919
|
+
* Called when async reflection buffering starts (true) or ends/fails (false).
|
|
920
|
+
*/
|
|
921
|
+
async setBufferingReflectionFlag(_id, _isBuffering) {
|
|
922
|
+
throw new Error(`Observational memory is not implemented by this storage adapter (${this.constructor.name}).`);
|
|
923
|
+
}
|
|
919
924
|
/**
|
|
920
925
|
* Clear all observational memory for a thread/resource.
|
|
921
926
|
* Removes all records and history.
|
|
@@ -924,11 +929,11 @@ var MemoryStorage = class extends StorageDomain {
|
|
|
924
929
|
throw new Error(`Observational memory is not implemented by this storage adapter (${this.constructor.name}).`);
|
|
925
930
|
}
|
|
926
931
|
/**
|
|
927
|
-
*
|
|
928
|
-
* Called
|
|
929
|
-
*
|
|
932
|
+
* Set the pending message token count.
|
|
933
|
+
* Called at the end of each OM processing step to persist the current
|
|
934
|
+
* context window token count so the UI can display it on page load.
|
|
930
935
|
*/
|
|
931
|
-
async
|
|
936
|
+
async setPendingMessageTokens(_id, _tokenCount) {
|
|
932
937
|
throw new Error(`Observational memory is not implemented by this storage adapter (${this.constructor.name}).`);
|
|
933
938
|
}
|
|
934
939
|
/**
|
|
@@ -1613,6 +1618,10 @@ var InMemoryMemory = class extends MemoryStorage {
|
|
|
1613
1618
|
// State flags
|
|
1614
1619
|
isReflecting: false,
|
|
1615
1620
|
isObserving: false,
|
|
1621
|
+
isBufferingObservation: false,
|
|
1622
|
+
isBufferingReflection: false,
|
|
1623
|
+
lastBufferedAtTokens: 0,
|
|
1624
|
+
lastBufferedAtTime: null,
|
|
1616
1625
|
// Configuration
|
|
1617
1626
|
config,
|
|
1618
1627
|
// Timezone used for observation date formatting
|
|
@@ -1641,46 +1650,114 @@ var InMemoryMemory = class extends MemoryStorage {
|
|
|
1641
1650
|
}
|
|
1642
1651
|
}
|
|
1643
1652
|
async updateBufferedObservations(input) {
|
|
1644
|
-
const { id,
|
|
1653
|
+
const { id, chunk } = input;
|
|
1645
1654
|
const record = this.findObservationalMemoryRecordById(id);
|
|
1646
1655
|
if (!record) {
|
|
1647
1656
|
throw new Error(`Observational memory record not found: ${id}`);
|
|
1648
1657
|
}
|
|
1649
|
-
|
|
1658
|
+
const newChunk = {
|
|
1659
|
+
id: `ombuf-${crypto.randomUUID()}`,
|
|
1660
|
+
cycleId: chunk.cycleId,
|
|
1661
|
+
observations: chunk.observations,
|
|
1662
|
+
tokenCount: chunk.tokenCount,
|
|
1663
|
+
messageIds: chunk.messageIds,
|
|
1664
|
+
messageTokens: chunk.messageTokens,
|
|
1665
|
+
lastObservedAt: chunk.lastObservedAt,
|
|
1666
|
+
createdAt: /* @__PURE__ */ new Date(),
|
|
1667
|
+
suggestedContinuation: chunk.suggestedContinuation,
|
|
1668
|
+
currentTask: chunk.currentTask
|
|
1669
|
+
};
|
|
1670
|
+
const existingChunks = Array.isArray(record.bufferedObservationChunks) ? record.bufferedObservationChunks : [];
|
|
1671
|
+
record.bufferedObservationChunks = [...existingChunks, newChunk];
|
|
1672
|
+
if (input.lastBufferedAtTime) {
|
|
1673
|
+
record.lastBufferedAtTime = input.lastBufferedAtTime;
|
|
1674
|
+
}
|
|
1650
1675
|
record.updatedAt = /* @__PURE__ */ new Date();
|
|
1651
1676
|
}
|
|
1652
|
-
async swapBufferedToActive(
|
|
1677
|
+
async swapBufferedToActive(input) {
|
|
1678
|
+
const { id, activationRatio, lastObservedAt } = input;
|
|
1653
1679
|
const record = this.findObservationalMemoryRecordById(id);
|
|
1654
1680
|
if (!record) {
|
|
1655
1681
|
throw new Error(`Observational memory record not found: ${id}`);
|
|
1656
1682
|
}
|
|
1657
|
-
|
|
1658
|
-
|
|
1683
|
+
const chunks = Array.isArray(record.bufferedObservationChunks) ? record.bufferedObservationChunks : [];
|
|
1684
|
+
if (chunks.length === 0) {
|
|
1685
|
+
return {
|
|
1686
|
+
chunksActivated: 0,
|
|
1687
|
+
messageTokensActivated: 0,
|
|
1688
|
+
observationTokensActivated: 0,
|
|
1689
|
+
messagesActivated: 0,
|
|
1690
|
+
activatedCycleIds: [],
|
|
1691
|
+
activatedMessageIds: []
|
|
1692
|
+
};
|
|
1693
|
+
}
|
|
1694
|
+
const retentionFloor = input.messageTokensThreshold * (1 - activationRatio);
|
|
1695
|
+
const targetMessageTokens = Math.max(0, input.currentPendingTokens - retentionFloor);
|
|
1696
|
+
let cumulativeMessageTokens = 0;
|
|
1697
|
+
let bestBoundary = 0;
|
|
1698
|
+
let bestBoundaryMessageTokens = 0;
|
|
1699
|
+
for (let i = 0; i < chunks.length; i++) {
|
|
1700
|
+
cumulativeMessageTokens += chunks[i].messageTokens ?? 0;
|
|
1701
|
+
const boundary = i + 1;
|
|
1702
|
+
const isUnder = cumulativeMessageTokens <= targetMessageTokens;
|
|
1703
|
+
const bestIsUnder = bestBoundaryMessageTokens <= targetMessageTokens;
|
|
1704
|
+
if (bestBoundary === 0) {
|
|
1705
|
+
bestBoundary = boundary;
|
|
1706
|
+
bestBoundaryMessageTokens = cumulativeMessageTokens;
|
|
1707
|
+
} else if (isUnder && !bestIsUnder) {
|
|
1708
|
+
bestBoundary = boundary;
|
|
1709
|
+
bestBoundaryMessageTokens = cumulativeMessageTokens;
|
|
1710
|
+
} else if (isUnder && bestIsUnder) {
|
|
1711
|
+
if (cumulativeMessageTokens > bestBoundaryMessageTokens) {
|
|
1712
|
+
bestBoundary = boundary;
|
|
1713
|
+
bestBoundaryMessageTokens = cumulativeMessageTokens;
|
|
1714
|
+
}
|
|
1715
|
+
} else if (!isUnder && !bestIsUnder) {
|
|
1716
|
+
if (cumulativeMessageTokens < bestBoundaryMessageTokens) {
|
|
1717
|
+
bestBoundary = boundary;
|
|
1718
|
+
bestBoundaryMessageTokens = cumulativeMessageTokens;
|
|
1719
|
+
}
|
|
1720
|
+
}
|
|
1659
1721
|
}
|
|
1722
|
+
const chunksToActivate = bestBoundary === 0 ? 1 : bestBoundary;
|
|
1723
|
+
const activatedChunks = chunks.slice(0, chunksToActivate);
|
|
1724
|
+
const remainingChunks = chunks.slice(chunksToActivate);
|
|
1725
|
+
const activatedContent = activatedChunks.map((c) => c.observations).join("\n\n");
|
|
1726
|
+
const activatedTokens = activatedChunks.reduce((sum, c) => sum + c.tokenCount, 0);
|
|
1727
|
+
const activatedMessageTokens = activatedChunks.reduce((sum, c) => sum + (c.messageTokens ?? 0), 0);
|
|
1728
|
+
const activatedMessageCount = activatedChunks.reduce((sum, c) => sum + c.messageIds.length, 0);
|
|
1729
|
+
const activatedCycleIds = activatedChunks.map((c) => c.cycleId).filter((id2) => !!id2);
|
|
1730
|
+
const activatedMessageIds = activatedChunks.flatMap((c) => c.messageIds);
|
|
1731
|
+
const latestChunk = activatedChunks[activatedChunks.length - 1];
|
|
1732
|
+
const derivedLastObservedAt = lastObservedAt ?? (latestChunk?.lastObservedAt ? new Date(latestChunk.lastObservedAt) : /* @__PURE__ */ new Date());
|
|
1660
1733
|
if (record.activeObservations) {
|
|
1661
1734
|
record.activeObservations = `${record.activeObservations}
|
|
1662
1735
|
|
|
1663
|
-
${
|
|
1736
|
+
${activatedContent}`;
|
|
1664
1737
|
} else {
|
|
1665
|
-
record.activeObservations =
|
|
1666
|
-
}
|
|
1667
|
-
record.bufferedObservations = void 0;
|
|
1668
|
-
record.lastObservedAt = /* @__PURE__ */ new Date();
|
|
1669
|
-
record.updatedAt = /* @__PURE__ */ new Date();
|
|
1670
|
-
}
|
|
1671
|
-
async markMessagesAsBuffering(id, _messageIds) {
|
|
1672
|
-
const record = this.findObservationalMemoryRecordById(id);
|
|
1673
|
-
if (!record) {
|
|
1674
|
-
throw new Error(`Observational memory record not found: ${id}`);
|
|
1675
|
-
}
|
|
1676
|
-
record.updatedAt = /* @__PURE__ */ new Date();
|
|
1677
|
-
}
|
|
1678
|
-
async markMessagesAsBuffered(id, _messageIds) {
|
|
1679
|
-
const record = this.findObservationalMemoryRecordById(id);
|
|
1680
|
-
if (!record) {
|
|
1681
|
-
throw new Error(`Observational memory record not found: ${id}`);
|
|
1738
|
+
record.activeObservations = activatedContent;
|
|
1682
1739
|
}
|
|
1740
|
+
record.observationTokenCount = (record.observationTokenCount ?? 0) + activatedTokens;
|
|
1741
|
+
record.pendingMessageTokens = Math.max(0, (record.pendingMessageTokens ?? 0) - activatedMessageTokens);
|
|
1742
|
+
record.bufferedObservationChunks = remainingChunks.length > 0 ? remainingChunks : void 0;
|
|
1743
|
+
record.lastObservedAt = derivedLastObservedAt;
|
|
1683
1744
|
record.updatedAt = /* @__PURE__ */ new Date();
|
|
1745
|
+
return {
|
|
1746
|
+
chunksActivated: activatedChunks.length,
|
|
1747
|
+
messageTokensActivated: activatedMessageTokens,
|
|
1748
|
+
observationTokensActivated: activatedTokens,
|
|
1749
|
+
messagesActivated: activatedMessageCount,
|
|
1750
|
+
activatedCycleIds,
|
|
1751
|
+
activatedMessageIds,
|
|
1752
|
+
observations: activatedContent,
|
|
1753
|
+
perChunk: activatedChunks.map((c) => ({
|
|
1754
|
+
cycleId: c.cycleId ?? "",
|
|
1755
|
+
messageTokens: c.messageTokens ?? 0,
|
|
1756
|
+
observationTokens: c.tokenCount,
|
|
1757
|
+
messageCount: c.messageIds.length,
|
|
1758
|
+
observations: c.observations
|
|
1759
|
+
}))
|
|
1760
|
+
};
|
|
1684
1761
|
}
|
|
1685
1762
|
async createReflectionGeneration(input) {
|
|
1686
1763
|
const { currentRecord, reflection, tokenCount } = input;
|
|
@@ -1705,6 +1782,10 @@ ${record.bufferedObservations}`;
|
|
|
1705
1782
|
pendingMessageTokens: 0,
|
|
1706
1783
|
isReflecting: false,
|
|
1707
1784
|
isObserving: false,
|
|
1785
|
+
isBufferingObservation: false,
|
|
1786
|
+
isBufferingReflection: false,
|
|
1787
|
+
lastBufferedAtTokens: 0,
|
|
1788
|
+
lastBufferedAtTime: null,
|
|
1708
1789
|
// Timezone used for observation date formatting
|
|
1709
1790
|
observedTimezone: currentRecord.observedTimezone,
|
|
1710
1791
|
// Extensible metadata (optional)
|
|
@@ -1714,29 +1795,48 @@ ${record.bufferedObservations}`;
|
|
|
1714
1795
|
this.db.observationalMemory.set(key, [newRecord, ...existing]);
|
|
1715
1796
|
return newRecord;
|
|
1716
1797
|
}
|
|
1717
|
-
async updateBufferedReflection(
|
|
1798
|
+
async updateBufferedReflection(input) {
|
|
1799
|
+
const { id, reflection, tokenCount, inputTokenCount, reflectedObservationLineCount } = input;
|
|
1718
1800
|
const record = this.findObservationalMemoryRecordById(id);
|
|
1719
1801
|
if (!record) {
|
|
1720
1802
|
throw new Error(`Observational memory record not found: ${id}`);
|
|
1721
1803
|
}
|
|
1722
|
-
record.bufferedReflection
|
|
1804
|
+
const existing = record.bufferedReflection || "";
|
|
1805
|
+
record.bufferedReflection = existing ? `${existing}
|
|
1806
|
+
|
|
1807
|
+
${reflection}` : reflection;
|
|
1808
|
+
record.bufferedReflectionTokens = (record.bufferedReflectionTokens || 0) + tokenCount;
|
|
1809
|
+
record.bufferedReflectionInputTokens = (record.bufferedReflectionInputTokens || 0) + inputTokenCount;
|
|
1810
|
+
record.reflectedObservationLineCount = reflectedObservationLineCount;
|
|
1723
1811
|
record.updatedAt = /* @__PURE__ */ new Date();
|
|
1724
1812
|
}
|
|
1725
|
-
async
|
|
1726
|
-
const
|
|
1813
|
+
async swapBufferedReflectionToActive(input) {
|
|
1814
|
+
const { currentRecord } = input;
|
|
1815
|
+
const record = this.findObservationalMemoryRecordById(currentRecord.id);
|
|
1727
1816
|
if (!record) {
|
|
1728
|
-
throw new Error(`Observational memory record not found: ${id}`);
|
|
1817
|
+
throw new Error(`Observational memory record not found: ${currentRecord.id}`);
|
|
1729
1818
|
}
|
|
1730
1819
|
if (!record.bufferedReflection) {
|
|
1731
1820
|
throw new Error("No buffered reflection to swap");
|
|
1732
1821
|
}
|
|
1822
|
+
const bufferedReflection = record.bufferedReflection;
|
|
1823
|
+
const reflectedLineCount = record.reflectedObservationLineCount ?? 0;
|
|
1824
|
+
const currentObservations = record.activeObservations ?? "";
|
|
1825
|
+
const allLines = currentObservations.split("\n");
|
|
1826
|
+
const unreflectedLines = allLines.slice(reflectedLineCount);
|
|
1827
|
+
const unreflectedContent = unreflectedLines.join("\n").trim();
|
|
1828
|
+
const newObservations = unreflectedContent ? `${bufferedReflection}
|
|
1829
|
+
|
|
1830
|
+
${unreflectedContent}` : bufferedReflection;
|
|
1733
1831
|
const newRecord = await this.createReflectionGeneration({
|
|
1734
1832
|
currentRecord: record,
|
|
1735
|
-
reflection:
|
|
1736
|
-
tokenCount:
|
|
1737
|
-
// Will be calculated by caller
|
|
1833
|
+
reflection: newObservations,
|
|
1834
|
+
tokenCount: input.tokenCount
|
|
1738
1835
|
});
|
|
1739
1836
|
record.bufferedReflection = void 0;
|
|
1837
|
+
record.bufferedReflectionTokens = void 0;
|
|
1838
|
+
record.bufferedReflectionInputTokens = void 0;
|
|
1839
|
+
record.reflectedObservationLineCount = void 0;
|
|
1740
1840
|
return newRecord;
|
|
1741
1841
|
}
|
|
1742
1842
|
async setReflectingFlag(id, isReflecting) {
|
|
@@ -1755,16 +1855,35 @@ ${record.bufferedObservations}`;
|
|
|
1755
1855
|
record.isObserving = isObserving;
|
|
1756
1856
|
record.updatedAt = /* @__PURE__ */ new Date();
|
|
1757
1857
|
}
|
|
1858
|
+
async setBufferingObservationFlag(id, isBuffering, lastBufferedAtTokens) {
|
|
1859
|
+
const record = this.findObservationalMemoryRecordById(id);
|
|
1860
|
+
if (!record) {
|
|
1861
|
+
throw new Error(`Observational memory record not found: ${id}`);
|
|
1862
|
+
}
|
|
1863
|
+
record.isBufferingObservation = isBuffering;
|
|
1864
|
+
if (lastBufferedAtTokens !== void 0) {
|
|
1865
|
+
record.lastBufferedAtTokens = lastBufferedAtTokens;
|
|
1866
|
+
}
|
|
1867
|
+
record.updatedAt = /* @__PURE__ */ new Date();
|
|
1868
|
+
}
|
|
1869
|
+
async setBufferingReflectionFlag(id, isBuffering) {
|
|
1870
|
+
const record = this.findObservationalMemoryRecordById(id);
|
|
1871
|
+
if (!record) {
|
|
1872
|
+
throw new Error(`Observational memory record not found: ${id}`);
|
|
1873
|
+
}
|
|
1874
|
+
record.isBufferingReflection = isBuffering;
|
|
1875
|
+
record.updatedAt = /* @__PURE__ */ new Date();
|
|
1876
|
+
}
|
|
1758
1877
|
async clearObservationalMemory(threadId, resourceId) {
|
|
1759
1878
|
const key = this.getObservationalMemoryKey(threadId, resourceId);
|
|
1760
1879
|
this.db.observationalMemory.delete(key);
|
|
1761
1880
|
}
|
|
1762
|
-
async
|
|
1881
|
+
async setPendingMessageTokens(id, tokenCount) {
|
|
1763
1882
|
const record = this.findObservationalMemoryRecordById(id);
|
|
1764
1883
|
if (!record) {
|
|
1765
1884
|
throw new Error(`Observational memory record not found: ${id}`);
|
|
1766
1885
|
}
|
|
1767
|
-
record.pendingMessageTokens =
|
|
1886
|
+
record.pendingMessageTokens = tokenCount;
|
|
1768
1887
|
record.updatedAt = /* @__PURE__ */ new Date();
|
|
1769
1888
|
}
|
|
1770
1889
|
/**
|
|
@@ -2216,6 +2335,638 @@ var ObservabilityInMemory = class extends ObservabilityStorage {
|
|
|
2216
2335
|
}
|
|
2217
2336
|
};
|
|
2218
2337
|
|
|
2338
|
+
// src/storage/domains/prompt-blocks/base.ts
|
|
2339
|
+
var PromptBlocksStorage = class extends VersionedStorageDomain {
|
|
2340
|
+
listKey = "promptBlocks";
|
|
2341
|
+
versionMetadataFields = [
|
|
2342
|
+
"id",
|
|
2343
|
+
"blockId",
|
|
2344
|
+
"versionNumber",
|
|
2345
|
+
"changedFields",
|
|
2346
|
+
"changeMessage",
|
|
2347
|
+
"createdAt"
|
|
2348
|
+
];
|
|
2349
|
+
constructor() {
|
|
2350
|
+
super({
|
|
2351
|
+
component: "STORAGE",
|
|
2352
|
+
name: "PROMPT_BLOCKS"
|
|
2353
|
+
});
|
|
2354
|
+
}
|
|
2355
|
+
};
|
|
2356
|
+
|
|
2357
|
+
// src/storage/domains/prompt-blocks/inmemory.ts
|
|
2358
|
+
var InMemoryPromptBlocksStorage = class extends PromptBlocksStorage {
|
|
2359
|
+
db;
|
|
2360
|
+
constructor({ db }) {
|
|
2361
|
+
super();
|
|
2362
|
+
this.db = db;
|
|
2363
|
+
}
|
|
2364
|
+
async dangerouslyClearAll() {
|
|
2365
|
+
this.db.promptBlocks.clear();
|
|
2366
|
+
this.db.promptBlockVersions.clear();
|
|
2367
|
+
}
|
|
2368
|
+
// ==========================================================================
|
|
2369
|
+
// Prompt Block CRUD Methods
|
|
2370
|
+
// ==========================================================================
|
|
2371
|
+
async getById(id) {
|
|
2372
|
+
this.logger.debug(`InMemoryPromptBlocksStorage: getById called for ${id}`);
|
|
2373
|
+
const block = this.db.promptBlocks.get(id);
|
|
2374
|
+
return block ? this.deepCopyBlock(block) : null;
|
|
2375
|
+
}
|
|
2376
|
+
async create(input) {
|
|
2377
|
+
const { promptBlock } = input;
|
|
2378
|
+
this.logger.debug(`InMemoryPromptBlocksStorage: create called for ${promptBlock.id}`);
|
|
2379
|
+
if (this.db.promptBlocks.has(promptBlock.id)) {
|
|
2380
|
+
throw new Error(`Prompt block with id ${promptBlock.id} already exists`);
|
|
2381
|
+
}
|
|
2382
|
+
const now = /* @__PURE__ */ new Date();
|
|
2383
|
+
const newBlock = {
|
|
2384
|
+
id: promptBlock.id,
|
|
2385
|
+
status: "draft",
|
|
2386
|
+
activeVersionId: void 0,
|
|
2387
|
+
authorId: promptBlock.authorId,
|
|
2388
|
+
metadata: promptBlock.metadata,
|
|
2389
|
+
createdAt: now,
|
|
2390
|
+
updatedAt: now
|
|
2391
|
+
};
|
|
2392
|
+
this.db.promptBlocks.set(promptBlock.id, newBlock);
|
|
2393
|
+
const { id: _id, authorId: _authorId, metadata: _metadata, ...snapshotConfig } = promptBlock;
|
|
2394
|
+
const versionId = crypto.randomUUID();
|
|
2395
|
+
await this.createVersion({
|
|
2396
|
+
id: versionId,
|
|
2397
|
+
blockId: promptBlock.id,
|
|
2398
|
+
versionNumber: 1,
|
|
2399
|
+
...snapshotConfig,
|
|
2400
|
+
changedFields: Object.keys(snapshotConfig),
|
|
2401
|
+
changeMessage: "Initial version"
|
|
2402
|
+
});
|
|
2403
|
+
return this.deepCopyBlock(newBlock);
|
|
2404
|
+
}
|
|
2405
|
+
async update(input) {
|
|
2406
|
+
const { id, ...updates } = input;
|
|
2407
|
+
this.logger.debug(`InMemoryPromptBlocksStorage: update called for ${id}`);
|
|
2408
|
+
const existingBlock = this.db.promptBlocks.get(id);
|
|
2409
|
+
if (!existingBlock) {
|
|
2410
|
+
throw new Error(`Prompt block with id ${id} not found`);
|
|
2411
|
+
}
|
|
2412
|
+
const { authorId, activeVersionId, metadata, status, ...configFields } = updates;
|
|
2413
|
+
const configFieldNames = ["name", "description", "content", "rules"];
|
|
2414
|
+
const hasConfigUpdate = configFieldNames.some((field) => field in configFields);
|
|
2415
|
+
const updatedBlock = {
|
|
2416
|
+
...existingBlock,
|
|
2417
|
+
...authorId !== void 0 && { authorId },
|
|
2418
|
+
...activeVersionId !== void 0 && { activeVersionId },
|
|
2419
|
+
...status !== void 0 && { status },
|
|
2420
|
+
...metadata !== void 0 && {
|
|
2421
|
+
metadata: { ...existingBlock.metadata, ...metadata }
|
|
2422
|
+
},
|
|
2423
|
+
updatedAt: /* @__PURE__ */ new Date()
|
|
2424
|
+
};
|
|
2425
|
+
if (activeVersionId !== void 0) {
|
|
2426
|
+
updatedBlock.status = "published";
|
|
2427
|
+
}
|
|
2428
|
+
if (hasConfigUpdate) {
|
|
2429
|
+
const latestVersion = await this.getLatestVersion(id);
|
|
2430
|
+
if (!latestVersion) {
|
|
2431
|
+
throw new Error(`No versions found for prompt block ${id}`);
|
|
2432
|
+
}
|
|
2433
|
+
const {
|
|
2434
|
+
id: _versionId,
|
|
2435
|
+
blockId: _blockId,
|
|
2436
|
+
versionNumber: _versionNumber,
|
|
2437
|
+
changedFields: _changedFields,
|
|
2438
|
+
changeMessage: _changeMessage,
|
|
2439
|
+
createdAt: _createdAt,
|
|
2440
|
+
...latestConfig
|
|
2441
|
+
} = latestVersion;
|
|
2442
|
+
const newConfig = {
|
|
2443
|
+
...latestConfig,
|
|
2444
|
+
...configFields
|
|
2445
|
+
};
|
|
2446
|
+
const changedFields = configFieldNames.filter(
|
|
2447
|
+
(field) => field in configFields && JSON.stringify(configFields[field]) !== JSON.stringify(latestConfig[field])
|
|
2448
|
+
);
|
|
2449
|
+
if (changedFields.length > 0) {
|
|
2450
|
+
const newVersionId = crypto.randomUUID();
|
|
2451
|
+
const newVersionNumber = latestVersion.versionNumber + 1;
|
|
2452
|
+
await this.createVersion({
|
|
2453
|
+
id: newVersionId,
|
|
2454
|
+
blockId: id,
|
|
2455
|
+
versionNumber: newVersionNumber,
|
|
2456
|
+
...newConfig,
|
|
2457
|
+
changedFields,
|
|
2458
|
+
changeMessage: `Updated ${changedFields.join(", ")}`
|
|
2459
|
+
});
|
|
2460
|
+
}
|
|
2461
|
+
}
|
|
2462
|
+
this.db.promptBlocks.set(id, updatedBlock);
|
|
2463
|
+
return this.deepCopyBlock(updatedBlock);
|
|
2464
|
+
}
|
|
2465
|
+
async delete(id) {
|
|
2466
|
+
this.logger.debug(`InMemoryPromptBlocksStorage: delete called for ${id}`);
|
|
2467
|
+
this.db.promptBlocks.delete(id);
|
|
2468
|
+
await this.deleteVersionsByParentId(id);
|
|
2469
|
+
}
|
|
2470
|
+
async list(args) {
|
|
2471
|
+
const { page = 0, perPage: perPageInput, orderBy, authorId, metadata } = args || {};
|
|
2472
|
+
const { field, direction } = this.parseOrderBy(orderBy);
|
|
2473
|
+
this.logger.debug(`InMemoryPromptBlocksStorage: list called`);
|
|
2474
|
+
const perPage = normalizePerPage(perPageInput, 100);
|
|
2475
|
+
if (page < 0) {
|
|
2476
|
+
throw new Error("page must be >= 0");
|
|
2477
|
+
}
|
|
2478
|
+
const maxOffset = Number.MAX_SAFE_INTEGER / 2;
|
|
2479
|
+
if (page * perPage > maxOffset) {
|
|
2480
|
+
throw new Error("page value too large");
|
|
2481
|
+
}
|
|
2482
|
+
let blocks = Array.from(this.db.promptBlocks.values());
|
|
2483
|
+
if (authorId !== void 0) {
|
|
2484
|
+
blocks = blocks.filter((block) => block.authorId === authorId);
|
|
2485
|
+
}
|
|
2486
|
+
if (metadata && Object.keys(metadata).length > 0) {
|
|
2487
|
+
blocks = blocks.filter((block) => {
|
|
2488
|
+
if (!block.metadata) return false;
|
|
2489
|
+
return Object.entries(metadata).every(([key, value]) => deepEqual(block.metadata[key], value));
|
|
2490
|
+
});
|
|
2491
|
+
}
|
|
2492
|
+
const sortedBlocks = this.sortBlocks(blocks, field, direction);
|
|
2493
|
+
const clonedBlocks = sortedBlocks.map((block) => this.deepCopyBlock(block));
|
|
2494
|
+
const { offset, perPage: perPageForResponse } = calculatePagination(page, perPageInput, perPage);
|
|
2495
|
+
return {
|
|
2496
|
+
promptBlocks: clonedBlocks.slice(offset, offset + perPage),
|
|
2497
|
+
total: clonedBlocks.length,
|
|
2498
|
+
page,
|
|
2499
|
+
perPage: perPageForResponse,
|
|
2500
|
+
hasMore: offset + perPage < clonedBlocks.length
|
|
2501
|
+
};
|
|
2502
|
+
}
|
|
2503
|
+
// ==========================================================================
|
|
2504
|
+
// Prompt Block Version Methods
|
|
2505
|
+
// ==========================================================================
|
|
2506
|
+
async createVersion(input) {
|
|
2507
|
+
this.logger.debug(`InMemoryPromptBlocksStorage: createVersion called for block ${input.blockId}`);
|
|
2508
|
+
if (this.db.promptBlockVersions.has(input.id)) {
|
|
2509
|
+
throw new Error(`Version with id ${input.id} already exists`);
|
|
2510
|
+
}
|
|
2511
|
+
for (const version2 of this.db.promptBlockVersions.values()) {
|
|
2512
|
+
if (version2.blockId === input.blockId && version2.versionNumber === input.versionNumber) {
|
|
2513
|
+
throw new Error(`Version number ${input.versionNumber} already exists for prompt block ${input.blockId}`);
|
|
2514
|
+
}
|
|
2515
|
+
}
|
|
2516
|
+
const version = {
|
|
2517
|
+
...input,
|
|
2518
|
+
createdAt: /* @__PURE__ */ new Date()
|
|
2519
|
+
};
|
|
2520
|
+
this.db.promptBlockVersions.set(input.id, this.deepCopyVersion(version));
|
|
2521
|
+
return this.deepCopyVersion(version);
|
|
2522
|
+
}
|
|
2523
|
+
async getVersion(id) {
|
|
2524
|
+
this.logger.debug(`InMemoryPromptBlocksStorage: getVersion called for ${id}`);
|
|
2525
|
+
const version = this.db.promptBlockVersions.get(id);
|
|
2526
|
+
return version ? this.deepCopyVersion(version) : null;
|
|
2527
|
+
}
|
|
2528
|
+
async getVersionByNumber(blockId, versionNumber) {
|
|
2529
|
+
this.logger.debug(`InMemoryPromptBlocksStorage: getVersionByNumber called for block ${blockId}, v${versionNumber}`);
|
|
2530
|
+
for (const version of this.db.promptBlockVersions.values()) {
|
|
2531
|
+
if (version.blockId === blockId && version.versionNumber === versionNumber) {
|
|
2532
|
+
return this.deepCopyVersion(version);
|
|
2533
|
+
}
|
|
2534
|
+
}
|
|
2535
|
+
return null;
|
|
2536
|
+
}
|
|
2537
|
+
async getLatestVersion(blockId) {
|
|
2538
|
+
this.logger.debug(`InMemoryPromptBlocksStorage: getLatestVersion called for block ${blockId}`);
|
|
2539
|
+
let latest = null;
|
|
2540
|
+
for (const version of this.db.promptBlockVersions.values()) {
|
|
2541
|
+
if (version.blockId === blockId) {
|
|
2542
|
+
if (!latest || version.versionNumber > latest.versionNumber) {
|
|
2543
|
+
latest = version;
|
|
2544
|
+
}
|
|
2545
|
+
}
|
|
2546
|
+
}
|
|
2547
|
+
return latest ? this.deepCopyVersion(latest) : null;
|
|
2548
|
+
}
|
|
2549
|
+
async listVersions(input) {
|
|
2550
|
+
const { blockId, page = 0, perPage: perPageInput, orderBy } = input;
|
|
2551
|
+
const { field, direction } = this.parseVersionOrderBy(orderBy);
|
|
2552
|
+
this.logger.debug(`InMemoryPromptBlocksStorage: listVersions called for block ${blockId}`);
|
|
2553
|
+
const perPage = normalizePerPage(perPageInput, 20);
|
|
2554
|
+
if (page < 0) {
|
|
2555
|
+
throw new Error("page must be >= 0");
|
|
2556
|
+
}
|
|
2557
|
+
const maxOffset = Number.MAX_SAFE_INTEGER / 2;
|
|
2558
|
+
if (page * perPage > maxOffset) {
|
|
2559
|
+
throw new Error("page value too large");
|
|
2560
|
+
}
|
|
2561
|
+
let versions = Array.from(this.db.promptBlockVersions.values()).filter((v) => v.blockId === blockId);
|
|
2562
|
+
versions = this.sortVersions(versions, field, direction);
|
|
2563
|
+
const clonedVersions = versions.map((v) => this.deepCopyVersion(v));
|
|
2564
|
+
const total = clonedVersions.length;
|
|
2565
|
+
const { offset, perPage: perPageForResponse } = calculatePagination(page, perPageInput, perPage);
|
|
2566
|
+
const paginatedVersions = clonedVersions.slice(offset, offset + perPage);
|
|
2567
|
+
return {
|
|
2568
|
+
versions: paginatedVersions,
|
|
2569
|
+
total,
|
|
2570
|
+
page,
|
|
2571
|
+
perPage: perPageForResponse,
|
|
2572
|
+
hasMore: offset + perPage < total
|
|
2573
|
+
};
|
|
2574
|
+
}
|
|
2575
|
+
async deleteVersion(id) {
|
|
2576
|
+
this.logger.debug(`InMemoryPromptBlocksStorage: deleteVersion called for ${id}`);
|
|
2577
|
+
this.db.promptBlockVersions.delete(id);
|
|
2578
|
+
}
|
|
2579
|
+
async deleteVersionsByParentId(entityId) {
|
|
2580
|
+
this.logger.debug(`InMemoryPromptBlocksStorage: deleteVersionsByParentId called for block ${entityId}`);
|
|
2581
|
+
const idsToDelete = [];
|
|
2582
|
+
for (const [id, version] of this.db.promptBlockVersions.entries()) {
|
|
2583
|
+
if (version.blockId === entityId) {
|
|
2584
|
+
idsToDelete.push(id);
|
|
2585
|
+
}
|
|
2586
|
+
}
|
|
2587
|
+
for (const id of idsToDelete) {
|
|
2588
|
+
this.db.promptBlockVersions.delete(id);
|
|
2589
|
+
}
|
|
2590
|
+
}
|
|
2591
|
+
async countVersions(blockId) {
|
|
2592
|
+
this.logger.debug(`InMemoryPromptBlocksStorage: countVersions called for block ${blockId}`);
|
|
2593
|
+
let count = 0;
|
|
2594
|
+
for (const version of this.db.promptBlockVersions.values()) {
|
|
2595
|
+
if (version.blockId === blockId) {
|
|
2596
|
+
count++;
|
|
2597
|
+
}
|
|
2598
|
+
}
|
|
2599
|
+
return count;
|
|
2600
|
+
}
|
|
2601
|
+
// ==========================================================================
|
|
2602
|
+
// Private Helper Methods
|
|
2603
|
+
// ==========================================================================
|
|
2604
|
+
deepCopyBlock(block) {
|
|
2605
|
+
return {
|
|
2606
|
+
...block,
|
|
2607
|
+
metadata: block.metadata ? { ...block.metadata } : block.metadata
|
|
2608
|
+
};
|
|
2609
|
+
}
|
|
2610
|
+
deepCopyVersion(version) {
|
|
2611
|
+
return {
|
|
2612
|
+
...version,
|
|
2613
|
+
rules: version.rules ? JSON.parse(JSON.stringify(version.rules)) : version.rules,
|
|
2614
|
+
changedFields: version.changedFields ? [...version.changedFields] : version.changedFields
|
|
2615
|
+
};
|
|
2616
|
+
}
|
|
2617
|
+
sortBlocks(blocks, field, direction) {
|
|
2618
|
+
return blocks.sort((a, b) => {
|
|
2619
|
+
const aValue = a[field].getTime();
|
|
2620
|
+
const bValue = b[field].getTime();
|
|
2621
|
+
return direction === "ASC" ? aValue - bValue : bValue - aValue;
|
|
2622
|
+
});
|
|
2623
|
+
}
|
|
2624
|
+
sortVersions(versions, field, direction) {
|
|
2625
|
+
return versions.sort((a, b) => {
|
|
2626
|
+
let aVal;
|
|
2627
|
+
let bVal;
|
|
2628
|
+
if (field === "createdAt") {
|
|
2629
|
+
aVal = a.createdAt.getTime();
|
|
2630
|
+
bVal = b.createdAt.getTime();
|
|
2631
|
+
} else {
|
|
2632
|
+
aVal = a.versionNumber;
|
|
2633
|
+
bVal = b.versionNumber;
|
|
2634
|
+
}
|
|
2635
|
+
return direction === "ASC" ? aVal - bVal : bVal - aVal;
|
|
2636
|
+
});
|
|
2637
|
+
}
|
|
2638
|
+
};
|
|
2639
|
+
|
|
2640
|
+
// src/storage/domains/scorer-definitions/base.ts
|
|
2641
|
+
var ScorerDefinitionsStorage = class extends VersionedStorageDomain {
|
|
2642
|
+
listKey = "scorerDefinitions";
|
|
2643
|
+
versionMetadataFields = [
|
|
2644
|
+
"id",
|
|
2645
|
+
"scorerDefinitionId",
|
|
2646
|
+
"versionNumber",
|
|
2647
|
+
"changedFields",
|
|
2648
|
+
"changeMessage",
|
|
2649
|
+
"createdAt"
|
|
2650
|
+
];
|
|
2651
|
+
constructor() {
|
|
2652
|
+
super({
|
|
2653
|
+
component: "STORAGE",
|
|
2654
|
+
name: "SCORER_DEFINITIONS"
|
|
2655
|
+
});
|
|
2656
|
+
}
|
|
2657
|
+
};
|
|
2658
|
+
|
|
2659
|
+
// src/storage/domains/scorer-definitions/inmemory.ts
|
|
2660
|
+
var InMemoryScorerDefinitionsStorage = class extends ScorerDefinitionsStorage {
|
|
2661
|
+
db;
|
|
2662
|
+
constructor({ db }) {
|
|
2663
|
+
super();
|
|
2664
|
+
this.db = db;
|
|
2665
|
+
}
|
|
2666
|
+
async dangerouslyClearAll() {
|
|
2667
|
+
this.db.scorerDefinitions.clear();
|
|
2668
|
+
this.db.scorerDefinitionVersions.clear();
|
|
2669
|
+
}
|
|
2670
|
+
// ==========================================================================
|
|
2671
|
+
// Scorer Definition CRUD Methods
|
|
2672
|
+
// ==========================================================================
|
|
2673
|
+
async getById(id) {
|
|
2674
|
+
this.logger.debug(`InMemoryScorerDefinitionsStorage: getById called for ${id}`);
|
|
2675
|
+
const scorer = this.db.scorerDefinitions.get(id);
|
|
2676
|
+
return scorer ? this.deepCopyScorer(scorer) : null;
|
|
2677
|
+
}
|
|
2678
|
+
async create(input) {
|
|
2679
|
+
const { scorerDefinition } = input;
|
|
2680
|
+
this.logger.debug(`InMemoryScorerDefinitionsStorage: create called for ${scorerDefinition.id}`);
|
|
2681
|
+
if (this.db.scorerDefinitions.has(scorerDefinition.id)) {
|
|
2682
|
+
throw new Error(`Scorer definition with id ${scorerDefinition.id} already exists`);
|
|
2683
|
+
}
|
|
2684
|
+
const now = /* @__PURE__ */ new Date();
|
|
2685
|
+
const newScorer = {
|
|
2686
|
+
id: scorerDefinition.id,
|
|
2687
|
+
status: "draft",
|
|
2688
|
+
activeVersionId: void 0,
|
|
2689
|
+
authorId: scorerDefinition.authorId,
|
|
2690
|
+
metadata: scorerDefinition.metadata,
|
|
2691
|
+
createdAt: now,
|
|
2692
|
+
updatedAt: now
|
|
2693
|
+
};
|
|
2694
|
+
this.db.scorerDefinitions.set(scorerDefinition.id, newScorer);
|
|
2695
|
+
const { id: _id, authorId: _authorId, metadata: _metadata, ...snapshotConfig } = scorerDefinition;
|
|
2696
|
+
const versionId = crypto.randomUUID();
|
|
2697
|
+
await this.createVersion({
|
|
2698
|
+
id: versionId,
|
|
2699
|
+
scorerDefinitionId: scorerDefinition.id,
|
|
2700
|
+
versionNumber: 1,
|
|
2701
|
+
...snapshotConfig,
|
|
2702
|
+
changedFields: Object.keys(snapshotConfig),
|
|
2703
|
+
changeMessage: "Initial version"
|
|
2704
|
+
});
|
|
2705
|
+
return this.deepCopyScorer(newScorer);
|
|
2706
|
+
}
|
|
2707
|
+
async update(input) {
|
|
2708
|
+
const { id, ...updates } = input;
|
|
2709
|
+
this.logger.debug(`InMemoryScorerDefinitionsStorage: update called for ${id}`);
|
|
2710
|
+
const existingScorer = this.db.scorerDefinitions.get(id);
|
|
2711
|
+
if (!existingScorer) {
|
|
2712
|
+
throw new Error(`Scorer definition with id ${id} not found`);
|
|
2713
|
+
}
|
|
2714
|
+
const { authorId, activeVersionId, metadata, status, ...configFields } = updates;
|
|
2715
|
+
const configFieldNames = [
|
|
2716
|
+
"name",
|
|
2717
|
+
"description",
|
|
2718
|
+
"type",
|
|
2719
|
+
"model",
|
|
2720
|
+
"instructions",
|
|
2721
|
+
"scoreRange",
|
|
2722
|
+
"presetConfig",
|
|
2723
|
+
"defaultSampling"
|
|
2724
|
+
];
|
|
2725
|
+
const hasConfigUpdate = configFieldNames.some((field) => field in configFields);
|
|
2726
|
+
const updatedScorer = {
|
|
2727
|
+
...existingScorer,
|
|
2728
|
+
...authorId !== void 0 && { authorId },
|
|
2729
|
+
...activeVersionId !== void 0 && { activeVersionId },
|
|
2730
|
+
...status !== void 0 && { status },
|
|
2731
|
+
...metadata !== void 0 && {
|
|
2732
|
+
metadata: { ...existingScorer.metadata, ...metadata }
|
|
2733
|
+
},
|
|
2734
|
+
updatedAt: /* @__PURE__ */ new Date()
|
|
2735
|
+
};
|
|
2736
|
+
if (activeVersionId !== void 0) {
|
|
2737
|
+
updatedScorer.status = "published";
|
|
2738
|
+
}
|
|
2739
|
+
if (hasConfigUpdate) {
|
|
2740
|
+
const latestVersion = await this.getLatestVersion(id);
|
|
2741
|
+
if (!latestVersion) {
|
|
2742
|
+
throw new Error(`No versions found for scorer definition ${id}`);
|
|
2743
|
+
}
|
|
2744
|
+
const {
|
|
2745
|
+
id: _versionId,
|
|
2746
|
+
scorerDefinitionId: _scorerDefinitionId,
|
|
2747
|
+
versionNumber: _versionNumber,
|
|
2748
|
+
changedFields: _changedFields,
|
|
2749
|
+
changeMessage: _changeMessage,
|
|
2750
|
+
createdAt: _createdAt,
|
|
2751
|
+
...latestConfig
|
|
2752
|
+
} = latestVersion;
|
|
2753
|
+
const newConfig = {
|
|
2754
|
+
...latestConfig,
|
|
2755
|
+
...configFields
|
|
2756
|
+
};
|
|
2757
|
+
const changedFields = configFieldNames.filter(
|
|
2758
|
+
(field) => field in configFields && JSON.stringify(configFields[field]) !== JSON.stringify(latestConfig[field])
|
|
2759
|
+
);
|
|
2760
|
+
if (changedFields.length > 0) {
|
|
2761
|
+
const newVersionId = crypto.randomUUID();
|
|
2762
|
+
const newVersionNumber = latestVersion.versionNumber + 1;
|
|
2763
|
+
await this.createVersion({
|
|
2764
|
+
id: newVersionId,
|
|
2765
|
+
scorerDefinitionId: id,
|
|
2766
|
+
versionNumber: newVersionNumber,
|
|
2767
|
+
...newConfig,
|
|
2768
|
+
changedFields,
|
|
2769
|
+
changeMessage: `Updated ${changedFields.join(", ")}`
|
|
2770
|
+
});
|
|
2771
|
+
}
|
|
2772
|
+
}
|
|
2773
|
+
this.db.scorerDefinitions.set(id, updatedScorer);
|
|
2774
|
+
return this.deepCopyScorer(updatedScorer);
|
|
2775
|
+
}
|
|
2776
|
+
async delete(id) {
|
|
2777
|
+
this.logger.debug(`InMemoryScorerDefinitionsStorage: delete called for ${id}`);
|
|
2778
|
+
this.db.scorerDefinitions.delete(id);
|
|
2779
|
+
await this.deleteVersionsByParentId(id);
|
|
2780
|
+
}
|
|
2781
|
+
async list(args) {
|
|
2782
|
+
const { page = 0, perPage: perPageInput, orderBy, authorId, metadata } = args || {};
|
|
2783
|
+
const { field, direction } = this.parseOrderBy(orderBy);
|
|
2784
|
+
this.logger.debug(`InMemoryScorerDefinitionsStorage: list called`);
|
|
2785
|
+
const perPage = normalizePerPage(perPageInput, 100);
|
|
2786
|
+
if (page < 0) {
|
|
2787
|
+
throw new Error("page must be >= 0");
|
|
2788
|
+
}
|
|
2789
|
+
const maxOffset = Number.MAX_SAFE_INTEGER / 2;
|
|
2790
|
+
if (page * perPage > maxOffset) {
|
|
2791
|
+
throw new Error("page value too large");
|
|
2792
|
+
}
|
|
2793
|
+
let scorers = Array.from(this.db.scorerDefinitions.values());
|
|
2794
|
+
if (authorId !== void 0) {
|
|
2795
|
+
scorers = scorers.filter((scorer) => scorer.authorId === authorId);
|
|
2796
|
+
}
|
|
2797
|
+
if (metadata && Object.keys(metadata).length > 0) {
|
|
2798
|
+
scorers = scorers.filter((scorer) => {
|
|
2799
|
+
if (!scorer.metadata) return false;
|
|
2800
|
+
return Object.entries(metadata).every(([key, value]) => deepEqual(scorer.metadata[key], value));
|
|
2801
|
+
});
|
|
2802
|
+
}
|
|
2803
|
+
const sortedScorers = this.sortScorers(scorers, field, direction);
|
|
2804
|
+
const clonedScorers = sortedScorers.map((scorer) => this.deepCopyScorer(scorer));
|
|
2805
|
+
const { offset, perPage: perPageForResponse } = calculatePagination(page, perPageInput, perPage);
|
|
2806
|
+
return {
|
|
2807
|
+
scorerDefinitions: clonedScorers.slice(offset, offset + perPage),
|
|
2808
|
+
total: clonedScorers.length,
|
|
2809
|
+
page,
|
|
2810
|
+
perPage: perPageForResponse,
|
|
2811
|
+
hasMore: offset + perPage < clonedScorers.length
|
|
2812
|
+
};
|
|
2813
|
+
}
|
|
2814
|
+
// ==========================================================================
|
|
2815
|
+
// Scorer Definition Version Methods
|
|
2816
|
+
// ==========================================================================
|
|
2817
|
+
async createVersion(input) {
|
|
2818
|
+
this.logger.debug(
|
|
2819
|
+
`InMemoryScorerDefinitionsStorage: createVersion called for scorer definition ${input.scorerDefinitionId}`
|
|
2820
|
+
);
|
|
2821
|
+
if (this.db.scorerDefinitionVersions.has(input.id)) {
|
|
2822
|
+
throw new Error(`Version with id ${input.id} already exists`);
|
|
2823
|
+
}
|
|
2824
|
+
for (const version2 of this.db.scorerDefinitionVersions.values()) {
|
|
2825
|
+
if (version2.scorerDefinitionId === input.scorerDefinitionId && version2.versionNumber === input.versionNumber) {
|
|
2826
|
+
throw new Error(
|
|
2827
|
+
`Version number ${input.versionNumber} already exists for scorer definition ${input.scorerDefinitionId}`
|
|
2828
|
+
);
|
|
2829
|
+
}
|
|
2830
|
+
}
|
|
2831
|
+
const version = {
|
|
2832
|
+
...input,
|
|
2833
|
+
createdAt: /* @__PURE__ */ new Date()
|
|
2834
|
+
};
|
|
2835
|
+
this.db.scorerDefinitionVersions.set(input.id, this.deepCopyVersion(version));
|
|
2836
|
+
return this.deepCopyVersion(version);
|
|
2837
|
+
}
|
|
2838
|
+
async getVersion(id) {
|
|
2839
|
+
this.logger.debug(`InMemoryScorerDefinitionsStorage: getVersion called for ${id}`);
|
|
2840
|
+
const version = this.db.scorerDefinitionVersions.get(id);
|
|
2841
|
+
return version ? this.deepCopyVersion(version) : null;
|
|
2842
|
+
}
|
|
2843
|
+
async getVersionByNumber(scorerDefinitionId, versionNumber) {
|
|
2844
|
+
this.logger.debug(
|
|
2845
|
+
`InMemoryScorerDefinitionsStorage: getVersionByNumber called for scorer definition ${scorerDefinitionId}, v${versionNumber}`
|
|
2846
|
+
);
|
|
2847
|
+
for (const version of this.db.scorerDefinitionVersions.values()) {
|
|
2848
|
+
if (version.scorerDefinitionId === scorerDefinitionId && version.versionNumber === versionNumber) {
|
|
2849
|
+
return this.deepCopyVersion(version);
|
|
2850
|
+
}
|
|
2851
|
+
}
|
|
2852
|
+
return null;
|
|
2853
|
+
}
|
|
2854
|
+
async getLatestVersion(scorerDefinitionId) {
|
|
2855
|
+
this.logger.debug(
|
|
2856
|
+
`InMemoryScorerDefinitionsStorage: getLatestVersion called for scorer definition ${scorerDefinitionId}`
|
|
2857
|
+
);
|
|
2858
|
+
let latest = null;
|
|
2859
|
+
for (const version of this.db.scorerDefinitionVersions.values()) {
|
|
2860
|
+
if (version.scorerDefinitionId === scorerDefinitionId) {
|
|
2861
|
+
if (!latest || version.versionNumber > latest.versionNumber) {
|
|
2862
|
+
latest = version;
|
|
2863
|
+
}
|
|
2864
|
+
}
|
|
2865
|
+
}
|
|
2866
|
+
return latest ? this.deepCopyVersion(latest) : null;
|
|
2867
|
+
}
|
|
2868
|
+
async listVersions(input) {
|
|
2869
|
+
const { scorerDefinitionId, page = 0, perPage: perPageInput, orderBy } = input;
|
|
2870
|
+
const { field, direction } = this.parseVersionOrderBy(orderBy);
|
|
2871
|
+
this.logger.debug(
|
|
2872
|
+
`InMemoryScorerDefinitionsStorage: listVersions called for scorer definition ${scorerDefinitionId}`
|
|
2873
|
+
);
|
|
2874
|
+
const perPage = normalizePerPage(perPageInput, 20);
|
|
2875
|
+
if (page < 0) {
|
|
2876
|
+
throw new Error("page must be >= 0");
|
|
2877
|
+
}
|
|
2878
|
+
const maxOffset = Number.MAX_SAFE_INTEGER / 2;
|
|
2879
|
+
if (page * perPage > maxOffset) {
|
|
2880
|
+
throw new Error("page value too large");
|
|
2881
|
+
}
|
|
2882
|
+
let versions = Array.from(this.db.scorerDefinitionVersions.values()).filter(
|
|
2883
|
+
(v) => v.scorerDefinitionId === scorerDefinitionId
|
|
2884
|
+
);
|
|
2885
|
+
versions = this.sortVersions(versions, field, direction);
|
|
2886
|
+
const clonedVersions = versions.map((v) => this.deepCopyVersion(v));
|
|
2887
|
+
const total = clonedVersions.length;
|
|
2888
|
+
const { offset, perPage: perPageForResponse } = calculatePagination(page, perPageInput, perPage);
|
|
2889
|
+
const paginatedVersions = clonedVersions.slice(offset, offset + perPage);
|
|
2890
|
+
return {
|
|
2891
|
+
versions: paginatedVersions,
|
|
2892
|
+
total,
|
|
2893
|
+
page,
|
|
2894
|
+
perPage: perPageForResponse,
|
|
2895
|
+
hasMore: offset + perPage < total
|
|
2896
|
+
};
|
|
2897
|
+
}
|
|
2898
|
+
async deleteVersion(id) {
|
|
2899
|
+
this.logger.debug(`InMemoryScorerDefinitionsStorage: deleteVersion called for ${id}`);
|
|
2900
|
+
this.db.scorerDefinitionVersions.delete(id);
|
|
2901
|
+
}
|
|
2902
|
+
async deleteVersionsByParentId(entityId) {
|
|
2903
|
+
this.logger.debug(
|
|
2904
|
+
`InMemoryScorerDefinitionsStorage: deleteVersionsByParentId called for scorer definition ${entityId}`
|
|
2905
|
+
);
|
|
2906
|
+
const idsToDelete = [];
|
|
2907
|
+
for (const [id, version] of this.db.scorerDefinitionVersions.entries()) {
|
|
2908
|
+
if (version.scorerDefinitionId === entityId) {
|
|
2909
|
+
idsToDelete.push(id);
|
|
2910
|
+
}
|
|
2911
|
+
}
|
|
2912
|
+
for (const id of idsToDelete) {
|
|
2913
|
+
this.db.scorerDefinitionVersions.delete(id);
|
|
2914
|
+
}
|
|
2915
|
+
}
|
|
2916
|
+
async countVersions(scorerDefinitionId) {
|
|
2917
|
+
this.logger.debug(
|
|
2918
|
+
`InMemoryScorerDefinitionsStorage: countVersions called for scorer definition ${scorerDefinitionId}`
|
|
2919
|
+
);
|
|
2920
|
+
let count = 0;
|
|
2921
|
+
for (const version of this.db.scorerDefinitionVersions.values()) {
|
|
2922
|
+
if (version.scorerDefinitionId === scorerDefinitionId) {
|
|
2923
|
+
count++;
|
|
2924
|
+
}
|
|
2925
|
+
}
|
|
2926
|
+
return count;
|
|
2927
|
+
}
|
|
2928
|
+
// ==========================================================================
|
|
2929
|
+
// Private Helper Methods
|
|
2930
|
+
// ==========================================================================
|
|
2931
|
+
deepCopyScorer(scorer) {
|
|
2932
|
+
return {
|
|
2933
|
+
...scorer,
|
|
2934
|
+
metadata: scorer.metadata ? { ...scorer.metadata } : scorer.metadata
|
|
2935
|
+
};
|
|
2936
|
+
}
|
|
2937
|
+
deepCopyVersion(version) {
|
|
2938
|
+
return {
|
|
2939
|
+
...version,
|
|
2940
|
+
model: version.model ? JSON.parse(JSON.stringify(version.model)) : version.model,
|
|
2941
|
+
scoreRange: version.scoreRange ? JSON.parse(JSON.stringify(version.scoreRange)) : version.scoreRange,
|
|
2942
|
+
presetConfig: version.presetConfig ? JSON.parse(JSON.stringify(version.presetConfig)) : version.presetConfig,
|
|
2943
|
+
defaultSampling: version.defaultSampling ? JSON.parse(JSON.stringify(version.defaultSampling)) : version.defaultSampling,
|
|
2944
|
+
changedFields: version.changedFields ? [...version.changedFields] : version.changedFields
|
|
2945
|
+
};
|
|
2946
|
+
}
|
|
2947
|
+
sortScorers(scorers, field, direction) {
|
|
2948
|
+
return scorers.sort((a, b) => {
|
|
2949
|
+
const aValue = a[field].getTime();
|
|
2950
|
+
const bValue = b[field].getTime();
|
|
2951
|
+
return direction === "ASC" ? aValue - bValue : bValue - aValue;
|
|
2952
|
+
});
|
|
2953
|
+
}
|
|
2954
|
+
sortVersions(versions, field, direction) {
|
|
2955
|
+
return versions.sort((a, b) => {
|
|
2956
|
+
let aVal;
|
|
2957
|
+
let bVal;
|
|
2958
|
+
if (field === "createdAt") {
|
|
2959
|
+
aVal = a.createdAt.getTime();
|
|
2960
|
+
bVal = b.createdAt.getTime();
|
|
2961
|
+
} else {
|
|
2962
|
+
aVal = a.versionNumber;
|
|
2963
|
+
bVal = b.versionNumber;
|
|
2964
|
+
}
|
|
2965
|
+
return direction === "ASC" ? aVal - bVal : bVal - aVal;
|
|
2966
|
+
});
|
|
2967
|
+
}
|
|
2968
|
+
};
|
|
2969
|
+
|
|
2219
2970
|
// src/storage/domains/scores/base.ts
|
|
2220
2971
|
var ScoresStorage = class extends StorageDomain {
|
|
2221
2972
|
constructor() {
|
|
@@ -2638,7 +3389,9 @@ var InMemoryStore = class extends MastraCompositeStore {
|
|
|
2638
3389
|
workflows: new WorkflowsInMemory({ db: this.#db }),
|
|
2639
3390
|
scores: new ScoresInMemory({ db: this.#db }),
|
|
2640
3391
|
observability: new ObservabilityInMemory({ db: this.#db }),
|
|
2641
|
-
agents: new InMemoryAgentsStorage({ db: this.#db })
|
|
3392
|
+
agents: new InMemoryAgentsStorage({ db: this.#db }),
|
|
3393
|
+
promptBlocks: new InMemoryPromptBlocksStorage({ db: this.#db }),
|
|
3394
|
+
scorerDefinitions: new InMemoryScorerDefinitionsStorage({ db: this.#db })
|
|
2642
3395
|
};
|
|
2643
3396
|
}
|
|
2644
3397
|
/**
|
|
@@ -2773,7 +3526,11 @@ var StoreOperationsInMemory = class extends StoreOperations {
|
|
|
2773
3526
|
mastra_ai_spans: /* @__PURE__ */ new Map(),
|
|
2774
3527
|
mastra_agents: /* @__PURE__ */ new Map(),
|
|
2775
3528
|
mastra_agent_versions: /* @__PURE__ */ new Map(),
|
|
2776
|
-
mastra_observational_memory: /* @__PURE__ */ new Map()
|
|
3529
|
+
mastra_observational_memory: /* @__PURE__ */ new Map(),
|
|
3530
|
+
mastra_prompt_blocks: /* @__PURE__ */ new Map(),
|
|
3531
|
+
mastra_prompt_block_versions: /* @__PURE__ */ new Map(),
|
|
3532
|
+
mastra_scorer_definitions: /* @__PURE__ */ new Map(),
|
|
3533
|
+
mastra_scorer_definition_versions: /* @__PURE__ */ new Map()
|
|
2777
3534
|
};
|
|
2778
3535
|
}
|
|
2779
3536
|
getDatabase() {
|
|
@@ -2838,6 +3595,6 @@ var StoreOperationsInMemory = class extends StoreOperations {
|
|
|
2838
3595
|
}
|
|
2839
3596
|
};
|
|
2840
3597
|
|
|
2841
|
-
export { AgentsStorage, InMemoryAgentsStorage, InMemoryDB, InMemoryMemory, InMemoryStore, MastraCompositeStore, MastraStorage, MemoryStorage, MockStore, ObservabilityInMemory, ObservabilityStorage, ScoresInMemory, ScoresStorage, StorageDomain, StoreOperations, StoreOperationsInMemory, WorkflowsInMemory, WorkflowsStorage, calculatePagination, createPendingMarker, createStorageErrorId, createStoreErrorId, createVectorErrorId, ensureDate, filterByDateRange, getDefaultValue, getSqlType, jsonValueEquals, normalizePerPage, safelyParseJSON, serializeDate, transformRow, transformScoreRow };
|
|
2842
|
-
//# sourceMappingURL=chunk-
|
|
2843
|
-
//# sourceMappingURL=chunk-
|
|
3598
|
+
export { AgentsStorage, InMemoryAgentsStorage, InMemoryDB, InMemoryMemory, InMemoryPromptBlocksStorage, InMemoryScorerDefinitionsStorage, InMemoryStore, MastraCompositeStore, MastraStorage, MemoryStorage, MockStore, ObservabilityInMemory, ObservabilityStorage, PromptBlocksStorage, ScorerDefinitionsStorage, ScoresInMemory, ScoresStorage, StorageDomain, StoreOperations, StoreOperationsInMemory, VersionedStorageDomain, WorkflowsInMemory, WorkflowsStorage, calculatePagination, createPendingMarker, createStorageErrorId, createStoreErrorId, createVectorErrorId, ensureDate, filterByDateRange, getDefaultValue, getSqlType, jsonValueEquals, normalizePerPage, safelyParseJSON, serializeDate, transformRow, transformScoreRow };
|
|
3599
|
+
//# sourceMappingURL=chunk-MOOJ3H3C.js.map
|
|
3600
|
+
//# sourceMappingURL=chunk-MOOJ3H3C.js.map
|