@mastra/server 1.16.0-alpha.2 → 1.16.0-alpha.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +76 -0
- package/dist/{chunk-PUMBMYBX.cjs → chunk-37LAVKFO.cjs} +11 -11
- package/dist/{chunk-PUMBMYBX.cjs.map → chunk-37LAVKFO.cjs.map} +1 -1
- package/dist/{chunk-62GR2C36.cjs → chunk-3BRCE7JC.cjs} +11 -11
- package/dist/{chunk-62GR2C36.cjs.map → chunk-3BRCE7JC.cjs.map} +1 -1
- package/dist/{chunk-Z7BMOL42.cjs → chunk-3W54ZNYP.cjs} +30 -30
- package/dist/{chunk-Z7BMOL42.cjs.map → chunk-3W54ZNYP.cjs.map} +1 -1
- package/dist/{chunk-MZ275AAF.js → chunk-4D7KSU4X.js} +4 -4
- package/dist/{chunk-MZ275AAF.js.map → chunk-4D7KSU4X.js.map} +1 -1
- package/dist/{chunk-XWN66HIC.cjs → chunk-4G5KVXN6.cjs} +17 -17
- package/dist/{chunk-XWN66HIC.cjs.map → chunk-4G5KVXN6.cjs.map} +1 -1
- package/dist/{chunk-YAQDFKGR.js → chunk-4NRXB7VI.js} +3 -3
- package/dist/{chunk-YAQDFKGR.js.map → chunk-4NRXB7VI.js.map} +1 -1
- package/dist/{chunk-WOU6ROOP.js → chunk-5GXB4IME.js} +3 -3
- package/dist/{chunk-WOU6ROOP.js.map → chunk-5GXB4IME.js.map} +1 -1
- package/dist/{chunk-PIORYI6S.js → chunk-645P6ZAV.js} +11 -3
- package/dist/chunk-645P6ZAV.js.map +1 -0
- package/dist/{chunk-O52KF4SM.js → chunk-6QBPL7ME.js} +4 -4
- package/dist/{chunk-O52KF4SM.js.map → chunk-6QBPL7ME.js.map} +1 -1
- package/dist/{chunk-3ZPZHQRS.js → chunk-7TESOQZ3.js} +3 -3
- package/dist/{chunk-3ZPZHQRS.js.map → chunk-7TESOQZ3.js.map} +1 -1
- package/dist/{chunk-4I2LMHTI.js → chunk-7ZHBGYZB.js} +3 -3
- package/dist/{chunk-4I2LMHTI.js.map → chunk-7ZHBGYZB.js.map} +1 -1
- package/dist/{chunk-QD7NPKXK.cjs → chunk-A5J2TY2W.cjs} +6 -6
- package/dist/{chunk-QD7NPKXK.cjs.map → chunk-A5J2TY2W.cjs.map} +1 -1
- package/dist/{chunk-OSZ6AAFG.cjs → chunk-ALMN74MG.cjs} +106 -102
- package/dist/chunk-ALMN74MG.cjs.map +1 -0
- package/dist/{chunk-K3TANUFC.js → chunk-ATZ7V3XS.js} +5 -5
- package/dist/{chunk-K3TANUFC.js.map → chunk-ATZ7V3XS.js.map} +1 -1
- package/dist/{chunk-MR2JXSLN.js → chunk-B5KNWY2P.js} +3 -3
- package/dist/{chunk-MR2JXSLN.js.map → chunk-B5KNWY2P.js.map} +1 -1
- package/dist/{chunk-OQCQTAI6.js → chunk-CZUJUB46.js} +14 -5
- package/dist/chunk-CZUJUB46.js.map +1 -0
- package/dist/{chunk-375NFGLA.js → chunk-E56FRMZY.js} +3 -3
- package/dist/{chunk-375NFGLA.js.map → chunk-E56FRMZY.js.map} +1 -1
- package/dist/{chunk-2OGP3GTW.cjs → chunk-EGSCXVMR.cjs} +5 -52
- package/dist/chunk-EGSCXVMR.cjs.map +1 -0
- package/dist/{chunk-3LBYNV6U.js → chunk-FB5NRM2M.js} +3 -3
- package/dist/{chunk-3LBYNV6U.js.map → chunk-FB5NRM2M.js.map} +1 -1
- package/dist/{chunk-E3ZR4JAK.cjs → chunk-FPEX6KOJ.cjs} +46 -43
- package/dist/chunk-FPEX6KOJ.cjs.map +1 -0
- package/dist/{chunk-3CILCP75.js → chunk-FU5Z5NSF.js} +4 -4
- package/dist/{chunk-3CILCP75.js.map → chunk-FU5Z5NSF.js.map} +1 -1
- package/dist/{chunk-Y5MUJIDZ.js → chunk-G2ZZKKQI.js} +4 -4
- package/dist/{chunk-Y5MUJIDZ.js.map → chunk-G2ZZKKQI.js.map} +1 -1
- package/dist/{chunk-EGFJ3CSS.cjs → chunk-G5KXPZUB.cjs} +7 -7
- package/dist/{chunk-EGFJ3CSS.cjs.map → chunk-G5KXPZUB.cjs.map} +1 -1
- package/dist/{chunk-MSGUG7XP.js → chunk-GF42M6A3.js} +3 -3
- package/dist/{chunk-MSGUG7XP.js.map → chunk-GF42M6A3.js.map} +1 -1
- package/dist/{chunk-ODP5DUNL.cjs → chunk-GVZ7VB33.cjs} +16 -7
- package/dist/chunk-GVZ7VB33.cjs.map +1 -0
- package/dist/{chunk-HDF6J2PA.js → chunk-GYD5JBBZ.js} +3 -3
- package/dist/{chunk-HDF6J2PA.js.map → chunk-GYD5JBBZ.js.map} +1 -1
- package/dist/{chunk-C3VLRWVN.cjs → chunk-H6ZLN6EU.cjs} +11 -11
- package/dist/{chunk-C3VLRWVN.cjs.map → chunk-H6ZLN6EU.cjs.map} +1 -1
- package/dist/{chunk-OIBX76JU.cjs → chunk-HBMIUVV4.cjs} +10 -10
- package/dist/{chunk-OIBX76JU.cjs.map → chunk-HBMIUVV4.cjs.map} +1 -1
- package/dist/{chunk-2HD547CV.js → chunk-HI5EDX3F.js} +3 -3
- package/dist/{chunk-2HD547CV.js.map → chunk-HI5EDX3F.js.map} +1 -1
- package/dist/{chunk-NASA6WQI.cjs → chunk-HXICAUTW.cjs} +9 -5
- package/dist/chunk-HXICAUTW.cjs.map +1 -0
- package/dist/{chunk-HOAPBP32.cjs → chunk-JH576GTI.cjs} +10 -10
- package/dist/{chunk-HOAPBP32.cjs.map → chunk-JH576GTI.cjs.map} +1 -1
- package/dist/{chunk-EP7BGEQN.js → chunk-JL6JURL5.js} +4 -4
- package/dist/{chunk-EP7BGEQN.js.map → chunk-JL6JURL5.js.map} +1 -1
- package/dist/{chunk-PY465Q3R.js → chunk-K6RNBFGH.js} +4 -4
- package/dist/{chunk-PY465Q3R.js.map → chunk-K6RNBFGH.js.map} +1 -1
- package/dist/{chunk-YENPIZNE.cjs → chunk-KAWEDYGS.cjs} +11 -11
- package/dist/{chunk-YENPIZNE.cjs.map → chunk-KAWEDYGS.cjs.map} +1 -1
- package/dist/{chunk-AYBVZYKG.js → chunk-M6AQTASN.js} +3 -3
- package/dist/{chunk-AYBVZYKG.js.map → chunk-M6AQTASN.js.map} +1 -1
- package/dist/{chunk-7U4AWIZN.js → chunk-MH2WUZWZ.js} +4 -4
- package/dist/{chunk-7U4AWIZN.js.map → chunk-MH2WUZWZ.js.map} +1 -1
- package/dist/{chunk-FSAN76YB.js → chunk-MKW43AJ3.js} +4 -4
- package/dist/{chunk-FSAN76YB.js.map → chunk-MKW43AJ3.js.map} +1 -1
- package/dist/{chunk-7XTRDSIB.cjs → chunk-MNEANLCY.cjs} +10 -10
- package/dist/{chunk-7XTRDSIB.cjs.map → chunk-MNEANLCY.cjs.map} +1 -1
- package/dist/{chunk-F6OAHS7U.cjs → chunk-NCCK5NVX.cjs} +10 -10
- package/dist/{chunk-F6OAHS7U.cjs.map → chunk-NCCK5NVX.cjs.map} +1 -1
- package/dist/{chunk-5LHQGPOK.js → chunk-NMS2SC2B.js} +4 -50
- package/dist/chunk-NMS2SC2B.js.map +1 -0
- package/dist/{chunk-37WHTNK3.cjs → chunk-NOBDUHIG.cjs} +10 -10
- package/dist/{chunk-37WHTNK3.cjs.map → chunk-NOBDUHIG.cjs.map} +1 -1
- package/dist/{chunk-4Y4RMTIA.cjs → chunk-OCSZZ5UK.cjs} +11 -3
- package/dist/chunk-OCSZZ5UK.cjs.map +1 -0
- package/dist/{chunk-4RNME2SG.js → chunk-OXE6JN54.js} +3 -3
- package/dist/{chunk-4RNME2SG.js.map → chunk-OXE6JN54.js.map} +1 -1
- package/dist/{chunk-OMZ2AFE6.js → chunk-QJZOWORS.js} +4 -4
- package/dist/{chunk-OMZ2AFE6.js.map → chunk-QJZOWORS.js.map} +1 -1
- package/dist/{chunk-BB6XFMH3.js → chunk-R3IO7NKS.js} +12 -9
- package/dist/chunk-R3IO7NKS.js.map +1 -0
- package/dist/{chunk-3UXER23P.js → chunk-RGI5IQDO.js} +3 -3
- package/dist/{chunk-3UXER23P.js.map → chunk-RGI5IQDO.js.map} +1 -1
- package/dist/{chunk-VEAVTM4P.js → chunk-RW62AXQH.js} +5 -3
- package/dist/chunk-RW62AXQH.js.map +1 -0
- package/dist/{chunk-75A4PINQ.js → chunk-SCHPGBMK.js} +5 -5
- package/dist/{chunk-75A4PINQ.js.map → chunk-SCHPGBMK.js.map} +1 -1
- package/dist/{chunk-5LURYWNF.cjs → chunk-SEMV475G.cjs} +5 -5
- package/dist/{chunk-5LURYWNF.cjs.map → chunk-SEMV475G.cjs.map} +1 -1
- package/dist/{chunk-J4OPB4KS.cjs → chunk-TYYGY4H4.cjs} +11 -11
- package/dist/{chunk-J4OPB4KS.cjs.map → chunk-TYYGY4H4.cjs.map} +1 -1
- package/dist/{chunk-UOYOF6ZJ.cjs → chunk-UFK5THVP.cjs} +10 -10
- package/dist/{chunk-UOYOF6ZJ.cjs.map → chunk-UFK5THVP.cjs.map} +1 -1
- package/dist/{chunk-FLIDCUYX.js → chunk-UKYIFRF3.js} +3 -3
- package/dist/{chunk-FLIDCUYX.js.map → chunk-UKYIFRF3.js.map} +1 -1
- package/dist/{chunk-C4U6B3QN.cjs → chunk-ULLR3RN3.cjs} +10 -10
- package/dist/{chunk-C4U6B3QN.cjs.map → chunk-ULLR3RN3.cjs.map} +1 -1
- package/dist/{chunk-457RSMZH.cjs → chunk-UTQV3JAT.cjs} +338 -117
- package/dist/chunk-UTQV3JAT.cjs.map +1 -0
- package/dist/{chunk-ZGDE3DVS.cjs → chunk-UUQ6I673.cjs} +6 -6
- package/dist/{chunk-ZGDE3DVS.cjs.map → chunk-UUQ6I673.cjs.map} +1 -1
- package/dist/{chunk-U67CHRAK.js → chunk-V4IWGD6S.js} +10 -6
- package/dist/chunk-V4IWGD6S.js.map +1 -0
- package/dist/{chunk-GIEF7CQR.cjs → chunk-VCBFCDP3.cjs} +103 -100
- package/dist/chunk-VCBFCDP3.cjs.map +1 -0
- package/dist/{chunk-ZRUDCNFS.js → chunk-W2QMKHBI.js} +338 -118
- package/dist/chunk-W2QMKHBI.js.map +1 -0
- package/dist/{chunk-2CO6GUN2.cjs → chunk-WC4OPIB4.cjs} +6 -6
- package/dist/{chunk-2CO6GUN2.cjs.map → chunk-WC4OPIB4.cjs.map} +1 -1
- package/dist/{chunk-JURBS7AW.cjs → chunk-WIQDQTKG.cjs} +12 -12
- package/dist/{chunk-JURBS7AW.cjs.map → chunk-WIQDQTKG.cjs.map} +1 -1
- package/dist/{chunk-VDMJKGYJ.cjs → chunk-WUCJRGTK.cjs} +10 -10
- package/dist/{chunk-VDMJKGYJ.cjs.map → chunk-WUCJRGTK.cjs.map} +1 -1
- package/dist/{chunk-S3OSXKBZ.js → chunk-WYAFNFFM.js} +55 -42
- package/dist/chunk-WYAFNFFM.js.map +1 -0
- package/dist/{chunk-FFX5KP4Y.cjs → chunk-XBMICDYC.cjs} +26 -26
- package/dist/{chunk-FFX5KP4Y.cjs.map → chunk-XBMICDYC.cjs.map} +1 -1
- package/dist/{chunk-XUBQNV4W.cjs → chunk-Y2OBOWHZ.cjs} +33 -33
- package/dist/{chunk-XUBQNV4W.cjs.map → chunk-Y2OBOWHZ.cjs.map} +1 -1
- package/dist/{chunk-JTKK7ZEC.cjs → chunk-YEYWCSMW.cjs} +14 -14
- package/dist/{chunk-JTKK7ZEC.cjs.map → chunk-YEYWCSMW.cjs.map} +1 -1
- package/dist/{chunk-OOTESG4L.js → chunk-YKS5HCGB.js} +12 -9
- package/dist/chunk-YKS5HCGB.js.map +1 -0
- package/dist/{chunk-DZHGLVLY.cjs → chunk-YTB4DWYU.cjs} +30 -30
- package/dist/{chunk-DZHGLVLY.cjs.map → chunk-YTB4DWYU.cjs.map} +1 -1
- package/dist/{chunk-F37L2WVR.cjs → chunk-YV7FX2SA.cjs} +10 -10
- package/dist/{chunk-F37L2WVR.cjs.map → chunk-YV7FX2SA.cjs.map} +1 -1
- package/dist/{chunk-KVLNMWUF.cjs → chunk-YWPRH3D3.cjs} +132 -119
- package/dist/chunk-YWPRH3D3.cjs.map +1 -0
- package/dist/{chunk-DWIUNYVY.cjs → chunk-ZFCNTRZ2.cjs} +5 -3
- package/dist/chunk-ZFCNTRZ2.cjs.map +1 -0
- package/dist/{chunk-C2ITUXN6.js → chunk-ZHULRNJG.js} +9 -6
- package/dist/chunk-ZHULRNJG.js.map +1 -0
- package/dist/{chunk-BHMMMTPE.js → chunk-ZKXIAID6.js} +4 -4
- package/dist/{chunk-BHMMMTPE.js.map → chunk-ZKXIAID6.js.map} +1 -1
- package/dist/docs/SKILL.md +1 -1
- package/dist/docs/assets/SOURCE_MAP.json +1 -1
- package/dist/{observational-memory-OZ7TG4DZ-COUORCVN.cjs → observational-memory-K2U3QQIO-MBBXGVVG.cjs} +32 -28
- package/dist/{observational-memory-OZ7TG4DZ-COUORCVN.cjs.map → observational-memory-K2U3QQIO-MBBXGVVG.cjs.map} +1 -1
- package/dist/observational-memory-K2U3QQIO-MOPJN5M7.js +3 -0
- package/dist/{observational-memory-OZ7TG4DZ-MYYBYEP6.js.map → observational-memory-K2U3QQIO-MOPJN5M7.js.map} +1 -1
- package/dist/server/handlers/a2a.cjs +9 -9
- package/dist/server/handlers/a2a.js +1 -1
- package/dist/server/handlers/agent-builder.cjs +16 -16
- package/dist/server/handlers/agent-builder.js +1 -1
- package/dist/server/handlers/agent-versions.cjs +8 -8
- package/dist/server/handlers/agent-versions.js +1 -1
- package/dist/server/handlers/agents.cjs +33 -33
- package/dist/server/handlers/agents.d.ts +10 -5
- package/dist/server/handlers/agents.d.ts.map +1 -1
- package/dist/server/handlers/agents.js +1 -1
- package/dist/server/handlers/auth.cjs +10 -10
- package/dist/server/handlers/auth.js +1 -1
- package/dist/server/handlers/datasets.cjs +24 -24
- package/dist/server/handlers/datasets.js +1 -1
- package/dist/server/handlers/logs.cjs +4 -4
- package/dist/server/handlers/logs.js +1 -1
- package/dist/server/handlers/mcp-client-versions.cjs +8 -8
- package/dist/server/handlers/mcp-client-versions.js +1 -1
- package/dist/server/handlers/mcp.cjs +9 -9
- package/dist/server/handlers/mcp.js +1 -1
- package/dist/server/handlers/memory.cjs +27 -27
- package/dist/server/handlers/memory.d.ts +16 -0
- package/dist/server/handlers/memory.d.ts.map +1 -1
- package/dist/server/handlers/memory.js +1 -1
- package/dist/server/handlers/observability-new-endpoints.cjs +19 -19
- package/dist/server/handlers/observability-new-endpoints.js +1 -1
- package/dist/server/handlers/observability.cjs +24 -24
- package/dist/server/handlers/observability.js +2 -2
- package/dist/server/handlers/processor-providers.cjs +3 -3
- package/dist/server/handlers/processor-providers.js +1 -1
- package/dist/server/handlers/processors.cjs +4 -4
- package/dist/server/handlers/processors.js +1 -1
- package/dist/server/handlers/prompt-block-versions.cjs +8 -8
- package/dist/server/handlers/prompt-block-versions.js +1 -1
- package/dist/server/handlers/scorer-versions.cjs +8 -8
- package/dist/server/handlers/scorer-versions.js +1 -1
- package/dist/server/handlers/scores.cjs +7 -7
- package/dist/server/handlers/scores.js +1 -1
- package/dist/server/handlers/stored-agents.cjs +7 -7
- package/dist/server/handlers/stored-agents.js +1 -1
- package/dist/server/handlers/stored-mcp-clients.cjs +6 -6
- package/dist/server/handlers/stored-mcp-clients.js +1 -1
- package/dist/server/handlers/stored-prompt-blocks.cjs +6 -6
- package/dist/server/handlers/stored-prompt-blocks.js +1 -1
- package/dist/server/handlers/stored-scorers.cjs +6 -6
- package/dist/server/handlers/stored-scorers.js +1 -1
- package/dist/server/handlers/stored-skills.cjs +7 -7
- package/dist/server/handlers/stored-skills.js +1 -1
- package/dist/server/handlers/stored-workspaces.cjs +6 -6
- package/dist/server/handlers/stored-workspaces.js +1 -1
- package/dist/server/handlers/system.cjs +2 -2
- package/dist/server/handlers/system.d.ts +4 -0
- package/dist/server/handlers/system.d.ts.map +1 -1
- package/dist/server/handlers/system.js +1 -1
- package/dist/server/handlers/tool-providers.cjs +5 -5
- package/dist/server/handlers/tool-providers.js +1 -1
- package/dist/server/handlers/tools.cjs +6 -6
- package/dist/server/handlers/tools.js +1 -1
- package/dist/server/handlers/vector.cjs +16 -16
- package/dist/server/handlers/vector.js +1 -1
- package/dist/server/handlers/voice.cjs +8 -8
- package/dist/server/handlers/voice.js +1 -1
- package/dist/server/handlers/workflows.cjs +24 -24
- package/dist/server/handlers/workflows.js +1 -1
- package/dist/server/handlers/workspace.cjs +26 -26
- package/dist/server/handlers/workspace.d.ts +60 -32
- package/dist/server/handlers/workspace.d.ts.map +1 -1
- package/dist/server/handlers/workspace.js +1 -1
- package/dist/server/handlers.cjs +26 -26
- package/dist/server/handlers.js +13 -13
- package/dist/server/schemas/index.cjs +103 -99
- package/dist/server/schemas/index.js +3 -3
- package/dist/server/schemas/memory.d.ts +8 -0
- package/dist/server/schemas/memory.d.ts.map +1 -1
- package/dist/server/schemas/system.d.ts +2 -0
- package/dist/server/schemas/system.d.ts.map +1 -1
- package/dist/server/schemas/workspace.d.ts +6 -0
- package/dist/server/schemas/workspace.d.ts.map +1 -1
- package/dist/server/server-adapter/index.cjs +284 -284
- package/dist/server/server-adapter/index.js +34 -34
- package/dist/server/server-adapter/routes/memory.d.ts +16 -0
- package/dist/server/server-adapter/routes/memory.d.ts.map +1 -1
- package/dist/server/server-adapter/routes/system.d.ts +4 -0
- package/dist/server/server-adapter/routes/system.d.ts.map +1 -1
- package/dist/server/server-adapter/routes/workspace.d.ts +30 -16
- package/dist/server/server-adapter/routes/workspace.d.ts.map +1 -1
- package/package.json +6 -6
- package/dist/chunk-2OGP3GTW.cjs.map +0 -1
- package/dist/chunk-457RSMZH.cjs.map +0 -1
- package/dist/chunk-4Y4RMTIA.cjs.map +0 -1
- package/dist/chunk-5LHQGPOK.js.map +0 -1
- package/dist/chunk-BB6XFMH3.js.map +0 -1
- package/dist/chunk-C2ITUXN6.js.map +0 -1
- package/dist/chunk-DWIUNYVY.cjs.map +0 -1
- package/dist/chunk-E3ZR4JAK.cjs.map +0 -1
- package/dist/chunk-GIEF7CQR.cjs.map +0 -1
- package/dist/chunk-KVLNMWUF.cjs.map +0 -1
- package/dist/chunk-NASA6WQI.cjs.map +0 -1
- package/dist/chunk-ODP5DUNL.cjs.map +0 -1
- package/dist/chunk-OOTESG4L.js.map +0 -1
- package/dist/chunk-OQCQTAI6.js.map +0 -1
- package/dist/chunk-OSZ6AAFG.cjs.map +0 -1
- package/dist/chunk-PIORYI6S.js.map +0 -1
- package/dist/chunk-S3OSXKBZ.js.map +0 -1
- package/dist/chunk-U67CHRAK.js.map +0 -1
- package/dist/chunk-VEAVTM4P.js.map +0 -1
- package/dist/chunk-ZRUDCNFS.js.map +0 -1
- package/dist/observational-memory-OZ7TG4DZ-MYYBYEP6.js +0 -3
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/server/schemas/memory.ts"],"names":[],"mappings":"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","file":"chunk-PIORYI6S.js","sourcesContent":["import { z } from 'zod/v4';\nimport { paginationInfoSchema, createPagePaginationSchema, successResponseSchema } from './common';\n\n// Path parameter schemas\nexport const threadIdPathParams = z.object({\n threadId: z.string().describe('Unique identifier for the conversation thread'),\n});\n\n/**\n * Common query parameter: required agent ID\n */\nexport const agentIdQuerySchema = z.object({\n agentId: z.string(),\n});\n\n/**\n * Common query parameter: optional agent ID\n * Used for read operations that can fall back to storage when agentId is not provided\n */\nexport const optionalAgentIdQuerySchema = z.object({\n agentId: z.string().optional(),\n});\n\n/**\n * Storage order by configuration for threads and agents (have both createdAt and updatedAt)\n * Handles JSON parsing from query strings\n */\nconst storageOrderBySchema = z.preprocess(\n val => {\n if (typeof val === 'string') {\n try {\n return JSON.parse(val);\n } catch {\n return undefined;\n }\n }\n return val;\n },\n z\n .object({\n field: z.enum(['createdAt', 'updatedAt']).optional(),\n direction: z.enum(['ASC', 'DESC']).optional(),\n })\n .optional(),\n);\n\n/**\n * Storage order by configuration for messages (only have createdAt)\n * Handles JSON parsing from query strings\n */\nconst messageOrderBySchema = z.preprocess(\n val => {\n if (typeof val === 'string') {\n try {\n return JSON.parse(val);\n } catch {\n return undefined;\n }\n }\n return val;\n },\n z\n .object({\n field: z.enum(['createdAt']).optional(),\n direction: z.enum(['ASC', 'DESC']).optional(),\n })\n .optional(),\n);\n\n/**\n * Include schema for message listing - handles JSON parsing from query strings\n */\nconst includeSchema = z.preprocess(\n val => {\n if (typeof val === 'string') {\n try {\n return JSON.parse(val);\n } catch {\n // Return invalid string to fail validation (z.array will reject string type)\n return val;\n }\n }\n return val;\n },\n z\n .array(\n z.object({\n id: z.string(),\n threadId: z.string().optional(),\n withPreviousMessages: z.number().optional(),\n withNextMessages: z.number().optional(),\n }),\n )\n .optional(),\n);\n\n/**\n * Filter schema for message listing - handles JSON parsing from query strings\n */\nconst filterSchema = z.preprocess(\n val => {\n if (typeof val === 'string') {\n try {\n return JSON.parse(val);\n } catch {\n // Return invalid string to fail validation (z.object will reject string type)\n return val;\n }\n }\n return val;\n },\n z\n .object({\n dateRange: z\n .object({\n start: z.coerce.date().optional(),\n end: z.coerce.date().optional(),\n })\n .optional(),\n roles: z.array(z.string()).optional(),\n })\n .optional(),\n);\n\n/**\n * Memory config schema - handles JSON parsing from query strings\n */\nconst memoryConfigSchema = z.preprocess(val => {\n if (typeof val === 'string') {\n try {\n return JSON.parse(val);\n } catch {\n // Return invalid string to fail validation (z.record will reject string type)\n return val;\n }\n }\n return val;\n}, z.record(z.string(), z.unknown()).optional());\n\n/**\n * Thread object structure\n */\nconst threadSchema = z.object({\n id: z.string(),\n title: z.string().optional(),\n resourceId: z.string(),\n createdAt: z.date(),\n updatedAt: z.date(),\n metadata: z.record(z.string(), z.unknown()).optional(),\n});\n\n/**\n * Message structure for storage\n * Extends coreMessageSchema with storage-specific fields\n */\nconst messageSchema = z.any();\n// const messageSchema = coreMessageSchema.extend({\n// id: z.string(),\n// createdAt: z.coerce.date(),\n// threadId: z.string().optional(),\n// resourceId: z.string().optional(),\n// });\n\n// ============================================================================\n// Query Parameter Schemas\n// ============================================================================\n\n/**\n * GET /api/memory/status\n * Includes optional resourceId and threadId for OM status lookup\n */\nexport const getMemoryStatusQuerySchema = agentIdQuerySchema.extend({\n resourceId: z.string().optional(),\n threadId: z.string().optional(),\n});\n\n/**\n * GET /memory/config\n */\nexport const getMemoryConfigQuerySchema = agentIdQuerySchema;\n\n/**\n * GET /memory/threads\n * agentId is optional - can use storage fallback when not provided\n * resourceId is optional - when omitted, returns all threads\n * metadata is optional - filters threads by metadata key-value pairs (AND logic)\n */\nexport const listThreadsQuerySchema = createPagePaginationSchema(100).extend({\n agentId: z.string().optional(),\n resourceId: z.string().optional(),\n metadata: z.preprocess(\n val => {\n if (typeof val === 'string') {\n try {\n return JSON.parse(val);\n } catch {\n // Return invalid string to fail validation (z.record will reject string type)\n return val;\n }\n }\n return val;\n },\n z.optional(z.record(z.string(), z.any())),\n ),\n orderBy: storageOrderBySchema,\n});\n\n/**\n * GET /memory/threads/:threadId\n * agentId is optional - can use storage fallback when not provided\n * resourceId is optional - used for ownership validation fallback when not set via middleware\n */\nexport const getThreadByIdQuerySchema = optionalAgentIdQuerySchema.extend({\n resourceId: z.string().optional(),\n});\n\n/**\n * GET /memory/threads/:threadId/messages\n * agentId is optional - can use storage fallback when not provided\n */\nexport const listMessagesQuerySchema = createPagePaginationSchema(40).extend({\n agentId: z.string().optional(),\n resourceId: z.string().optional(),\n orderBy: messageOrderBySchema,\n include: includeSchema,\n filter: filterSchema,\n});\n\n/**\n * GET /memory/threads/:threadId/working-memory\n */\nexport const getWorkingMemoryQuerySchema = z.object({\n agentId: z.string(),\n resourceId: z.string().optional(),\n memoryConfig: memoryConfigSchema,\n});\n\n/**\n * DELETE /memory/threads/:threadId\n * agentId is required\n * resourceId is optional - used for ownership validation fallback when not set via middleware\n */\nexport const deleteThreadQuerySchema = agentIdQuerySchema.extend({\n resourceId: z.string().optional(),\n});\n\n/**\n * POST /memory/messages/delete\n * agentId is required\n * resourceId is optional - used for ownership validation fallback when not set via middleware\n */\nexport const deleteMessagesQuerySchema = agentIdQuerySchema.extend({\n resourceId: z.string().optional(),\n});\n\n// ============================================================================\n// Legacy /network Query Parameter Schemas (backward compatibility)\n// ============================================================================\n\n/**\n * GET /memory/network/status\n */\nexport const getMemoryStatusNetworkQuerySchema = agentIdQuerySchema;\n\n/**\n * GET /memory/network/threads\n * agentId is optional - can use storage fallback when not provided\n * resourceId is optional - when omitted, returns all threads\n * metadata is optional - filters threads by metadata key-value pairs (AND logic)\n */\nexport const listThreadsNetworkQuerySchema = createPagePaginationSchema(100).extend({\n agentId: z.string().optional(),\n resourceId: z.string().optional(),\n metadata: z.preprocess(\n val => {\n if (typeof val === 'string') {\n try {\n return JSON.parse(val);\n } catch {\n // Return invalid string to fail validation (z.record will reject string type)\n return val;\n }\n }\n return val;\n },\n z.optional(z.record(z.string(), z.any())),\n ),\n orderBy: storageOrderBySchema,\n});\n\n/**\n * GET /memory/network/threads/:threadId\n * agentId is optional - can use storage fallback when not provided\n * resourceId is optional - used for ownership validation fallback when not set via middleware\n */\nexport const getThreadByIdNetworkQuerySchema = optionalAgentIdQuerySchema.extend({\n resourceId: z.string().optional(),\n});\n\n/**\n * GET /memory/network/threads/:threadId/messages\n * agentId is optional - can use storage fallback when not provided\n */\nexport const listMessagesNetworkQuerySchema = createPagePaginationSchema(40).extend({\n agentId: z.string().optional(),\n resourceId: z.string().optional(),\n orderBy: messageOrderBySchema,\n include: includeSchema,\n filter: filterSchema,\n});\n\n/**\n * POST /memory/network/save-messages\n */\nexport const saveMessagesNetworkQuerySchema = agentIdQuerySchema;\n\n/**\n * POST /memory/network/threads\n */\nexport const createThreadNetworkQuerySchema = agentIdQuerySchema;\n\n/**\n * PATCH /memory/network/threads/:threadId\n */\nexport const updateThreadNetworkQuerySchema = agentIdQuerySchema;\n\n/**\n * DELETE /memory/network/threads/:threadId\n * resourceId is optional - used for ownership validation fallback when not set via middleware\n */\nexport const deleteThreadNetworkQuerySchema = agentIdQuerySchema.extend({\n resourceId: z.string().optional(),\n});\n\n/**\n * POST /memory/network/messages/delete\n * resourceId is optional - used for ownership validation fallback when not set via middleware\n */\nexport const deleteMessagesNetworkQuerySchema = agentIdQuerySchema.extend({\n resourceId: z.string().optional(),\n});\n\n// ============================================================================\n// Response Schemas\n// ============================================================================\n\n/**\n * Response for GET /memory/status\n */\nexport const memoryStatusResponseSchema = z.object({\n result: z.boolean(),\n observationalMemory: z\n .object({\n enabled: z.boolean(),\n hasRecord: z.boolean().optional(),\n originType: z.string().optional(),\n lastObservedAt: z.date().optional(),\n tokenCount: z.number().optional(),\n observationTokenCount: z.number().optional(),\n isObserving: z.boolean().optional(),\n isReflecting: z.boolean().optional(),\n })\n .optional(),\n});\n\n/**\n * Observational Memory config schema for API responses\n */\nconst observationalMemoryConfigSchema = z.object({\n enabled: z.boolean(),\n scope: z.enum(['thread', 'resource']).optional(),\n shareTokenBudget: z.boolean().optional(),\n messageTokens: z.union([z.number(), z.object({ min: z.number(), max: z.number() })]).optional(),\n observationTokens: z.union([z.number(), z.object({ min: z.number(), max: z.number() })]).optional(),\n observationModel: z.string().optional(),\n reflectionModel: z.string().optional(),\n});\n\n/**\n * Response for GET /memory/config\n * MemoryConfig is complex with many optional fields - using passthrough\n */\nexport const memoryConfigResponseSchema = z.object({\n config: z\n .object({\n lastMessages: z.union([z.number(), z.literal(false)]).optional(),\n semanticRecall: z.union([z.boolean(), z.any()]).optional(),\n workingMemory: z.any().optional(),\n observationalMemory: observationalMemoryConfigSchema.optional(),\n })\n .nullable(),\n});\n\n/**\n * Response for GET /memory/threads\n */\nexport const listThreadsResponseSchema = paginationInfoSchema.extend({\n threads: z.array(threadSchema),\n});\n\n/**\n * Response for GET /memory/threads/:threadId\n */\nexport const getThreadByIdResponseSchema = threadSchema;\n\n/**\n * Response for GET /memory/threads/:threadId/messages\n */\nexport const listMessagesResponseSchema = z.object({\n messages: z.array(messageSchema),\n uiMessages: z.unknown(), // Converted messages in UI format\n});\n\n/**\n * Response for GET /memory/threads/:threadId/working-memory\n */\nexport const getWorkingMemoryResponseSchema = z.object({\n workingMemory: z.unknown(), // Can be string or structured object depending on template\n source: z.enum(['thread', 'resource']),\n workingMemoryTemplate: z.unknown(), // Template structure varies\n threadExists: z.boolean(),\n});\n\n// ============================================================================\n// Body Parameter Schemas for POST/PUT/DELETE\n// ============================================================================\n\n/**\n * Body schema for POST /memory/messages\n */\nexport const saveMessagesBodySchema = z.object({\n messages: z.array(messageSchema),\n});\n\n/**\n * Body schema for POST /memory/threads\n */\nexport const createThreadBodySchema = z.object({\n resourceId: z.string(),\n title: z.string().optional(),\n metadata: z.record(z.string(), z.unknown()).optional(),\n threadId: z.string().optional(),\n});\n\n/**\n * Body schema for PUT /memory/threads/:threadId\n */\nexport const updateThreadBodySchema = z.object({\n title: z.string().optional(),\n metadata: z.record(z.string(), z.unknown()).optional(),\n resourceId: z.string().optional(),\n});\n\n/**\n * Body schema for PUT /memory/threads/:threadId/working-memory\n */\nexport const updateWorkingMemoryBodySchema = z.object({\n workingMemory: z.string(),\n resourceId: z.string().optional(),\n memoryConfig: z.record(z.string(), z.unknown()).optional(),\n});\n\n/**\n * Body schema for POST /memory/messages/delete\n * Accepts: string | string[] | { id: string } | { id: string }[]\n */\nexport const deleteMessagesBodySchema = z.object({\n messageIds: z.union([\n z.string(),\n z.array(z.string()),\n z.object({ id: z.string() }),\n z.array(z.object({ id: z.string() })),\n ]),\n});\n\n/**\n * Query schema for GET /memory/search\n */\nexport const searchMemoryQuerySchema = z.object({\n agentId: z.string(),\n searchQuery: z.string(),\n resourceId: z.string(),\n threadId: z.string().optional(),\n limit: z.coerce.number().optional().default(20),\n memoryConfig: memoryConfigSchema,\n});\n\n/**\n * Response schemas\n */\nexport const saveMessagesResponseSchema = z.object({\n messages: z.array(messageSchema),\n});\n\nexport const deleteThreadResponseSchema = z.object({\n result: z.string(),\n});\n\nexport const updateWorkingMemoryResponseSchema = successResponseSchema;\n\nexport const deleteMessagesResponseSchema = successResponseSchema.extend({\n message: z.string(),\n});\n\nexport const searchMemoryResponseSchema = z.object({\n results: z.array(z.unknown()),\n count: z.number(),\n query: z.string(),\n searchScope: z.string().optional(),\n searchType: z.string().optional(),\n});\n\n/**\n * Body schema for POST /memory/threads/:threadId/clone\n */\nexport const cloneThreadBodySchema = z.object({\n newThreadId: z.string().optional(),\n resourceId: z.string().optional(),\n title: z.string().optional(),\n metadata: z.record(z.string(), z.unknown()).optional(),\n options: z\n .object({\n messageLimit: z.number().optional(),\n messageFilter: z\n .object({\n startDate: z.coerce.date().optional(),\n endDate: z.coerce.date().optional(),\n messageIds: z.array(z.string()).optional(),\n })\n .optional(),\n })\n .optional(),\n});\n\n/**\n * Response schema for POST /memory/threads/:threadId/clone\n */\nexport const cloneThreadResponseSchema = z.object({\n thread: threadSchema,\n clonedMessages: z.array(messageSchema),\n});\n\n// ============================================================================\n// Observational Memory Schemas\n// ============================================================================\n\n/**\n * Query schema for GET /api/memory/observational-memory\n */\nexport const getObservationalMemoryQuerySchema = z.object({\n agentId: z.string(),\n resourceId: z.string().optional(),\n threadId: z.string().optional(),\n});\n\n/**\n * Observational Memory record schema for API responses\n * Matches the ObservationalMemoryRecord type from @mastra/core/storage\n */\nconst observationalMemoryRecordSchema = z.object({\n id: z.string(),\n scope: z.enum(['thread', 'resource']),\n resourceId: z.string(),\n threadId: z.string().nullable(),\n activeObservations: z.string(),\n bufferedObservations: z.string().optional(),\n bufferedReflection: z.string().optional(),\n originType: z.enum(['initial', 'observation', 'reflection']),\n generationCount: z.number(),\n lastObservedAt: z.date().optional(),\n totalTokensObserved: z.number(),\n observationTokenCount: z.number(),\n pendingMessageTokens: z.number(),\n isObserving: z.boolean(),\n isReflecting: z.boolean(),\n config: z.record(z.string(), z.unknown()),\n metadata: z.record(z.string(), z.unknown()).optional(),\n createdAt: z.date(),\n updatedAt: z.date(),\n});\n\n/**\n * Response schema for GET /api/memory/observational-memory\n */\nexport const getObservationalMemoryResponseSchema = z.object({\n record: observationalMemoryRecordSchema.nullable(),\n history: z.array(observationalMemoryRecordSchema).optional(),\n});\n\n/**\n * Body schema for POST /api/memory/observational-memory/buffer-status\n */\nexport const awaitBufferStatusBodySchema = z.object({\n agentId: z.string(),\n resourceId: z.string().optional(),\n threadId: z.string().optional(),\n});\n\n/**\n * Response schema for POST /api/memory/observational-memory/buffer-status\n */\nexport const awaitBufferStatusResponseSchema = z.object({\n record: observationalMemoryRecordSchema.nullable(),\n});\n"]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/server/handlers/workspace.ts"],"names":[],"mappings":"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","file":"chunk-S3OSXKBZ.js","sourcesContent":["/**\n * Workspace Handlers\n *\n * Unified handlers for workspace operations including:\n * - Filesystem operations (read, write, list, delete, mkdir, stat)\n * - Search operations (search, index)\n * - Skills operations (list, get, search, references)\n */\n\nimport { coreFeatures } from '@mastra/core/features';\nimport type { Workspace, WorkspaceSkills, WorkspaceFilesystem, CompositeFilesystem } from '@mastra/core/workspace';\n\nimport { HTTPException } from '../http-exception';\nimport {\n // Workspace info\n workspaceInfoResponseSchema,\n listWorkspacesResponseSchema,\n workspaceIdPathParams,\n // Filesystem schemas\n fsReadQuerySchema,\n fsListQuerySchema,\n fsStatQuerySchema,\n fsDeleteQuerySchema,\n fsWriteBodySchema,\n fsMkdirBodySchema,\n fsReadResponseSchema,\n fsWriteResponseSchema,\n fsListResponseSchema,\n fsDeleteResponseSchema,\n fsMkdirResponseSchema,\n fsStatResponseSchema,\n // Search schemas\n searchQuerySchema,\n searchResponseSchema,\n indexBodySchema,\n indexResponseSchema,\n // Skills schemas\n skillNamePathParams,\n skillReferencePathParams,\n searchSkillsQuerySchema,\n listSkillsResponseSchema,\n getSkillResponseSchema,\n skillReferenceResponseSchema,\n listReferencesResponseSchema,\n searchSkillsResponseSchema,\n // skills.sh proxy schemas\n skillsShSearchQuerySchema,\n skillsShPopularQuerySchema,\n skillsShSearchResponseSchema,\n skillsShListResponseSchema,\n skillsShPreviewQuerySchema,\n skillsShInstallBodySchema,\n skillsShInstallResponseSchema,\n skillsShPreviewResponseSchema,\n skillsShRemoveBodySchema,\n skillsShRemoveResponseSchema,\n skillsShUpdateBodySchema,\n skillsShUpdateResponseSchema,\n} from '../schemas/workspace';\nimport { createRoute } from '../server-adapter/routes/route-builder';\nimport { handleError } from './error';\n\n// =============================================================================\n// Constants\n// =============================================================================\n\n/** Directory path for skills installed via skills.sh */\nconst SKILLS_SH_DIR = '.agents/skills';\n\n// =============================================================================\n// Helper Functions\n// =============================================================================\n\n/**\n * Runtime check for CompositeFilesystem using duck typing.\n * Uses a type-only import so older @mastra/core versions (< 1.3.0) work fine.\n */\nfunction isCompositeFilesystem(fs: unknown): fs is CompositeFilesystem {\n return !!fs && typeof fs === 'object' && 'mounts' in fs && fs.mounts instanceof Map;\n}\n\n/**\n * Check if an error is a workspace filesystem not-found error.\n * Handles Node.js ENOENT and workspace FileNotFoundError/DirectoryNotFoundError.\n */\nfunction isFilesystemNotFoundError(error: unknown): boolean {\n if (!error || typeof error !== 'object') return false;\n\n // Check for Node.js native ENOENT\n if ('code' in error && error.code === 'ENOENT') return true;\n\n // Check for workspace FileNotFoundError / DirectoryNotFoundError\n if ('name' in error) {\n const name = error.name;\n if (name === 'FileNotFoundError' || name === 'DirectoryNotFoundError') return true;\n }\n\n return false;\n}\n\n/**\n * Check if an error is a workspace filesystem permission error.\n * Handles Node.js EACCES and workspace PermissionError.\n */\nfunction isFilesystemPermissionError(error: unknown): boolean {\n if (!error || typeof error !== 'object') return false;\n\n if ('code' in error && error.code === 'EACCES') return true;\n\n if ('name' in error && error.name === 'PermissionError') return true;\n\n return false;\n}\n\n/**\n * Workspace-specific error handler.\n * Converts filesystem errors to appropriate HTTP status codes,\n * then falls back to generic handler.\n */\nfunction handleWorkspaceError(error: unknown, defaultMessage: string): never {\n if (isFilesystemNotFoundError(error)) {\n const message = error instanceof Error ? error.message : 'Not found';\n throw new HTTPException(404, { message });\n }\n if (isFilesystemPermissionError(error)) {\n const message = error instanceof Error ? error.message : 'Permission denied';\n throw new HTTPException(403, { message });\n }\n return handleError(error, defaultMessage);\n}\n\n/**\n * Throws if workspace v1 is not supported by the current version of @mastra/core.\n */\nfunction requireWorkspaceV1Support(): void {\n if (!coreFeatures.has('workspaces-v1')) {\n throw new HTTPException(501, {\n message: 'Workspace v1 not supported by this version of @mastra/core. Please upgrade to a newer version.',\n });\n }\n}\n\n/**\n * Get a workspace by ID from Mastra's workspace registry.\n *\n * Backwards compatible: Falls back to searching through agents if\n * mastra.getWorkspaceById() is not available (older @mastra/core versions).\n */\nasync function getWorkspaceById(mastra: any, workspaceId: string): Promise<Workspace | undefined> {\n requireWorkspaceV1Support();\n\n // Check if the global workspace matches\n const globalWorkspace = mastra.getWorkspace?.();\n if (globalWorkspace?.id === workspaceId) {\n return globalWorkspace;\n }\n\n // Try direct registry lookup if available (newer @mastra/core versions)\n if (typeof mastra.getWorkspaceById === 'function') {\n try {\n return mastra.getWorkspaceById(workspaceId);\n } catch {\n // Workspace not found in registry\n return undefined;\n }\n }\n\n // Fallback: Search through agents for the workspace (older @mastra/core versions)\n const agents = mastra.listAgents?.() ?? {};\n for (const agent of Object.values(agents)) {\n if ((agent as any).hasOwnWorkspace?.()) {\n const agentWorkspace = await (agent as any).getWorkspace?.();\n if (agentWorkspace?.id === workspaceId) {\n return agentWorkspace;\n }\n }\n }\n\n return undefined;\n}\n\n/**\n * Get skills from a specific workspace by ID.\n * Note: getWorkspaceById already checks for workspace v1 support.\n */\nasync function getSkillsById(mastra: any, workspaceId: string): Promise<WorkspaceSkills | undefined> {\n const workspace = await getWorkspaceById(mastra, workspaceId);\n return workspace?.skills;\n}\n\n/**\n * Build the install path for a skill from skills.sh.\n *\n * For CompositeFilesystem: resolves the requested mount (or first writable),\n * validates it is writable, and returns `<mount>/.agents/skills/<skillId>`.\n * For non-composite: returns `.agents/skills/<skillId>` (unchanged behavior).\n */\n/** Strip a single trailing slash (leaves `/` alone). */\nfunction stripTrailingSlash(p: string): string {\n return p.length > 1 && p.endsWith('/') ? p.slice(0, -1) : p;\n}\n\nfunction buildSkillInstallPath(filesystem: WorkspaceFilesystem, safeSkillId: string, requestedMount?: string): string {\n if (isCompositeFilesystem(filesystem)) {\n if (requestedMount) {\n // Validate the requested mount exists\n const mountFs = filesystem.mounts.get(requestedMount);\n if (!mountFs) {\n throw new HTTPException(400, {\n message: `Mount \"${requestedMount}\" not found. Available mounts: ${filesystem.mountPaths.join(', ')}`,\n });\n }\n if (mountFs.readOnly) {\n throw new HTTPException(403, { message: `Mount \"${requestedMount}\" is read-only` });\n }\n return `${stripTrailingSlash(requestedMount)}/${SKILLS_SH_DIR}/${safeSkillId}`;\n }\n\n // Default: use first writable mount\n for (const [mountPath, mountFs] of filesystem.mounts) {\n if (!mountFs.readOnly) {\n return `${stripTrailingSlash(mountPath)}/${SKILLS_SH_DIR}/${safeSkillId}`;\n }\n }\n\n throw new HTTPException(403, { message: 'No writable mount available for skill installation' });\n }\n\n // Non-composite: standard path\n return `${SKILLS_SH_DIR}/${safeSkillId}`;\n}\n\n// =============================================================================\n// List All Workspaces Route\n// =============================================================================\n\nexport const LIST_WORKSPACES_ROUTE = createRoute({\n method: 'GET',\n path: '/workspaces',\n responseType: 'json',\n responseSchema: listWorkspacesResponseSchema,\n summary: 'List all workspaces',\n description: 'Returns all workspaces from both Mastra instance and agents',\n tags: ['Workspace'],\n handler: async ({ mastra }) => {\n try {\n requireWorkspaceV1Support();\n\n const workspaces: Array<{\n id: string;\n name: string;\n status: string;\n source: 'mastra' | 'agent';\n agentId?: string;\n agentName?: string;\n capabilities: {\n hasFilesystem: boolean;\n hasSandbox: boolean;\n canBM25: boolean;\n canVector: boolean;\n canHybrid: boolean;\n hasSkills: boolean;\n };\n safety: {\n readOnly: boolean;\n };\n }> = [];\n\n // Prefer the workspace registry if available (duck-type check for newer @mastra/core).\n // This avoids calling dynamic workspace functions without proper request context.\n // Dynamic workspaces get lazily registered during agent execution (stream/generate).\n if (typeof mastra.listWorkspaces === 'function') {\n const registeredWorkspaces = mastra.listWorkspaces();\n\n for (const [, entry] of Object.entries(registeredWorkspaces)) {\n // Newer @mastra/core returns { workspace, source, agentId?, agentName? }.\n // Older versions return a bare Workspace object — detect via duck-typing.\n const ws: Workspace = (entry as any).workspace ?? entry;\n const source: 'mastra' | 'agent' = (entry as any).source ?? 'mastra';\n const agentId: string | undefined = (entry as any).agentId;\n const agentName: string | undefined = (entry as any).agentName;\n\n workspaces.push({\n id: ws.id,\n name: ws.name,\n status: ws.status,\n source,\n ...(source === 'agent' && agentId ? { agentId, ...(agentName != null ? { agentName } : {}) } : {}),\n capabilities: {\n hasFilesystem: !!ws.filesystem,\n hasSandbox: !!ws.sandbox,\n canBM25: ws.canBM25,\n canVector: ws.canVector,\n canHybrid: ws.canHybrid,\n hasSkills: !!ws.skills,\n },\n safety: {\n readOnly: ws.filesystem?.readOnly ?? false,\n },\n });\n }\n } else {\n // Fallback for older @mastra/core without workspace registry:\n // Check global workspace and loop through agents\n const seenIds = new Set<string>();\n const globalWorkspace = mastra.getWorkspace?.();\n if (globalWorkspace) {\n seenIds.add(globalWorkspace.id);\n workspaces.push({\n id: globalWorkspace.id,\n name: globalWorkspace.name,\n status: globalWorkspace.status,\n source: 'mastra',\n capabilities: {\n hasFilesystem: !!globalWorkspace.filesystem,\n hasSandbox: !!globalWorkspace.sandbox,\n canBM25: globalWorkspace.canBM25,\n canVector: globalWorkspace.canVector,\n canHybrid: globalWorkspace.canHybrid,\n hasSkills: !!globalWorkspace.skills,\n },\n safety: {\n readOnly: globalWorkspace.filesystem?.readOnly ?? false,\n },\n });\n }\n\n const agents = mastra.listAgents?.() ?? {};\n for (const [agentId, agent] of Object.entries(agents)) {\n if ((agent as any).hasOwnWorkspace?.()) {\n try {\n const agentWorkspace = await (agent as any).getWorkspace?.();\n if (agentWorkspace && !seenIds.has(agentWorkspace.id)) {\n seenIds.add(agentWorkspace.id);\n workspaces.push({\n id: agentWorkspace.id,\n name: agentWorkspace.name,\n status: agentWorkspace.status,\n source: 'agent',\n agentId,\n agentName: (agent as any).name,\n capabilities: {\n hasFilesystem: !!agentWorkspace.filesystem,\n hasSandbox: !!agentWorkspace.sandbox,\n canBM25: agentWorkspace.canBM25,\n canVector: agentWorkspace.canVector,\n canHybrid: agentWorkspace.canHybrid,\n hasSkills: !!agentWorkspace.skills,\n },\n safety: {\n readOnly: agentWorkspace.filesystem?.readOnly ?? false,\n },\n });\n }\n } catch {\n continue;\n }\n }\n }\n }\n\n return { workspaces };\n } catch (error) {\n return handleWorkspaceError(error, 'Error listing workspaces');\n }\n },\n});\n\n// =============================================================================\n// Get Workspace Route\n// =============================================================================\n\nexport const GET_WORKSPACE_ROUTE = createRoute({\n method: 'GET',\n path: '/workspaces/:workspaceId',\n responseType: 'json',\n pathParamSchema: workspaceIdPathParams,\n responseSchema: workspaceInfoResponseSchema,\n summary: 'Get workspace info',\n description: 'Returns information about a specific workspace and its capabilities',\n tags: ['Workspace'],\n handler: async ({ mastra, workspaceId }) => {\n try {\n const workspace = await getWorkspaceById(mastra, workspaceId);\n\n if (!workspace) {\n return {\n isWorkspaceConfigured: false,\n };\n }\n\n const fsInfo = await workspace.filesystem?.getInfo?.();\n\n // Build mounts array for CompositeFilesystem\n let mounts:\n | Array<{\n path: string;\n provider: string;\n readOnly: boolean;\n displayName?: string;\n icon?: string;\n name?: string;\n }>\n | undefined;\n\n if (isCompositeFilesystem(workspace.filesystem)) {\n mounts = [];\n for (const [mountPath, mountFs] of workspace.filesystem.mounts) {\n try {\n const info = await mountFs.getInfo?.();\n mounts.push({\n path: mountPath,\n provider: info?.provider ?? mountFs.provider ?? 'unknown',\n readOnly: mountFs.readOnly ?? false,\n displayName: info?.name ?? mountFs.name,\n icon: info?.icon,\n name: mountFs.name,\n });\n } catch {\n mounts.push({\n path: mountPath,\n provider: mountFs.provider ?? 'unknown',\n readOnly: mountFs.readOnly ?? true,\n name: mountFs.name,\n });\n }\n }\n }\n\n return {\n isWorkspaceConfigured: true,\n id: workspace.id,\n name: workspace.name,\n status: workspace.status,\n capabilities: {\n hasFilesystem: !!workspace.filesystem,\n hasSandbox: !!workspace.sandbox,\n canBM25: workspace.canBM25,\n canVector: workspace.canVector,\n canHybrid: workspace.canHybrid,\n hasSkills: !!workspace.skills,\n },\n safety: {\n readOnly: workspace.filesystem?.readOnly ?? false,\n },\n filesystem: fsInfo\n ? {\n id: fsInfo.id,\n name: fsInfo.name,\n provider: fsInfo.provider,\n status: fsInfo.status,\n error: fsInfo.error,\n readOnly: fsInfo.readOnly,\n icon: fsInfo.icon,\n metadata: fsInfo.metadata,\n }\n : undefined,\n mounts,\n };\n } catch (error) {\n return handleWorkspaceError(error, 'Error getting workspace info');\n }\n },\n});\n\n// =============================================================================\n// Filesystem Routes\n// =============================================================================\n\nexport const WORKSPACE_FS_READ_ROUTE = createRoute({\n method: 'GET',\n path: '/workspaces/:workspaceId/fs/read',\n responseType: 'json',\n pathParamSchema: workspaceIdPathParams,\n queryParamSchema: fsReadQuerySchema,\n responseSchema: fsReadResponseSchema,\n summary: 'Read file content',\n description: 'Returns the content of a file at the specified path',\n tags: ['Workspace'],\n handler: async ({ mastra, path, encoding, workspaceId }) => {\n try {\n requireWorkspaceV1Support();\n\n if (!path) {\n throw new HTTPException(400, { message: 'Path is required' });\n }\n\n const workspace = await getWorkspaceById(mastra, workspaceId);\n if (!workspace?.filesystem) {\n throw new HTTPException(404, { message: 'No workspace filesystem configured' });\n }\n\n const decodedPath = decodeURIComponent(path);\n\n // Check if path exists\n if (!(await workspace.filesystem.exists(decodedPath))) {\n throw new HTTPException(404, { message: `Path \"${decodedPath}\" not found` });\n }\n\n // Read file content\n const content = await workspace.filesystem.readFile(decodedPath, {\n encoding: (encoding as BufferEncoding) || 'utf-8',\n });\n\n return {\n path: decodedPath,\n content: typeof content === 'string' ? content : content.toString('utf-8'),\n type: 'file' as const,\n };\n } catch (error) {\n return handleWorkspaceError(error, 'Error reading file');\n }\n },\n});\n\nexport const WORKSPACE_FS_WRITE_ROUTE = createRoute({\n method: 'POST',\n path: '/workspaces/:workspaceId/fs/write',\n responseType: 'json',\n pathParamSchema: workspaceIdPathParams,\n bodySchema: fsWriteBodySchema,\n responseSchema: fsWriteResponseSchema,\n summary: 'Write file content',\n description: 'Writes content to a file at the specified path. Supports base64 encoding for binary files.',\n tags: ['Workspace'],\n handler: async ({ mastra, path, content, encoding, recursive, workspaceId }) => {\n try {\n requireWorkspaceV1Support();\n\n if (!path || content === undefined) {\n throw new HTTPException(400, { message: 'Path and content are required' });\n }\n\n const workspace = await getWorkspaceById(mastra, workspaceId);\n if (!workspace?.filesystem) {\n throw new HTTPException(404, { message: 'No workspace filesystem configured' });\n }\n\n if (workspace.filesystem?.readOnly) {\n throw new HTTPException(403, { message: 'Workspace is in read-only mode' });\n }\n\n const decodedPath = decodeURIComponent(path);\n\n // Handle base64-encoded content for binary files\n let fileContent: string | Buffer = content;\n if (encoding === 'base64') {\n fileContent = Buffer.from(content, 'base64');\n }\n\n await workspace.filesystem.writeFile(decodedPath, fileContent, { recursive: recursive ?? true });\n\n return {\n success: true,\n path: decodedPath,\n };\n } catch (error) {\n return handleWorkspaceError(error, 'Error writing file');\n }\n },\n});\n\nexport const WORKSPACE_FS_LIST_ROUTE = createRoute({\n method: 'GET',\n path: '/workspaces/:workspaceId/fs/list',\n responseType: 'json',\n pathParamSchema: workspaceIdPathParams,\n queryParamSchema: fsListQuerySchema,\n responseSchema: fsListResponseSchema,\n summary: 'List directory contents',\n description: 'Returns a list of files and directories at the specified path',\n tags: ['Workspace'],\n handler: async ({ mastra, path, recursive, workspaceId }) => {\n try {\n requireWorkspaceV1Support();\n\n if (!path) {\n throw new HTTPException(400, { message: 'Path is required' });\n }\n\n const workspace = await getWorkspaceById(mastra, workspaceId);\n if (!workspace?.filesystem) {\n return {\n path: decodeURIComponent(path),\n entries: [],\n error: 'No workspace filesystem configured',\n };\n }\n\n const decodedPath = decodeURIComponent(path);\n\n // Check if path exists\n if (!(await workspace.filesystem.exists(decodedPath))) {\n throw new HTTPException(404, { message: `Path \"${decodedPath}\" not found` });\n }\n\n const entries = await workspace.filesystem.readdir(decodedPath, { recursive });\n\n return {\n path: decodedPath,\n entries,\n };\n } catch (error) {\n return handleWorkspaceError(error, 'Error listing directory');\n }\n },\n});\n\nexport const WORKSPACE_FS_DELETE_ROUTE = createRoute({\n method: 'DELETE',\n path: '/workspaces/:workspaceId/fs/delete',\n responseType: 'json',\n pathParamSchema: workspaceIdPathParams,\n queryParamSchema: fsDeleteQuerySchema,\n responseSchema: fsDeleteResponseSchema,\n summary: 'Delete file or directory',\n description: 'Deletes a file or directory at the specified path',\n tags: ['Workspace'],\n handler: async ({ mastra, path, recursive, force, workspaceId }) => {\n try {\n requireWorkspaceV1Support();\n\n if (!path) {\n throw new HTTPException(400, { message: 'Path is required' });\n }\n\n const workspace = await getWorkspaceById(mastra, workspaceId);\n if (!workspace?.filesystem) {\n throw new HTTPException(404, { message: 'No workspace filesystem configured' });\n }\n\n if (workspace.filesystem?.readOnly) {\n throw new HTTPException(403, { message: 'Workspace is in read-only mode' });\n }\n\n const decodedPath = decodeURIComponent(path);\n\n // Check if path exists (unless force is true)\n const exists = await workspace.filesystem.exists(decodedPath);\n if (!exists && !force) {\n throw new HTTPException(404, { message: `Path \"${decodedPath}\" not found` });\n }\n\n if (exists) {\n // Try to delete as file first, then as directory\n try {\n await workspace.filesystem.deleteFile(decodedPath, { force });\n } catch {\n await workspace.filesystem.rmdir(decodedPath, { recursive, force });\n }\n }\n\n return {\n success: true,\n path: decodedPath,\n };\n } catch (error) {\n return handleWorkspaceError(error, 'Error deleting path');\n }\n },\n});\n\nexport const WORKSPACE_FS_MKDIR_ROUTE = createRoute({\n method: 'POST',\n path: '/workspaces/:workspaceId/fs/mkdir',\n responseType: 'json',\n pathParamSchema: workspaceIdPathParams,\n bodySchema: fsMkdirBodySchema,\n responseSchema: fsMkdirResponseSchema,\n summary: 'Create directory',\n description: 'Creates a directory at the specified path',\n tags: ['Workspace'],\n handler: async ({ mastra, path, recursive, workspaceId }) => {\n try {\n requireWorkspaceV1Support();\n\n if (!path) {\n throw new HTTPException(400, { message: 'Path is required' });\n }\n\n const workspace = await getWorkspaceById(mastra, workspaceId);\n if (!workspace?.filesystem) {\n throw new HTTPException(404, { message: 'No workspace filesystem configured' });\n }\n\n if (workspace.filesystem?.readOnly) {\n throw new HTTPException(403, { message: 'Workspace is in read-only mode' });\n }\n\n const decodedPath = decodeURIComponent(path);\n\n await workspace.filesystem.mkdir(decodedPath, { recursive: recursive ?? true });\n\n return {\n success: true,\n path: decodedPath,\n };\n } catch (error) {\n return handleWorkspaceError(error, 'Error creating directory');\n }\n },\n});\n\nexport const WORKSPACE_FS_STAT_ROUTE = createRoute({\n method: 'GET',\n path: '/workspaces/:workspaceId/fs/stat',\n responseType: 'json',\n pathParamSchema: workspaceIdPathParams,\n queryParamSchema: fsStatQuerySchema,\n responseSchema: fsStatResponseSchema,\n summary: 'Get file/directory info',\n description: 'Returns metadata about a file or directory',\n tags: ['Workspace'],\n handler: async ({ mastra, path, workspaceId }) => {\n try {\n requireWorkspaceV1Support();\n\n if (!path) {\n throw new HTTPException(400, { message: 'Path is required' });\n }\n\n const workspace = await getWorkspaceById(mastra, workspaceId);\n if (!workspace?.filesystem) {\n throw new HTTPException(404, { message: 'No workspace filesystem configured' });\n }\n\n const decodedPath = decodeURIComponent(path);\n\n // Check if path exists\n if (!(await workspace.filesystem.exists(decodedPath))) {\n throw new HTTPException(404, { message: `Path \"${decodedPath}\" not found` });\n }\n\n const stat = await workspace.filesystem.stat(decodedPath);\n\n return {\n path: stat.path,\n type: stat.type,\n size: stat.size,\n createdAt: stat.createdAt?.toISOString(),\n modifiedAt: stat.modifiedAt?.toISOString(),\n mimeType: stat.mimeType,\n };\n } catch (error) {\n return handleWorkspaceError(error, 'Error getting file info');\n }\n },\n});\n\n// =============================================================================\n// Search Routes\n// =============================================================================\n\nexport const WORKSPACE_SEARCH_ROUTE = createRoute({\n method: 'GET',\n path: '/workspaces/:workspaceId/search',\n responseType: 'json',\n pathParamSchema: workspaceIdPathParams,\n queryParamSchema: searchQuerySchema,\n responseSchema: searchResponseSchema,\n summary: 'Search workspace content',\n description: 'Searches across indexed workspace content using BM25, vector, or hybrid search',\n tags: ['Workspace'],\n handler: async ({ mastra, query, topK, mode, minScore, workspaceId }) => {\n try {\n requireWorkspaceV1Support();\n\n if (!query) {\n throw new HTTPException(400, { message: 'Search query is required' });\n }\n\n const workspace = await getWorkspaceById(mastra, workspaceId);\n if (!workspace) {\n return {\n results: [],\n query,\n mode: mode || 'bm25',\n };\n }\n\n // Check search capabilities\n const canSearch = workspace.canBM25 || workspace.canVector;\n if (!canSearch) {\n return {\n results: [],\n query,\n mode: mode || 'bm25',\n };\n }\n\n // Determine search mode based on capabilities\n let searchMode = mode;\n if (!searchMode) {\n if (workspace.canHybrid) {\n searchMode = 'hybrid';\n } else if (workspace.canVector) {\n searchMode = 'vector';\n } else {\n searchMode = 'bm25';\n }\n }\n\n const results = await workspace.search(query, {\n topK: topK || 5,\n mode: searchMode,\n minScore,\n });\n\n return {\n results: results.map(r => ({\n id: r.id,\n content: r.content,\n score: r.score,\n lineRange: r.lineRange,\n scoreDetails: r.scoreDetails,\n })),\n query,\n mode: searchMode,\n };\n } catch (error) {\n return handleWorkspaceError(error, 'Error searching workspace');\n }\n },\n});\n\nexport const WORKSPACE_INDEX_ROUTE = createRoute({\n method: 'POST',\n path: '/workspaces/:workspaceId/index',\n responseType: 'json',\n pathParamSchema: workspaceIdPathParams,\n bodySchema: indexBodySchema,\n responseSchema: indexResponseSchema,\n summary: 'Index content for search',\n description: 'Indexes content for later search operations',\n tags: ['Workspace'],\n handler: async ({ mastra, path, content, metadata, workspaceId }) => {\n try {\n requireWorkspaceV1Support();\n\n if (!path || content === undefined) {\n throw new HTTPException(400, { message: 'Path and content are required' });\n }\n\n const workspace = await getWorkspaceById(mastra, workspaceId);\n if (!workspace) {\n throw new HTTPException(404, { message: 'No workspace configured' });\n }\n\n const canSearch = workspace.canBM25 || workspace.canVector;\n if (!canSearch) {\n throw new HTTPException(400, { message: 'Workspace does not have search configured' });\n }\n\n await workspace.index(path, content, { metadata });\n\n return {\n success: true,\n path,\n };\n } catch (error) {\n return handleWorkspaceError(error, 'Error indexing content');\n }\n },\n});\n\n// =============================================================================\n// Skills Routes (under /workspaces/:workspaceId/skills)\n// =============================================================================\n\n/** Path prefix for skills installed via skills.sh (with trailing slash for prefix matching) */\nconst SKILLS_SH_PATH_PREFIX = `${SKILLS_SH_DIR}/`;\n\nexport const WORKSPACE_LIST_SKILLS_ROUTE = createRoute({\n method: 'GET',\n path: '/workspaces/:workspaceId/skills',\n responseType: 'json',\n pathParamSchema: workspaceIdPathParams,\n responseSchema: listSkillsResponseSchema,\n summary: 'List all skills',\n description: 'Returns a list of all discovered skills with their metadata',\n tags: ['Workspace', 'Skills'],\n handler: async ({ mastra, workspaceId, requestContext }) => {\n try {\n requireWorkspaceV1Support();\n\n const workspace = await getWorkspaceById(mastra, workspaceId);\n const skills = workspace?.skills;\n if (!skills) {\n return { skills: [], isSkillsConfigured: false };\n }\n\n // Refresh skills with request context (handles dynamic skill resolvers)\n await skills.maybeRefresh({ requestContext });\n\n const skillsList = await skills.list();\n\n // Get full skill details to include path in response\n // Handle individual skill fetch failures gracefully to avoid failing the entire list\n const skillsWithPath = await Promise.all(\n skillsList.map(async skillMeta => {\n let path = '';\n let skillsShSource: { owner: string; repo: string } | undefined;\n\n try {\n const fullSkill = await skills.get(skillMeta.name);\n path = fullSkill?.path ?? '';\n\n // For skills installed via skills.sh, read source info from .meta.json.\n // Uses includes() because glob-discovered paths may have a leading slash\n // or be nested (e.g., '/.agents/skills/foo', '/src/.agents/skills/foo').\n if (path.includes(SKILLS_SH_PATH_PREFIX) && workspace.filesystem) {\n try {\n const metaPath = `${path}/.meta.json`;\n const metaContent = await workspace.filesystem.readFile(metaPath);\n const metaText = typeof metaContent === 'string' ? metaContent : metaContent.toString('utf-8');\n const meta = JSON.parse(metaText) as { owner?: string; repo?: string };\n if (meta.owner && meta.repo) {\n skillsShSource = { owner: meta.owner, repo: meta.repo };\n }\n } catch {\n // .meta.json might not exist or be invalid - that's ok\n }\n }\n } catch {\n // Fall back to empty path if skill details can't be loaded\n }\n\n return {\n name: skillMeta.name,\n description: skillMeta.description,\n license: skillMeta.license,\n compatibility: skillMeta.compatibility,\n metadata: skillMeta.metadata,\n path,\n skillsShSource,\n };\n }),\n );\n\n return {\n skills: skillsWithPath,\n isSkillsConfigured: true,\n };\n } catch (error) {\n return handleWorkspaceError(error, 'Error listing skills');\n }\n },\n});\n\nexport const WORKSPACE_GET_SKILL_ROUTE = createRoute({\n method: 'GET',\n path: '/workspaces/:workspaceId/skills/:skillName',\n responseType: 'json',\n pathParamSchema: skillNamePathParams,\n responseSchema: getSkillResponseSchema,\n summary: 'Get skill details',\n description: 'Returns the full details of a specific skill including instructions and file lists',\n tags: ['Workspace', 'Skills'],\n handler: async ({ mastra, skillName, workspaceId, requestContext }) => {\n try {\n requireWorkspaceV1Support();\n\n if (!skillName) {\n throw new HTTPException(400, { message: 'Skill name is required' });\n }\n\n const skills = await getSkillsById(mastra, workspaceId);\n if (!skills) {\n throw new HTTPException(404, { message: 'No workspace with skills configured' });\n }\n\n // Refresh skills with request context (handles dynamic skill resolvers)\n await skills.maybeRefresh({ requestContext });\n\n const skill = await skills.get(skillName);\n if (!skill) {\n throw new HTTPException(404, { message: `Skill \"${skillName}\" not found` });\n }\n\n return {\n name: skill.name,\n description: skill.description,\n license: skill.license,\n compatibility: skill.compatibility,\n metadata: skill.metadata,\n path: skill.path,\n instructions: skill.instructions,\n source: skill.source,\n references: skill.references,\n scripts: skill.scripts,\n assets: skill.assets,\n };\n } catch (error) {\n return handleWorkspaceError(error, 'Error getting skill');\n }\n },\n});\n\nexport const WORKSPACE_LIST_SKILL_REFERENCES_ROUTE = createRoute({\n method: 'GET',\n path: '/workspaces/:workspaceId/skills/:skillName/references',\n responseType: 'json',\n pathParamSchema: skillNamePathParams,\n responseSchema: listReferencesResponseSchema,\n summary: 'List skill references',\n description: 'Returns a list of all reference file paths for a skill',\n tags: ['Workspace', 'Skills'],\n handler: async ({ mastra, skillName, workspaceId, requestContext }) => {\n try {\n requireWorkspaceV1Support();\n\n if (!skillName) {\n throw new HTTPException(400, { message: 'Skill name is required' });\n }\n\n const skills = await getSkillsById(mastra, workspaceId);\n if (!skills) {\n throw new HTTPException(404, { message: 'No workspace with skills configured' });\n }\n\n // Refresh skills with request context (handles dynamic skill resolvers)\n await skills.maybeRefresh({ requestContext });\n\n const hasSkill = await skills.has(skillName);\n if (!hasSkill) {\n throw new HTTPException(404, { message: `Skill \"${skillName}\" not found` });\n }\n\n const references = await skills.listReferences(skillName);\n\n return {\n skillName,\n references,\n };\n } catch (error) {\n return handleWorkspaceError(error, 'Error listing skill references');\n }\n },\n});\n\nexport const WORKSPACE_GET_SKILL_REFERENCE_ROUTE = createRoute({\n method: 'GET',\n path: '/workspaces/:workspaceId/skills/:skillName/references/:referencePath',\n responseType: 'json',\n pathParamSchema: skillReferencePathParams,\n responseSchema: skillReferenceResponseSchema,\n summary: 'Get skill reference content',\n description: 'Returns the content of a specific reference file from a skill',\n tags: ['Workspace', 'Skills'],\n handler: async ({ mastra, skillName, referencePath, workspaceId, requestContext }) => {\n try {\n requireWorkspaceV1Support();\n\n if (!skillName || !referencePath) {\n throw new HTTPException(400, { message: 'Skill name and reference path are required' });\n }\n\n const skills = await getSkillsById(mastra, workspaceId);\n if (!skills) {\n throw new HTTPException(404, { message: 'No workspace with skills configured' });\n }\n\n // Refresh skills with request context (handles dynamic skill resolvers)\n await skills.maybeRefresh({ requestContext });\n\n // Decode the reference path (it may be URL encoded)\n const decodedPath = decodeURIComponent(referencePath);\n\n // Prevent path traversal via the reference path parameter\n assertSafeFilePath(decodedPath);\n\n // getReference expects a path relative to skill.path, so prepend 'references/'\n // since the URL path already contains the literal /references/ segment\n const content = await skills.getReference(skillName, `references/${decodedPath}`);\n if (content === null) {\n throw new HTTPException(404, { message: `Reference \"${decodedPath}\" not found in skill \"${skillName}\"` });\n }\n\n return {\n skillName,\n referencePath: decodedPath,\n content,\n };\n } catch (error) {\n return handleWorkspaceError(error, 'Error getting skill reference');\n }\n },\n});\n\nexport const WORKSPACE_SEARCH_SKILLS_ROUTE = createRoute({\n method: 'GET',\n path: '/workspaces/:workspaceId/skills/search',\n responseType: 'json',\n pathParamSchema: workspaceIdPathParams,\n queryParamSchema: searchSkillsQuerySchema,\n responseSchema: searchSkillsResponseSchema,\n summary: 'Search skills',\n description: 'Searches across all skills content using BM25 keyword search',\n tags: ['Workspace', 'Skills'],\n handler: async ({ mastra, query, topK, minScore, skillNames, includeReferences, workspaceId, requestContext }) => {\n try {\n requireWorkspaceV1Support();\n\n if (!query) {\n throw new HTTPException(400, { message: 'Search query is required' });\n }\n\n const skills = await getSkillsById(mastra, workspaceId);\n if (!skills) {\n return {\n results: [],\n query,\n };\n }\n\n // Refresh skills with request context (handles dynamic skill resolvers)\n await skills.maybeRefresh({ requestContext });\n\n // Parse comma-separated skill names if provided\n const skillNamesList = skillNames ? skillNames.split(',').map((s: string) => s.trim()) : undefined;\n\n const results = await skills.search(query, {\n topK: topK || 5,\n minScore,\n skillNames: skillNamesList,\n includeReferences: includeReferences ?? true,\n });\n\n return {\n results: results.map(r => ({\n skillName: r.skillName,\n source: r.source,\n content: r.content,\n score: r.score,\n lineRange: r.lineRange,\n scoreDetails: r.scoreDetails,\n })),\n query,\n };\n } catch (error) {\n return handleWorkspaceError(error, 'Error searching skills');\n }\n },\n});\n\n// =============================================================================\n// skills.sh Proxy Routes\n// =============================================================================\n\nconst SKILLS_SH_API_URL = 'https://skills-api-production.up.railway.app';\n\nexport const WORKSPACE_SKILLS_SH_SEARCH_ROUTE = createRoute({\n method: 'GET',\n path: '/workspaces/:workspaceId/skills-sh/search',\n responseType: 'json',\n pathParamSchema: workspaceIdPathParams,\n queryParamSchema: skillsShSearchQuerySchema,\n responseSchema: skillsShSearchResponseSchema,\n summary: 'Search skills on skills.sh',\n description: 'Proxies search requests to skills.sh API to avoid CORS issues',\n tags: ['Workspace', 'Skills'],\n handler: async ({ q, limit }) => {\n try {\n const controller = new AbortController();\n const timeoutId = setTimeout(() => controller.abort(), 10000);\n\n const url = `${SKILLS_SH_API_URL}/api/skills?query=${encodeURIComponent(q)}&pageSize=${limit}`;\n const response = await fetch(url, { signal: controller.signal });\n clearTimeout(timeoutId);\n\n if (!response.ok) {\n throw new HTTPException(502, {\n message: `Skills API error: ${response.status} ${response.statusText}`,\n });\n }\n\n const data = (await response.json()) as {\n skills: Array<{\n skillId: string;\n name: string;\n installs: number;\n source: string;\n owner: string;\n repo: string;\n githubUrl: string;\n displayName: string;\n }>;\n total: number;\n page: number;\n pageSize: number;\n totalPages: number;\n };\n return {\n query: q,\n searchType: 'query',\n skills: data.skills.map(s => ({ id: s.skillId, name: s.name, installs: s.installs, topSource: s.source })),\n count: data.total,\n };\n } catch (error) {\n if (error instanceof HTTPException) {\n throw error;\n }\n return handleError(error, 'Error searching skills');\n }\n },\n});\n\nexport const WORKSPACE_SKILLS_SH_POPULAR_ROUTE = createRoute({\n method: 'GET',\n path: '/workspaces/:workspaceId/skills-sh/popular',\n responseType: 'json',\n pathParamSchema: workspaceIdPathParams,\n queryParamSchema: skillsShPopularQuerySchema,\n responseSchema: skillsShListResponseSchema,\n summary: 'Get popular skills from skills.sh',\n description: 'Proxies popular skills requests to skills.sh API to avoid CORS issues',\n tags: ['Workspace', 'Skills'],\n handler: async ({ limit, offset }) => {\n try {\n const controller = new AbortController();\n const timeoutId = setTimeout(() => controller.abort(), 10000);\n\n const page = offset > 0 ? Math.floor(offset / limit) + 1 : 1;\n const url = `${SKILLS_SH_API_URL}/api/skills/top?pageSize=${limit}&page=${page}`;\n const response = await fetch(url, { signal: controller.signal });\n clearTimeout(timeoutId);\n\n if (!response.ok) {\n throw new HTTPException(502, {\n message: `Skills API error: ${response.status} ${response.statusText}`,\n });\n }\n\n const data = (await response.json()) as {\n skills: Array<{\n skillId: string;\n name: string;\n installs: number;\n source: string;\n owner: string;\n repo: string;\n githubUrl: string;\n displayName: string;\n }>;\n total: number;\n };\n return {\n skills: data.skills.map(s => ({ id: s.skillId, name: s.name, installs: s.installs, topSource: s.source })),\n count: data.total,\n limit,\n offset,\n };\n } catch (error) {\n if (error instanceof HTTPException) {\n throw error;\n }\n return handleError(error, 'Error fetching popular skills');\n }\n },\n});\n\n// =============================================================================\n// Skills API helpers\n// =============================================================================\n\n/**\n * Validate skill name to prevent path traversal attacks.\n * Only allows alphanumeric characters, hyphens, and underscores.\n */\nconst SKILL_NAME_REGEX = /^[a-z0-9][a-z0-9-_]*$/i;\n\nfunction assertSafeSkillName(name: string): string {\n if (!SKILL_NAME_REGEX.test(name)) {\n throw new HTTPException(400, {\n message: `Invalid skill name \"${name}\". Names must start with alphanumeric and contain only letters, numbers, hyphens, and underscores.`,\n });\n }\n return name;\n}\n\n/**\n * Validate that a file path is safe (no traversal, no absolute paths).\n * Prevents malicious API responses from writing files outside the skill directory.\n */\nfunction assertSafeFilePath(filePath: string): string {\n // Reject absolute paths\n if (filePath.startsWith('/') || /^[a-zA-Z]:/.test(filePath)) {\n throw new HTTPException(400, {\n message: `Invalid file path \"${filePath}\". Absolute paths are not allowed.`,\n });\n }\n // Reject path traversal attempts\n const segments = filePath.split('/');\n for (const segment of segments) {\n if (segment === '..' || segment === '.') {\n throw new HTTPException(400, {\n message: `Invalid file path \"${filePath}\". Path traversal is not allowed.`,\n });\n }\n }\n return filePath;\n}\n\ninterface SkillFileEntry {\n path: string;\n content: string;\n encoding: 'utf-8' | 'base64';\n}\n\ninterface SkillFilesResponse {\n skillId: string;\n owner: string;\n repo: string;\n branch: string;\n files: SkillFileEntry[];\n}\n\n/**\n * Fetch skill files from the Skills API.\n * Returns all files for a skill with their content.\n */\nasync function fetchSkillFiles(owner: string, repo: string, skillName: string): Promise<SkillFilesResponse | null> {\n const controller = new AbortController();\n const timeoutId = setTimeout(() => controller.abort(), 30000); // 30s for file downloads\n\n const url = `${SKILLS_SH_API_URL}/api/skills/${encodeURIComponent(owner)}/${encodeURIComponent(repo)}/${encodeURIComponent(skillName)}/files`;\n const response = await fetch(url, { signal: controller.signal });\n clearTimeout(timeoutId);\n\n if (!response.ok) {\n if (response.status === 404) {\n return null;\n }\n throw new Error(`Skills API error: ${response.status} ${response.statusText}`);\n }\n\n return (await response.json()) as SkillFilesResponse;\n}\n\n// =============================================================================\n// skills.sh Preview Route\n// =============================================================================\n\nexport const WORKSPACE_SKILLS_SH_PREVIEW_ROUTE = createRoute({\n method: 'GET',\n path: '/workspaces/:workspaceId/skills-sh/preview',\n responseType: 'json',\n pathParamSchema: workspaceIdPathParams,\n queryParamSchema: skillsShPreviewQuerySchema,\n responseSchema: skillsShPreviewResponseSchema,\n summary: 'Preview skill content',\n description: 'Fetches the skill content from the Skills API.',\n tags: ['Workspace', 'Skills'],\n handler: async ({ owner, repo, path: skillName }) => {\n try {\n const controller = new AbortController();\n const timeoutId = setTimeout(() => controller.abort(), 10000);\n\n const url = `${SKILLS_SH_API_URL}/api/skills/${encodeURIComponent(owner)}/${encodeURIComponent(repo)}/${encodeURIComponent(skillName)}/content`;\n const response = await fetch(url, { signal: controller.signal });\n clearTimeout(timeoutId);\n\n if (!response.ok) {\n throw new HTTPException(404, {\n message: `Could not find skill \"${skillName}\" for ${owner}/${repo}`,\n });\n }\n\n const data = (await response.json()) as { instructions: string; raw: string };\n const content = data.instructions || data.raw || '';\n\n if (!content) {\n throw new HTTPException(404, {\n message: `No content available for skill \"${skillName}\"`,\n });\n }\n\n return { content };\n } catch (error) {\n if (error instanceof HTTPException) {\n throw error;\n }\n return handleError(error, 'Error fetching skill preview');\n }\n },\n});\n\n// =============================================================================\n// skills.sh Install Route\n// =============================================================================\n\nexport const WORKSPACE_SKILLS_SH_INSTALL_ROUTE = createRoute({\n method: 'POST',\n path: '/workspaces/:workspaceId/skills-sh/install',\n responseType: 'json',\n pathParamSchema: workspaceIdPathParams,\n bodySchema: skillsShInstallBodySchema,\n responseSchema: skillsShInstallResponseSchema,\n summary: 'Install skill from Skills API',\n description: 'Installs a skill by fetching files from the Skills API and writing to workspace filesystem.',\n tags: ['Workspace', 'Skills'],\n handler: async ({ mastra, workspaceId, owner, repo, skillName, mount }) => {\n try {\n requireWorkspaceV1Support();\n\n const workspace = await getWorkspaceById(mastra, workspaceId);\n if (!workspace) {\n throw new HTTPException(404, { message: 'Workspace not found' });\n }\n\n if (!workspace.filesystem) {\n throw new HTTPException(400, { message: 'Workspace filesystem not available' });\n }\n\n if (workspace.filesystem.readOnly) {\n throw new HTTPException(403, { message: 'Workspace is read-only' });\n }\n\n // Fetch skill files from the Skills API\n const result = await fetchSkillFiles(owner, repo, skillName);\n if (!result || result.files.length === 0) {\n throw new HTTPException(404, {\n message: `Could not find skill \"${skillName}\" in ${owner}/${repo}.`,\n });\n }\n\n // Validate skill name to prevent path traversal\n const safeSkillId = assertSafeSkillName(result.skillId);\n const installPath = buildSkillInstallPath(workspace.filesystem, safeSkillId, mount);\n\n // Ensure the skills directory exists\n try {\n await workspace.filesystem.mkdir(installPath, { recursive: true });\n } catch {\n // Directory might already exist\n }\n\n // Write all files to the workspace\n let filesWritten = 0;\n for (const file of result.files) {\n // Validate file path to prevent path traversal from API response\n const safePath = assertSafeFilePath(file.path);\n const filePath = `${installPath}/${safePath}`;\n\n // Create subdirectory if needed\n if (safePath.includes('/')) {\n const dirPath = filePath.substring(0, filePath.lastIndexOf('/'));\n try {\n await workspace.filesystem.mkdir(dirPath, { recursive: true });\n } catch {\n // Directory might already exist\n }\n }\n\n const content = file.encoding === 'base64' ? Buffer.from(file.content, 'base64') : file.content;\n await workspace.filesystem.writeFile(filePath, content);\n filesWritten++;\n }\n\n // Write metadata file for update support\n const metadata = {\n skillName: result.skillId,\n owner: result.owner,\n repo: result.repo,\n branch: result.branch,\n installedAt: new Date().toISOString(),\n };\n await workspace.filesystem.writeFile(`${installPath}/.meta.json`, JSON.stringify(metadata, null, 2));\n filesWritten++;\n\n // Surgically update the skills cache for the newly installed skill\n if (workspace.skills?.addSkill) {\n try {\n await workspace.skills.addSkill(installPath);\n } catch (cacheError) {\n console.warn(\n `[skills-sh] Failed to update cache after install: ${cacheError instanceof Error ? cacheError.message : String(cacheError)}`,\n );\n }\n }\n\n return {\n success: true,\n skillName: result.skillId,\n installedPath: installPath,\n filesWritten,\n };\n } catch (error) {\n if (error instanceof HTTPException) {\n throw error;\n }\n return handleError(error, 'Error installing skill');\n }\n },\n});\n\n/**\n * Interface for skill metadata stored in .meta.json\n */\ninterface SkillMetaFile {\n skillName: string;\n owner: string;\n repo: string;\n branch: string;\n installedAt: string;\n}\n\nexport const WORKSPACE_SKILLS_SH_REMOVE_ROUTE = createRoute({\n method: 'POST',\n path: '/workspaces/:workspaceId/skills-sh/remove',\n responseType: 'json',\n pathParamSchema: workspaceIdPathParams,\n bodySchema: skillsShRemoveBodySchema,\n responseSchema: skillsShRemoveResponseSchema,\n summary: 'Remove an installed skill',\n description: 'Removes an installed skill by deleting its directory. Does not require sandbox.',\n tags: ['Workspace', 'Skills'],\n handler: async ({ mastra, workspaceId, skillName }) => {\n try {\n requireWorkspaceV1Support();\n\n const workspace = await getWorkspaceById(mastra, workspaceId);\n if (!workspace) {\n throw new HTTPException(404, { message: 'Workspace not found' });\n }\n\n if (!workspace.filesystem) {\n throw new HTTPException(400, { message: 'Workspace filesystem not available' });\n }\n\n if (workspace.filesystem.readOnly) {\n throw new HTTPException(403, { message: 'Workspace is read-only' });\n }\n\n // Validate skill name to prevent path traversal\n const safeSkillName = assertSafeSkillName(skillName);\n\n // Look up the skill's actual path from the cache (supports glob-discovered skills).\n // Only use the discovered path if it's under the skills.sh directory to avoid\n // accidentally deleting a locally-authored skill with the same name.\n const skill = await workspace.skills?.get(safeSkillName);\n const discoveredPath = skill?.path;\n const skillPath =\n discoveredPath && discoveredPath.includes(SKILLS_SH_PATH_PREFIX)\n ? discoveredPath\n : buildSkillInstallPath(workspace.filesystem, safeSkillName);\n\n // Check if skill exists on filesystem\n try {\n await workspace.filesystem.stat(skillPath);\n } catch {\n throw new HTTPException(404, { message: `Skill \"${skillName}\" not found at ${skillPath}` });\n }\n\n // Delete the skill directory\n await workspace.filesystem.rmdir(skillPath, { recursive: true });\n\n // Surgically remove the skill from the cache\n if (workspace.skills?.removeSkill) {\n try {\n await workspace.skills.removeSkill(safeSkillName);\n } catch (cacheError) {\n console.warn(\n `[skills-sh] Failed to update cache after remove: ${cacheError instanceof Error ? cacheError.message : String(cacheError)}`,\n );\n }\n }\n\n return {\n success: true,\n skillName,\n removedPath: skillPath,\n };\n } catch (error) {\n if (error instanceof HTTPException) {\n throw error;\n }\n return handleError(error, 'Error removing skill');\n }\n },\n});\n\nexport const WORKSPACE_SKILLS_SH_UPDATE_ROUTE = createRoute({\n method: 'POST',\n path: '/workspaces/:workspaceId/skills-sh/update',\n responseType: 'json',\n pathParamSchema: workspaceIdPathParams,\n bodySchema: skillsShUpdateBodySchema,\n responseSchema: skillsShUpdateResponseSchema,\n summary: 'Update installed skills',\n description:\n 'Updates installed skills by re-fetching from GitHub. Specify skillName to update one, or omit to update all.',\n tags: ['Workspace', 'Skills'],\n handler: async ({ mastra, workspaceId, skillName }) => {\n try {\n requireWorkspaceV1Support();\n\n const workspace = await getWorkspaceById(mastra, workspaceId);\n if (!workspace) {\n throw new HTTPException(404, { message: 'Workspace not found' });\n }\n\n if (!workspace.filesystem) {\n throw new HTTPException(400, { message: 'Workspace filesystem not available' });\n }\n\n if (workspace.filesystem.readOnly) {\n throw new HTTPException(403, { message: 'Workspace is read-only' });\n }\n\n const results: Array<{\n skillName: string;\n success: boolean;\n filesWritten?: number;\n error?: string;\n }> = [];\n\n // Build list of { skillName, basePath } entries to update.\n // basePath is the parent of the skill directory (e.g., `.agents/skills`).\n let skillsToUpdate: Array<{ name: string; basePath: string }>;\n\n if (skillName) {\n const safeName = assertSafeSkillName(skillName);\n\n // Try to find the installed path via discovery first\n const discoveredSkill = await workspace.skills?.get(safeName);\n let basePath: string;\n if (discoveredSkill?.path && discoveredSkill.path.includes(SKILLS_SH_PATH_PREFIX)) {\n // Derive basePath by removing the skill name suffix from the discovered path\n basePath = discoveredSkill.path.substring(0, discoveredSkill.path.lastIndexOf('/'));\n } else {\n basePath = SKILLS_SH_DIR;\n }\n skillsToUpdate = [{ name: safeName, basePath }];\n } else {\n // Update all: scan `.agents/skills` under each writable mount (or just SKILLS_SH_DIR)\n skillsToUpdate = [];\n const dirsToScan: string[] = [];\n\n if (isCompositeFilesystem(workspace.filesystem)) {\n for (const [mountPath, mountFs] of workspace.filesystem.mounts) {\n if (!mountFs.readOnly) {\n dirsToScan.push(`${stripTrailingSlash(mountPath)}/${SKILLS_SH_DIR}`);\n }\n }\n } else {\n dirsToScan.push(SKILLS_SH_DIR);\n }\n\n for (const dir of dirsToScan) {\n try {\n const entries = await workspace.filesystem.readdir(dir);\n for (const e of entries) {\n if (e.type === 'directory') {\n skillsToUpdate.push({ name: e.name, basePath: dir });\n }\n }\n } catch {\n // Directory doesn't exist or isn't readable - skip\n }\n }\n\n if (skillsToUpdate.length === 0) {\n return { updated: [] };\n }\n }\n\n for (const { name: skill, basePath } of skillsToUpdate) {\n // Validate each skill name for safety\n try {\n assertSafeSkillName(skill);\n } catch {\n results.push({\n skillName: skill,\n success: false,\n error: 'Invalid skill name',\n });\n continue;\n }\n const installPath = `${basePath}/${skill}`;\n const metaPath = `${installPath}/.meta.json`;\n try {\n const metaContent = await workspace.filesystem.readFile(metaPath, { encoding: 'utf-8' });\n const meta: SkillMetaFile = JSON.parse(metaContent as string);\n\n // Re-fetch skill files from the Skills API\n const fetchResult = await fetchSkillFiles(meta.owner, meta.repo, meta.skillName);\n\n if (!fetchResult || fetchResult.files.length === 0) {\n results.push({\n skillName: skill,\n success: false,\n error: 'No files found in skill directory',\n });\n continue;\n }\n\n let filesWritten = 0;\n\n for (const file of fetchResult.files) {\n // Validate file path to prevent path traversal from API response\n const safePath = assertSafeFilePath(file.path);\n const filePath = `${installPath}/${safePath}`;\n\n if (safePath.includes('/')) {\n const dirPath = filePath.substring(0, filePath.lastIndexOf('/'));\n try {\n await workspace.filesystem.mkdir(dirPath, { recursive: true });\n } catch {\n // Directory might already exist\n }\n }\n\n const content = file.encoding === 'base64' ? Buffer.from(file.content, 'base64') : file.content;\n await workspace.filesystem.writeFile(filePath, content);\n filesWritten++;\n }\n\n // Update metadata with new install time and branch\n const updatedMeta: SkillMetaFile = {\n ...meta,\n branch: fetchResult.branch,\n installedAt: new Date().toISOString(),\n };\n await workspace.filesystem.writeFile(metaPath, JSON.stringify(updatedMeta, null, 2));\n filesWritten++;\n\n // Surgically update the skills cache for the updated skill\n if (workspace.skills?.addSkill) {\n try {\n await workspace.skills.addSkill(installPath);\n } catch (cacheError) {\n console.warn(\n `[skills-sh] Failed to update cache after update: ${cacheError instanceof Error ? cacheError.message : String(cacheError)}`,\n );\n }\n }\n\n results.push({\n skillName: skill,\n success: true,\n filesWritten,\n });\n } catch (error) {\n results.push({\n skillName: skill,\n success: false,\n error: error instanceof Error ? error.message : 'Unknown error',\n });\n }\n }\n\n return { updated: results };\n } catch (error) {\n if (error instanceof HTTPException) {\n throw error;\n }\n return handleError(error, 'Error updating skills');\n }\n },\n});\n\nexport const WORKSPACE_SKILLS_SH_ROUTES = [\n WORKSPACE_SKILLS_SH_SEARCH_ROUTE,\n WORKSPACE_SKILLS_SH_POPULAR_ROUTE,\n WORKSPACE_SKILLS_SH_PREVIEW_ROUTE,\n WORKSPACE_SKILLS_SH_INSTALL_ROUTE,\n WORKSPACE_SKILLS_SH_REMOVE_ROUTE,\n WORKSPACE_SKILLS_SH_UPDATE_ROUTE,\n];\n\n// =============================================================================\n// Route Collections\n// =============================================================================\n\nexport const WORKSPACE_FS_ROUTES = [\n WORKSPACE_FS_READ_ROUTE,\n WORKSPACE_FS_WRITE_ROUTE,\n WORKSPACE_FS_LIST_ROUTE,\n WORKSPACE_FS_DELETE_ROUTE,\n WORKSPACE_FS_MKDIR_ROUTE,\n WORKSPACE_FS_STAT_ROUTE,\n];\n\nexport const WORKSPACE_SEARCH_ROUTES = [WORKSPACE_SEARCH_ROUTE, WORKSPACE_INDEX_ROUTE];\n\n// IMPORTANT: Search route must come before the parameterized routes\n// to avoid /api/workspace/skills/search being matched as /api/workspace/skills/:skillName\nexport const WORKSPACE_SKILLS_ROUTES = [\n WORKSPACE_SEARCH_SKILLS_ROUTE,\n WORKSPACE_LIST_SKILLS_ROUTE,\n WORKSPACE_GET_SKILL_ROUTE,\n WORKSPACE_LIST_SKILL_REFERENCES_ROUTE,\n WORKSPACE_GET_SKILL_REFERENCE_ROUTE,\n];\n"]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/server/handlers/memory.ts"],"names":[],"mappings":"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","file":"chunk-U67CHRAK.js","sourcesContent":["import type { Agent, MastraDBMessage } from '@mastra/core/agent';\nimport type { RequestContext } from '@mastra/core/di';\nimport type { MastraMemory } from '@mastra/core/memory';\nimport type { MastraStorage, MemoryStorage } from '@mastra/core/storage';\nimport { generateEmptyFromSchema } from '@mastra/core/utils';\nimport { HTTPException } from '../http-exception';\nimport {\n threadIdPathParams,\n agentIdQuerySchema,\n getMemoryStatusQuerySchema,\n getMemoryConfigQuerySchema,\n listThreadsQuerySchema,\n getThreadByIdQuerySchema,\n listMessagesQuerySchema,\n getWorkingMemoryQuerySchema,\n deleteThreadQuerySchema,\n deleteMessagesQuerySchema,\n getMemoryStatusNetworkQuerySchema,\n listThreadsNetworkQuerySchema,\n getThreadByIdNetworkQuerySchema,\n listMessagesNetworkQuerySchema,\n saveMessagesNetworkQuerySchema,\n createThreadNetworkQuerySchema,\n updateThreadNetworkQuerySchema,\n deleteThreadNetworkQuerySchema,\n deleteMessagesNetworkQuerySchema,\n memoryStatusResponseSchema,\n memoryConfigResponseSchema,\n listThreadsResponseSchema,\n getThreadByIdResponseSchema,\n listMessagesResponseSchema,\n getWorkingMemoryResponseSchema,\n saveMessagesBodySchema,\n createThreadBodySchema,\n updateThreadBodySchema,\n updateWorkingMemoryBodySchema,\n deleteMessagesBodySchema,\n searchMemoryQuerySchema,\n saveMessagesResponseSchema,\n updateWorkingMemoryResponseSchema,\n searchMemoryResponseSchema,\n deleteThreadResponseSchema,\n deleteMessagesResponseSchema,\n cloneThreadBodySchema,\n cloneThreadResponseSchema,\n getObservationalMemoryQuerySchema,\n getObservationalMemoryResponseSchema,\n awaitBufferStatusBodySchema,\n awaitBufferStatusResponseSchema,\n} from '../schemas/memory';\nimport { createRoute } from '../server-adapter/routes/route-builder';\nimport type { Context } from '../types';\n\nimport { handleError } from './error';\nimport { validateBody, getEffectiveResourceId, getEffectiveThreadId, validateThreadOwnership } from './utils';\n\ninterface MemoryContext extends Context {\n agentId?: string;\n resourceId?: string;\n threadId?: string;\n requestContext?: RequestContext;\n}\n\ninterface SearchResult {\n id: string;\n role: string;\n content: string;\n createdAt: Date;\n threadId?: string;\n threadTitle?: string;\n score?: number;\n context?: {\n before?: SearchResult[];\n after?: SearchResult[];\n };\n}\n\nexport function getTextContent(message: MastraDBMessage): string {\n if (typeof message.content === 'string') {\n return message.content;\n }\n if (message.content && typeof message.content === 'object' && 'parts' in message.content) {\n const textPart = message.content.parts.find(p => p.type === 'text');\n return textPart?.text || '';\n }\n return '';\n}\n\nasync function getMemoryFromContext({\n mastra,\n agentId,\n requestContext,\n}: Pick<MemoryContext, 'mastra' | 'agentId' | 'requestContext'>): Promise<MastraMemory | null | undefined> {\n const logger = mastra.getLogger();\n let agent;\n if (agentId) {\n try {\n agent = mastra.getAgentById(agentId);\n } catch (error) {\n logger.debug('Error getting agent from mastra, searching agents for agent', error);\n }\n }\n if (agentId && !agent) {\n logger.debug('Agent not found in registered agents, trying stored agents', { agentId });\n try {\n const storedAgent = (await mastra.getEditor()?.agent.getById(agentId)) ?? null;\n if (storedAgent) {\n agent = storedAgent;\n }\n } catch (error) {\n logger.debug('Error getting stored agent', error);\n }\n }\n\n if (agentId && !agent) {\n logger.debug('Stored agent not found, searching sub-agents', { agentId });\n const agents = mastra.listAgents();\n if (Object.keys(agents || {}).length) {\n for (const [_, ag] of Object.entries(agents)) {\n try {\n const subAgents = await ag.listAgents({ requestContext });\n\n if (subAgents[agentId]) {\n agent = subAgents[agentId];\n break;\n }\n } catch (error) {\n logger.debug('Error getting agent from agent', error);\n }\n }\n }\n\n if (!agent) {\n throw new HTTPException(404, { message: 'Agent not found' });\n }\n }\n\n if (agent) {\n return await agent?.getMemory({\n requestContext,\n });\n }\n}\n\n/**\n * Gets the storage from context, used as a fallback when no agentId is provided.\n * This allows fetching threads/messages without knowing which agents were involved.\n */\nfunction getStorageFromContext({ mastra }: Pick<MemoryContext, 'mastra'>): MastraStorage | undefined {\n return mastra.getStorage();\n}\n\n/**\n * Gets the agent from context for OM processor detection.\n */\nasync function getAgentFromContext({\n mastra,\n agentId,\n requestContext,\n}: Pick<MemoryContext, 'mastra' | 'agentId' | 'requestContext'>): Promise<Agent | null> {\n if (!agentId) return null;\n\n const logger = mastra.getLogger();\n let agent: Agent | null = null;\n\n // First try registered agents\n try {\n agent = mastra.getAgentById(agentId);\n } catch (error) {\n logger.debug('Error getting agent from mastra', error);\n }\n\n // Then try stored agents\n if (!agent) {\n logger.debug('Agent not found in registered agents, trying stored agents', { agentId });\n try {\n const storedAgent = (await mastra.getEditor()?.agent.getById(agentId)) ?? null;\n if (storedAgent) {\n agent = storedAgent;\n }\n } catch (error) {\n logger.debug('Error getting stored agent', error);\n }\n }\n\n // Finally search sub-agents with requestContext\n if (!agent) {\n logger.debug('Stored agent not found, searching sub-agents', { agentId });\n const agents = mastra.listAgents();\n if (Object.keys(agents || {}).length) {\n for (const [_, ag] of Object.entries(agents)) {\n try {\n const nestedAgents = await ag.listAgents({ requestContext });\n if (nestedAgents[agentId]) {\n agent = nestedAgents[agentId];\n break;\n }\n } catch (error) {\n logger.debug('Error getting agent from agent', error);\n }\n }\n }\n }\n\n return agent;\n}\n\n/**\n * Gets Observational Memory configuration from an agent's processors.\n * Returns null if OM is not enabled.\n */\nasync function getOMConfigFromAgent(\n agent: Agent,\n requestContext?: RequestContext,\n): Promise<{\n enabled: boolean;\n scope?: 'thread' | 'resource';\n shareTokenBudget?: boolean;\n messageTokens?: number | { min: number; max: number };\n observationTokens?: number | { min: number; max: number };\n observationModel?: string;\n reflectionModel?: string;\n} | null> {\n try {\n // Guard against older @mastra/core versions that don't have resolveProcessorById\n if (typeof agent.resolveProcessorById !== 'function') {\n return null;\n }\n const omProcessor = await agent.resolveProcessorById('observational-memory', requestContext);\n if (!omProcessor) {\n return null;\n }\n\n // Use getResolvedConfig if available (properly resolves model names)\n // Fall back to .config for backwards compatibility\n const hasResolvedConfig = typeof (omProcessor as any).getResolvedConfig === 'function';\n\n if (hasResolvedConfig) {\n const resolvedConfig = await (omProcessor as any).getResolvedConfig(requestContext);\n return {\n enabled: true,\n scope: resolvedConfig.scope || 'resource',\n shareTokenBudget: resolvedConfig.shareTokenBudget,\n messageTokens: resolvedConfig.observation?.messageTokens,\n observationTokens: resolvedConfig.reflection?.observationTokens,\n observationModel: resolvedConfig.observation?.model,\n reflectionModel: resolvedConfig.reflection?.model,\n };\n }\n\n // Fallback for older processor versions\n const processorConfig = (omProcessor as any).config || {};\n return {\n enabled: true,\n scope: processorConfig.scope || 'resource',\n shareTokenBudget: processorConfig.shareTokenBudget,\n messageTokens: processorConfig.observation?.messageTokens,\n observationTokens: processorConfig.reflection?.observationTokens,\n observationModel: undefined,\n reflectionModel: undefined,\n };\n } catch {\n return null;\n }\n}\n\n/**\n * Gets Observational Memory status for a specific resource/thread.\n */\nasync function getOMStatus(\n memoryStorage: MemoryStorage,\n resourceId: string,\n threadId?: string,\n): Promise<{\n hasRecord: boolean;\n originType?: string;\n lastObservedAt?: Date | null;\n tokenCount?: number;\n observationTokenCount?: number;\n isObserving?: boolean;\n isReflecting?: boolean;\n} | null> {\n try {\n const record = await memoryStorage.getObservationalMemory(threadId ?? null, resourceId);\n if (!record) {\n return { hasRecord: false };\n }\n\n return {\n hasRecord: true,\n originType: record.originType,\n lastObservedAt: record.lastObservedAt ?? null,\n tokenCount: record.totalTokensObserved,\n observationTokenCount: record.observationTokenCount,\n isObserving: record.isObserving,\n isReflecting: record.isReflecting,\n };\n } catch {\n return null;\n }\n}\n\n// ============================================================================\n// Route Definitions (new pattern - handlers defined inline with createRoute)\n// ============================================================================\n\nexport const GET_MEMORY_STATUS_ROUTE = createRoute({\n method: 'GET',\n path: '/memory/status',\n responseType: 'json',\n queryParamSchema: getMemoryStatusQuerySchema,\n responseSchema: memoryStatusResponseSchema,\n summary: 'Get memory status',\n description: 'Returns the current status of the memory system including configuration and health information',\n tags: ['Memory'],\n requiresAuth: true,\n handler: async ({ mastra, agentId, resourceId, threadId, requestContext }) => {\n try {\n const memory = await getMemoryFromContext({ mastra, agentId, requestContext });\n\n if (memory) {\n // Check for Observational Memory\n const agent = await getAgentFromContext({ mastra, agentId, requestContext });\n let omStatus:\n | {\n enabled: boolean;\n hasRecord?: boolean;\n originType?: string;\n lastObservedAt?: Date;\n tokenCount?: number;\n observationTokenCount?: number;\n isObserving?: boolean;\n isReflecting?: boolean;\n }\n | undefined;\n\n if (agent) {\n const omConfig = await getOMConfigFromAgent(agent, requestContext);\n if (omConfig?.enabled && resourceId) {\n // For resource-scoped OM, lookup by resourceId only (threadId=null)\n const omThreadId = omConfig.scope === 'resource' ? undefined : threadId;\n // Get OM status from the agent's memory storage (not mastra.getStorage())\n try {\n const memoryStore = await memory.storage.getStore('memory');\n if (memoryStore) {\n const status = await getOMStatus(memoryStore, resourceId, omThreadId);\n if (status) {\n omStatus = {\n enabled: true,\n ...status,\n // Convert null to undefined for schema compatibility\n lastObservedAt: status.lastObservedAt ?? undefined,\n };\n } else {\n omStatus = { enabled: true, hasRecord: false };\n }\n }\n } catch {\n // Storage not configured, just mark as enabled\n omStatus = { enabled: true };\n }\n } else if (omConfig?.enabled) {\n omStatus = { enabled: true };\n }\n }\n\n return { result: true, observationalMemory: omStatus };\n }\n\n // Only fallback to storage if no agentId was provided\n if (!agentId) {\n const storage = getStorageFromContext({ mastra });\n if (storage) {\n return { result: true };\n }\n }\n\n return { result: false };\n } catch (error) {\n return handleError(error, 'Error getting memory status');\n }\n },\n});\n\nexport const GET_MEMORY_CONFIG_ROUTE = createRoute({\n method: 'GET',\n path: '/memory/config',\n responseType: 'json',\n queryParamSchema: getMemoryConfigQuerySchema,\n responseSchema: memoryConfigResponseSchema,\n summary: 'Get memory configuration',\n description: 'Returns the memory configuration for a specific agent or the system default',\n tags: ['Memory'],\n requiresAuth: true,\n handler: async ({ mastra, agentId, requestContext }) => {\n try {\n const memory = await getMemoryFromContext({ mastra, agentId, requestContext });\n\n if (!memory) {\n // Return null config when memory is not configured (Issue #11765)\n // This allows the playground UI to gracefully handle agents without memory\n return { config: null };\n }\n\n // Get the merged configuration (defaults + custom)\n const config = memory.getMergedThreadConfig({});\n\n // Check for Observational Memory config\n const agent = await getAgentFromContext({ mastra, agentId, requestContext });\n let omConfig:\n | {\n enabled: boolean;\n scope?: 'thread' | 'resource';\n messageTokens?: number | { min: number; max: number };\n observationTokens?: number | { min: number; max: number };\n observationModel?: string;\n reflectionModel?: string;\n }\n | undefined;\n\n if (agent) {\n omConfig = (await getOMConfigFromAgent(agent, requestContext)) ?? { enabled: false };\n }\n\n return {\n config: {\n ...config,\n observationalMemory: omConfig,\n },\n };\n } catch (error) {\n return handleError(error, 'Error getting memory configuration');\n }\n },\n});\n\nexport const GET_OBSERVATIONAL_MEMORY_ROUTE = createRoute({\n method: 'GET',\n path: '/memory/observational-memory',\n responseType: 'json',\n queryParamSchema: getObservationalMemoryQuerySchema,\n responseSchema: getObservationalMemoryResponseSchema,\n summary: 'Get observational memory data',\n description: 'Returns the current observational memory record and optional history for a resource/thread',\n tags: ['Memory'],\n requiresAuth: true,\n handler: async ({ mastra, agentId, resourceId, threadId, requestContext }) => {\n try {\n // Verify agent has OM enabled\n const agent = await getAgentFromContext({ mastra, agentId, requestContext });\n if (!agent) {\n throw new HTTPException(404, { message: 'Agent not found' });\n }\n\n const omConfig = await getOMConfigFromAgent(agent, requestContext);\n if (!omConfig?.enabled) {\n throw new HTTPException(400, { message: 'Observational Memory is not enabled for this agent' });\n }\n\n // Get storage from the agent's memory (not mastra.getStorage())\n // This ensures we use the same storage the agent uses for OM\n const memory = await getMemoryFromContext({ mastra, agentId, requestContext });\n if (!memory) {\n throw new HTTPException(400, { message: 'Memory is not configured for this agent' });\n }\n\n let memoryStore: MemoryStorage | undefined;\n try {\n memoryStore = await memory.storage.getStore('memory');\n } catch {\n throw new HTTPException(400, { message: 'Memory storage is not initialized' });\n }\n if (!memoryStore) {\n throw new HTTPException(400, { message: 'Memory storage is not initialized' });\n }\n\n // Determine the resourceId to use\n const effectiveResourceId = resourceId;\n if (!effectiveResourceId) {\n throw new HTTPException(400, { message: 'resourceId is required for observational memory lookup' });\n }\n\n // For resource-scoped OM, lookup by resourceId only (threadId=null)\n const omThreadId = omConfig.scope === 'resource' ? null : (threadId ?? null);\n\n // Get current record\n const record = await memoryStore.getObservationalMemory(omThreadId, effectiveResourceId);\n\n // Get history (last 5 generations)\n const history = await memoryStore.getObservationalMemoryHistory(omThreadId, effectiveResourceId, 5);\n\n return {\n record: record ?? null,\n history: history.length > 0 ? history : undefined,\n };\n } catch (error) {\n return handleError(error, 'Error getting observational memory');\n }\n },\n});\n\nexport const AWAIT_BUFFER_STATUS_ROUTE = createRoute({\n method: 'POST',\n path: '/memory/observational-memory/buffer-status',\n responseType: 'json',\n bodySchema: awaitBufferStatusBodySchema,\n responseSchema: awaitBufferStatusResponseSchema,\n summary: 'Await observational memory buffering completion',\n description:\n 'Blocks until any in-flight buffering operations complete for the given thread/resource, then returns the updated record',\n tags: ['Memory'],\n requiresAuth: true,\n handler: async ({ mastra, agentId, resourceId, threadId, requestContext }: MemoryContext) => {\n try {\n const agent = await getAgentFromContext({ mastra, agentId, requestContext });\n if (!agent) {\n throw new HTTPException(404, { message: 'Agent not found' });\n }\n\n const omConfig = await getOMConfigFromAgent(agent, requestContext);\n if (!omConfig?.enabled) {\n throw new HTTPException(400, { message: 'Observational Memory is not enabled for this agent' });\n }\n\n // Resolve the OM processor to call waitForBuffering\n const omProcessor = await agent.resolveProcessorById('observational-memory', requestContext);\n if (!omProcessor || typeof (omProcessor as any).waitForBuffering !== 'function') {\n throw new HTTPException(400, { message: 'Observational Memory processor not available' });\n }\n\n // Block until buffering completes (30s timeout)\n await (omProcessor as any).waitForBuffering(threadId, resourceId);\n\n // After buffering, fetch the updated record\n const memory = await getMemoryFromContext({ mastra, agentId, requestContext });\n if (!memory) {\n throw new HTTPException(400, { message: 'Memory is not configured for this agent' });\n }\n\n let memoryStore: MemoryStorage | undefined;\n try {\n memoryStore = await memory.storage.getStore('memory');\n } catch {\n throw new HTTPException(400, { message: 'Memory storage is not initialized' });\n }\n if (!memoryStore) {\n throw new HTTPException(400, { message: 'Memory storage is not initialized' });\n }\n\n const effectiveResourceId = resourceId;\n if (!effectiveResourceId) {\n throw new HTTPException(400, { message: 'resourceId is required' });\n }\n\n const omThreadId = omConfig.scope === 'resource' ? null : (threadId ?? null);\n const record = await memoryStore.getObservationalMemory(omThreadId, effectiveResourceId);\n\n return { record: record ?? null };\n } catch (error) {\n console.error('Error awaiting buffer status', error);\n return handleError(error, 'Error awaiting buffer status');\n }\n },\n});\n\nexport const LIST_THREADS_ROUTE = createRoute({\n method: 'GET',\n path: '/memory/threads',\n responseType: 'json',\n queryParamSchema: listThreadsQuerySchema,\n responseSchema: listThreadsResponseSchema,\n summary: 'List memory threads',\n description:\n 'Returns a paginated list of conversation threads with optional filtering by resource ID and/or metadata',\n tags: ['Memory'],\n requiresAuth: true,\n handler: async ({ mastra, agentId, resourceId, metadata, requestContext, page, perPage, orderBy }) => {\n try {\n // Use effective resourceId (context key takes precedence over client-provided value)\n const effectiveResourceId = getEffectiveResourceId(requestContext, resourceId);\n\n // Build filter object dynamically based on provided parameters\n const filter: { resourceId?: string; metadata?: Record<string, unknown> } | undefined =\n effectiveResourceId || metadata ? {} : undefined;\n\n if (effectiveResourceId) {\n filter!.resourceId = effectiveResourceId;\n }\n if (metadata) {\n filter!.metadata = metadata;\n }\n\n const memory = await getMemoryFromContext({ mastra, agentId, requestContext });\n\n if (memory) {\n const result = await memory.listThreads({\n filter,\n page,\n perPage,\n orderBy,\n });\n return result;\n }\n\n // Only fallback to storage if no agentId was provided\n if (!agentId) {\n const storage = getStorageFromContext({ mastra });\n if (storage) {\n const memoryStore = await storage.getStore('memory');\n if (memoryStore) {\n const result = await memoryStore.listThreads({\n filter,\n page,\n perPage,\n orderBy,\n });\n return result;\n }\n }\n }\n\n throw new HTTPException(400, { message: 'Memory is not initialized' });\n } catch (error) {\n return handleError(error, 'Error listing threads');\n }\n },\n});\n\nexport const GET_THREAD_BY_ID_ROUTE = createRoute({\n method: 'GET',\n path: '/memory/threads/:threadId',\n responseType: 'json',\n pathParamSchema: threadIdPathParams,\n queryParamSchema: getThreadByIdQuerySchema,\n responseSchema: getThreadByIdResponseSchema,\n summary: 'Get thread by ID',\n description: 'Returns details for a specific conversation thread',\n tags: ['Memory'],\n requiresAuth: true,\n handler: async ({ mastra, agentId, threadId, resourceId, requestContext }) => {\n try {\n const effectiveThreadId = getEffectiveThreadId(requestContext, threadId);\n const effectiveResourceId = getEffectiveResourceId(requestContext, resourceId);\n validateBody({ threadId: effectiveThreadId });\n\n const memory = await getMemoryFromContext({ mastra, agentId, requestContext });\n if (memory) {\n const thread = await memory.getThreadById({ threadId: effectiveThreadId! });\n if (!thread) {\n throw new HTTPException(404, { message: 'Thread not found' });\n }\n await validateThreadOwnership(thread, effectiveResourceId);\n return thread;\n }\n\n // Only fallback to storage if no agentId was provided\n if (!agentId) {\n const storage = getStorageFromContext({ mastra });\n if (storage) {\n const memoryStore = await storage.getStore('memory');\n if (memoryStore) {\n const thread = await memoryStore.getThreadById({ threadId: effectiveThreadId! });\n if (!thread) {\n throw new HTTPException(404, { message: 'Thread not found' });\n }\n await validateThreadOwnership(thread, effectiveResourceId);\n return thread;\n }\n }\n }\n\n throw new HTTPException(400, { message: 'Memory is not initialized' });\n } catch (error) {\n return handleError(error, 'Error getting thread');\n }\n },\n});\n\nexport const LIST_MESSAGES_ROUTE = createRoute({\n method: 'GET',\n path: '/memory/threads/:threadId/messages',\n responseType: 'json',\n pathParamSchema: threadIdPathParams,\n queryParamSchema: listMessagesQuerySchema,\n responseSchema: listMessagesResponseSchema,\n summary: 'List thread messages',\n description: 'Returns a paginated list of messages in a conversation thread',\n tags: ['Memory'],\n requiresAuth: true,\n handler: (async ({\n mastra,\n agentId,\n threadId,\n resourceId,\n perPage,\n page,\n orderBy,\n include,\n filter,\n requestContext,\n }: any) => {\n try {\n const effectiveThreadId = getEffectiveThreadId(requestContext, threadId);\n const effectiveResourceId = getEffectiveResourceId(requestContext, resourceId);\n validateBody({ threadId: effectiveThreadId });\n\n if (!effectiveThreadId) {\n throw new HTTPException(400, { message: 'No threadId found' });\n }\n\n const memory = await getMemoryFromContext({ mastra, agentId, requestContext });\n\n if (memory) {\n const thread = await memory.getThreadById({ threadId: effectiveThreadId });\n if (!thread) {\n throw new HTTPException(404, { message: 'Thread not found' });\n }\n await validateThreadOwnership(thread, effectiveResourceId);\n\n const result = await memory.recall({\n threadId: effectiveThreadId,\n resourceId: effectiveResourceId,\n perPage,\n page,\n orderBy,\n include,\n filter,\n });\n return result;\n }\n\n // Only fallback to storage if no agentId was provided\n if (!agentId) {\n const storage = getStorageFromContext({ mastra });\n if (storage) {\n const memoryStore = await storage.getStore('memory');\n if (memoryStore) {\n const thread = await memoryStore.getThreadById({ threadId: effectiveThreadId });\n if (!thread) {\n throw new HTTPException(404, { message: 'Thread not found' });\n }\n await validateThreadOwnership(thread, effectiveResourceId);\n\n const result = await memoryStore.listMessages({\n threadId: effectiveThreadId,\n resourceId: effectiveResourceId,\n perPage,\n page,\n orderBy,\n include,\n filter,\n });\n return result;\n }\n }\n }\n\n // Return empty messages when memory is not configured (Issue #11765)\n // This allows the playground UI to gracefully handle agents without memory\n return { messages: [], uiMessages: [] };\n } catch (error) {\n return handleError(error, 'Error getting messages');\n }\n }) as any,\n});\n\nexport const GET_WORKING_MEMORY_ROUTE = createRoute({\n method: 'GET',\n path: '/memory/threads/:threadId/working-memory',\n responseType: 'json',\n pathParamSchema: threadIdPathParams,\n queryParamSchema: getWorkingMemoryQuerySchema,\n responseSchema: getWorkingMemoryResponseSchema,\n summary: 'Get working memory',\n description: 'Returns the working memory state for a thread',\n tags: ['Memory'],\n requiresAuth: true,\n handler: async ({ mastra, agentId, threadId, resourceId, requestContext, memoryConfig }) => {\n try {\n const effectiveThreadId = getEffectiveThreadId(requestContext, threadId);\n const effectiveResourceId = getEffectiveResourceId(requestContext, resourceId);\n const memory = await getMemoryFromContext({ mastra, agentId, requestContext });\n validateBody({ threadId: effectiveThreadId });\n if (!memory) {\n // Return null working memory when memory is not configured (Issue #11765)\n // This allows the playground UI to gracefully handle agents without memory\n return { workingMemory: null, source: 'thread' as const, workingMemoryTemplate: null, threadExists: false };\n }\n const thread = await memory.getThreadById({ threadId: effectiveThreadId! });\n if (thread) {\n await validateThreadOwnership(thread, effectiveResourceId);\n }\n const threadExists = !!thread;\n const template = await memory.getWorkingMemoryTemplate({ memoryConfig });\n const workingMemoryTemplate =\n template?.format === 'json'\n ? { ...template, content: JSON.stringify(generateEmptyFromSchema(template.content)) }\n : template;\n const workingMemory = await memory.getWorkingMemory({\n threadId: effectiveThreadId!,\n resourceId: effectiveResourceId,\n memoryConfig,\n });\n const config = memory.getMergedThreadConfig(memoryConfig || {});\n const source: 'thread' | 'resource' =\n config.workingMemory?.scope !== 'thread' && effectiveResourceId ? 'resource' : 'thread';\n return { workingMemory, source, workingMemoryTemplate, threadExists };\n } catch (error) {\n return handleError(error, 'Error getting working memory');\n }\n },\n});\n\nexport const SAVE_MESSAGES_ROUTE = createRoute({\n method: 'POST',\n path: '/memory/save-messages',\n responseType: 'json',\n queryParamSchema: agentIdQuerySchema,\n bodySchema: saveMessagesBodySchema,\n responseSchema: saveMessagesResponseSchema,\n summary: 'Save messages',\n description: 'Saves new messages to memory',\n tags: ['Memory'],\n requiresAuth: true,\n handler: async ({ mastra, agentId, messages, requestContext }) => {\n try {\n const effectiveResourceId = getEffectiveResourceId(requestContext, undefined);\n const memory = await getMemoryFromContext({ mastra, agentId, requestContext });\n\n if (!memory) {\n throw new HTTPException(400, { message: 'Memory is not initialized' });\n }\n\n if (!messages) {\n throw new HTTPException(400, { message: 'Messages are required' });\n }\n\n if (!Array.isArray(messages)) {\n throw new HTTPException(400, { message: 'Messages should be an array' });\n }\n\n // Validate that all messages have threadId and resourceId\n const invalidMessages = messages.filter(message => !message.threadId || !message.resourceId);\n if (invalidMessages.length > 0) {\n throw new HTTPException(400, {\n message: `All messages must have threadId and resourceId fields. Found ${invalidMessages.length} invalid message(s).`,\n });\n }\n\n // If effectiveResourceId is set, validate all messages belong to this resource\n if (effectiveResourceId) {\n const unauthorizedMessages = messages.filter(message => message.resourceId !== effectiveResourceId);\n if (unauthorizedMessages.length > 0) {\n throw new HTTPException(403, {\n message: 'Access denied: cannot save messages for a different resource',\n });\n }\n\n // Validate that all threads belong to this resource (prevents cross-resource data pollution)\n const threadIds = [...new Set(messages.map(m => m.threadId).filter(Boolean))] as string[];\n for (const threadId of threadIds) {\n const thread = await memory.getThreadById({ threadId });\n // Thread may not exist yet (will be created on first message save), which is allowed\n // But if it exists, it must belong to the same resource\n await validateThreadOwnership(thread, effectiveResourceId);\n }\n }\n\n const processedMessages = messages.map(message => ({\n ...message,\n id: message.id || memory.generateId(),\n createdAt: message.createdAt ? new Date(message.createdAt) : new Date(),\n }));\n\n const result = await memory.saveMessages({ messages: processedMessages as any, memoryConfig: {} });\n return result;\n } catch (error) {\n return handleError(error, 'Error saving messages');\n }\n },\n});\n\nexport const CREATE_THREAD_ROUTE = createRoute({\n method: 'POST',\n path: '/memory/threads',\n responseType: 'json',\n queryParamSchema: agentIdQuerySchema,\n bodySchema: createThreadBodySchema,\n responseSchema: getThreadByIdResponseSchema,\n summary: 'Create thread',\n description: 'Creates a new conversation thread',\n tags: ['Memory'],\n requiresAuth: true,\n handler: async ({ mastra, agentId, resourceId, title, metadata, threadId, requestContext }) => {\n try {\n const effectiveResourceId = getEffectiveResourceId(requestContext, resourceId);\n const memory = await getMemoryFromContext({ mastra, agentId, requestContext });\n\n if (!memory) {\n throw new HTTPException(400, { message: 'Memory is not initialized' });\n }\n\n validateBody({ resourceId: effectiveResourceId });\n\n const result = await memory.createThread({\n resourceId: effectiveResourceId!,\n title,\n metadata,\n threadId,\n });\n return result;\n } catch (error) {\n return handleError(error, 'Error saving thread to memory');\n }\n },\n});\n\nexport const UPDATE_THREAD_ROUTE = createRoute({\n method: 'PATCH',\n path: '/memory/threads/:threadId',\n responseType: 'json',\n pathParamSchema: threadIdPathParams,\n queryParamSchema: agentIdQuerySchema,\n bodySchema: updateThreadBodySchema,\n responseSchema: getThreadByIdResponseSchema,\n summary: 'Update thread',\n description: 'Updates a conversation thread',\n tags: ['Memory'],\n requiresAuth: true,\n handler: async ({ mastra, agentId, threadId, title, metadata, resourceId, requestContext }) => {\n try {\n const effectiveThreadId = getEffectiveThreadId(requestContext, threadId);\n const effectiveResourceId = getEffectiveResourceId(requestContext, resourceId);\n const memory = await getMemoryFromContext({ mastra, agentId, requestContext });\n\n const updatedAt = new Date();\n\n validateBody({ threadId: effectiveThreadId });\n\n if (!memory) {\n throw new HTTPException(400, { message: 'Memory is not initialized' });\n }\n\n const thread = await memory.getThreadById({ threadId: effectiveThreadId! });\n if (!thread) {\n throw new HTTPException(404, { message: 'Thread not found' });\n }\n await validateThreadOwnership(thread, effectiveResourceId);\n\n const updatedThread = {\n ...thread,\n title: title || thread.title,\n metadata: metadata || thread.metadata,\n // Don't allow changing resourceId if effectiveResourceId is set (prevents reassigning threads)\n resourceId: effectiveResourceId || resourceId || thread.resourceId,\n createdAt: thread.createdAt,\n updatedAt,\n };\n\n const result = await memory.saveThread({ thread: updatedThread });\n return {\n ...result,\n resourceId: result.resourceId ?? null,\n };\n } catch (error) {\n return handleError(error, 'Error updating thread');\n }\n },\n});\n\nexport const DELETE_THREAD_ROUTE = createRoute({\n method: 'DELETE',\n path: '/memory/threads/:threadId',\n responseType: 'json',\n pathParamSchema: threadIdPathParams,\n queryParamSchema: deleteThreadQuerySchema,\n responseSchema: deleteThreadResponseSchema,\n summary: 'Delete thread',\n description: 'Deletes a conversation thread',\n tags: ['Memory'],\n requiresAuth: true,\n handler: async ({ mastra, agentId, threadId, resourceId, requestContext }) => {\n try {\n const effectiveThreadId = getEffectiveThreadId(requestContext, threadId);\n const effectiveResourceId = getEffectiveResourceId(requestContext, resourceId);\n validateBody({ threadId: effectiveThreadId });\n\n const memory = await getMemoryFromContext({ mastra, agentId, requestContext });\n if (!memory) {\n throw new HTTPException(400, { message: 'Memory is not initialized' });\n }\n\n const thread = await memory.getThreadById({ threadId: effectiveThreadId! });\n if (!thread) {\n throw new HTTPException(404, { message: 'Thread not found' });\n }\n await validateThreadOwnership(thread, effectiveResourceId);\n\n await memory.deleteThread(effectiveThreadId!);\n return { result: 'Thread deleted' };\n } catch (error) {\n return handleError(error, 'Error deleting thread');\n }\n },\n});\n\nexport const CLONE_THREAD_ROUTE = createRoute({\n method: 'POST',\n path: '/memory/threads/:threadId/clone',\n responseType: 'json',\n pathParamSchema: threadIdPathParams,\n queryParamSchema: agentIdQuerySchema,\n bodySchema: cloneThreadBodySchema,\n responseSchema: cloneThreadResponseSchema,\n summary: 'Clone thread',\n description: 'Creates a copy of a conversation thread with all its messages',\n tags: ['Memory'],\n requiresAuth: true,\n handler: async ({ mastra, agentId, threadId, newThreadId, resourceId, title, metadata, options, requestContext }) => {\n try {\n const effectiveThreadId = getEffectiveThreadId(requestContext, threadId);\n const effectiveResourceId = getEffectiveResourceId(requestContext, resourceId);\n validateBody({ threadId: effectiveThreadId });\n\n const memory = await getMemoryFromContext({ mastra, agentId, requestContext });\n if (!memory) {\n throw new HTTPException(400, { message: 'Memory is not initialized' });\n }\n\n // Validate source thread ownership\n const sourceThread = await memory.getThreadById({ threadId: effectiveThreadId! });\n if (!sourceThread) {\n throw new HTTPException(404, { message: 'Source thread not found' });\n }\n await validateThreadOwnership(sourceThread, effectiveResourceId);\n\n const result = await memory.cloneThread({\n sourceThreadId: effectiveThreadId!,\n newThreadId,\n // Use effective resourceId for the cloned thread\n resourceId: effectiveResourceId,\n title,\n metadata,\n options,\n });\n\n return result;\n } catch (error) {\n return handleError(error, 'Error cloning thread');\n }\n },\n});\n\nexport const UPDATE_WORKING_MEMORY_ROUTE = createRoute({\n method: 'POST',\n path: '/memory/threads/:threadId/working-memory',\n responseType: 'json',\n pathParamSchema: threadIdPathParams,\n queryParamSchema: agentIdQuerySchema,\n bodySchema: updateWorkingMemoryBodySchema,\n responseSchema: updateWorkingMemoryResponseSchema,\n summary: 'Update working memory',\n description: 'Updates the working memory state for a thread',\n tags: ['Memory'],\n requiresAuth: true,\n handler: async ({ mastra, agentId, threadId, resourceId, memoryConfig, workingMemory, requestContext }) => {\n try {\n const effectiveThreadId = getEffectiveThreadId(requestContext, threadId);\n const effectiveResourceId = getEffectiveResourceId(requestContext, resourceId);\n validateBody({ threadId: effectiveThreadId, workingMemory });\n const memory = await getMemoryFromContext({ mastra, agentId, requestContext });\n if (!memory) {\n throw new HTTPException(400, { message: 'Memory is not initialized' });\n }\n const thread = await memory.getThreadById({ threadId: effectiveThreadId! });\n if (!thread) {\n throw new HTTPException(404, { message: 'Thread not found' });\n }\n await validateThreadOwnership(thread, effectiveResourceId);\n\n await memory.updateWorkingMemory({\n threadId: effectiveThreadId!,\n resourceId: effectiveResourceId,\n workingMemory,\n memoryConfig,\n });\n return { success: true };\n } catch (error) {\n return handleError(error, 'Error updating working memory');\n }\n },\n});\n\nexport const DELETE_MESSAGES_ROUTE = createRoute({\n method: 'POST',\n path: '/memory/messages/delete',\n responseType: 'json',\n queryParamSchema: deleteMessagesQuerySchema,\n bodySchema: deleteMessagesBodySchema,\n responseSchema: deleteMessagesResponseSchema,\n summary: 'Delete messages',\n description: 'Deletes specific messages from memory',\n tags: ['Memory'],\n requiresAuth: true,\n handler: async ({ mastra, agentId, resourceId, messageIds, requestContext }) => {\n try {\n const effectiveResourceId = getEffectiveResourceId(requestContext, resourceId);\n\n if (messageIds === undefined || messageIds === null) {\n throw new HTTPException(400, { message: 'messageIds is required' });\n }\n\n // Normalize messageIds to the format expected by deleteMessages\n // Convert single values to arrays and extract IDs from objects\n let normalizedIds: string[] | { id: string }[];\n\n if (Array.isArray(messageIds)) {\n // Already an array - keep as is (could be string[] or { id: string }[])\n normalizedIds = messageIds;\n } else if (typeof messageIds === 'string') {\n // Single string ID - wrap in array\n normalizedIds = [messageIds];\n } else {\n // Single object with id property - wrap in array\n normalizedIds = [messageIds];\n }\n\n // Extract string IDs for validation and deletion\n const stringIds = normalizedIds.map(id => (typeof id === 'string' ? id : id.id));\n\n const memory = await getMemoryFromContext({ mastra, agentId, requestContext });\n\n // If effectiveResourceId is set, validate ownership of all messages before deletion\n // Fail closed: if we can't verify ownership, deny deletion\n if (effectiveResourceId && stringIds.length > 0) {\n const storage = memory?.storage || getStorageFromContext({ mastra });\n if (!storage) {\n throw new HTTPException(403, { message: 'Access denied: unable to verify message ownership' });\n }\n const memoryStore = await storage.getStore('memory');\n if (!memoryStore) {\n throw new HTTPException(400, { message: 'Memory is not initialized' });\n }\n\n // Get messages to find their threads\n const { messages } = await memoryStore.listMessagesById({ messageIds: stringIds });\n\n // Collect unique thread IDs\n const threadIds = [...new Set(messages.map(m => m.threadId).filter(Boolean))] as string[];\n\n // Validate ownership of all threads\n for (const threadId of threadIds) {\n const thread = await memoryStore.getThreadById({ threadId });\n if (thread && thread.resourceId && thread.resourceId !== effectiveResourceId) {\n throw new HTTPException(403, {\n message: 'Access denied: message belongs to a thread owned by a different resource',\n });\n }\n }\n }\n\n if (memory) {\n await memory.deleteMessages(normalizedIds);\n } else if (!agentId) {\n // Only fallback to storage if no agentId was provided\n const storage = getStorageFromContext({ mastra });\n if (storage) {\n const memoryStore = await storage.getStore('memory');\n if (memoryStore) {\n await memoryStore.deleteMessages(stringIds);\n } else {\n throw new HTTPException(400, { message: 'Memory is not initialized' });\n }\n } else {\n throw new HTTPException(400, { message: 'Memory is not initialized' });\n }\n } else {\n throw new HTTPException(400, { message: 'Memory is not initialized' });\n }\n\n // Count messages for response\n const count = Array.isArray(messageIds) ? messageIds.length : 1;\n\n return { success: true, message: `${count} message${count === 1 ? '' : 's'} deleted successfully` };\n } catch (error) {\n return handleError(error, 'Error deleting messages');\n }\n },\n});\n\nexport const SEARCH_MEMORY_ROUTE = createRoute({\n method: 'GET',\n path: '/memory/search',\n responseType: 'json',\n queryParamSchema: searchMemoryQuerySchema,\n responseSchema: searchMemoryResponseSchema,\n summary: 'Search memory',\n description: 'Searches across memory using semantic or text search',\n tags: ['Memory'],\n requiresAuth: true,\n handler: async ({ mastra, agentId, searchQuery, resourceId, threadId, limit = 20, requestContext, memoryConfig }) => {\n try {\n const effectiveResourceId = getEffectiveResourceId(requestContext, resourceId);\n const effectiveThreadId = getEffectiveThreadId(requestContext, threadId);\n validateBody({ searchQuery, resourceId: effectiveResourceId });\n\n const memory = await getMemoryFromContext({ mastra, agentId, requestContext });\n if (!memory) {\n throw new HTTPException(400, { message: 'Memory is not initialized' });\n }\n\n // Get memory configuration first to check scope\n const config = memory.getMergedThreadConfig(memoryConfig || {});\n const hasSemanticRecall = !!config?.semanticRecall;\n const resourceScope =\n typeof config?.semanticRecall === 'object' ? config?.semanticRecall?.scope !== 'thread' : true;\n\n const searchResults: SearchResult[] = [];\n\n // If threadId is provided and scope is thread-based, check if the thread exists\n if (effectiveThreadId && !resourceScope) {\n const thread = await memory.getThreadById({ threadId: effectiveThreadId });\n if (!thread) {\n // Thread doesn't exist yet (new unsaved thread) - return empty results\n return {\n results: [],\n count: 0,\n query: searchQuery,\n searchScope: resourceScope ? 'resource' : 'thread',\n searchType: hasSemanticRecall ? 'semantic' : 'text',\n };\n }\n await validateThreadOwnership(thread, effectiveResourceId);\n }\n\n // Use effectiveThreadId or find one from the resource\n let searchThreadId = effectiveThreadId;\n\n // If no threadId provided, get one from the resource\n if (!searchThreadId) {\n const { threads } = await memory.listThreads({\n filter: { resourceId: effectiveResourceId },\n page: 0,\n perPage: 1,\n orderBy: { field: 'updatedAt', direction: 'DESC' },\n });\n\n if (threads.length === 0) {\n return {\n results: [],\n count: 0,\n query: searchQuery,\n searchScope: resourceScope ? 'resource' : 'thread',\n searchType: hasSemanticRecall ? 'semantic' : 'text',\n };\n }\n\n // Use first thread - Memory class will handle scope internally\n searchThreadId = threads[0]!.id;\n }\n\n const beforeRange =\n typeof config.semanticRecall === `boolean`\n ? 2\n : typeof config.semanticRecall?.messageRange === `number`\n ? config.semanticRecall.messageRange\n : config.semanticRecall?.messageRange.before || 2;\n const afterRange =\n typeof config.semanticRecall === `boolean`\n ? 2\n : typeof config.semanticRecall?.messageRange === `number`\n ? config.semanticRecall.messageRange\n : config.semanticRecall?.messageRange.after || 2;\n\n if (resourceScope && config.semanticRecall) {\n config.semanticRecall =\n typeof config.semanticRecall === `boolean`\n ? // make message range 0 so we can highlight the matches in search, message range will include other messages, not the matching ones\n // and we add prev/next messages in a special section on each message anyway\n { messageRange: 0, topK: 2, scope: 'resource' }\n : { ...config.semanticRecall, messageRange: 0 };\n }\n\n // Single call to recall - just like the agent does\n // The Memory class handles scope (thread vs resource) internally\n const threadConfig = memory.getMergedThreadConfig(config || {});\n if (!threadConfig.lastMessages && !threadConfig.semanticRecall) {\n return { results: [], count: 0, query: searchQuery };\n }\n\n const result = await memory.recall({\n threadId: searchThreadId,\n resourceId: effectiveResourceId,\n perPage: threadConfig.lastMessages,\n threadConfig: config,\n vectorSearchString: threadConfig.semanticRecall && searchQuery ? searchQuery : undefined,\n });\n\n // Get all threads to build context and show which thread each message is from\n // Fetch threads by IDs from the actual messages to avoid truncation\n const threadIds = Array.from(\n new Set(result.messages.map((m: MastraDBMessage) => m.threadId || searchThreadId!).filter(Boolean)),\n );\n const fetched = await Promise.all(threadIds.map((id: string) => memory.getThreadById({ threadId: id })));\n const threadMap = new Map(fetched.filter(Boolean).map(t => [t!.id, t!]));\n\n // Process each message in the results\n for (const msg of result.messages) {\n const content = getTextContent(msg);\n\n const msgThreadId = msg.threadId || searchThreadId;\n const thread = threadMap.get(msgThreadId);\n\n // Get thread messages for context\n const threadMessages = (await memory.recall({ threadId: msgThreadId })).messages;\n const messageIndex = threadMessages.findIndex(m => m.id === msg.id);\n\n const searchResult: SearchResult = {\n id: msg.id,\n role: msg.role,\n content,\n createdAt: msg.createdAt,\n threadId: msgThreadId,\n threadTitle: thread?.title || msgThreadId,\n };\n\n if (messageIndex !== -1) {\n searchResult.context = {\n before: threadMessages.slice(Math.max(0, messageIndex - beforeRange), messageIndex).map(m => ({\n id: m.id,\n role: m.role,\n content: getTextContent(m),\n createdAt: m.createdAt || new Date(),\n })),\n after: threadMessages.slice(messageIndex + 1, messageIndex + afterRange + 1).map(m => ({\n id: m.id,\n role: m.role,\n content: getTextContent(m),\n createdAt: m.createdAt || new Date(),\n })),\n };\n }\n\n searchResults.push(searchResult);\n }\n\n // Sort by date (newest first) and limit\n const sortedResults = searchResults\n .sort((a, b) => new Date(b.createdAt).getTime() - new Date(a.createdAt).getTime())\n .slice(0, limit);\n\n return {\n results: sortedResults,\n count: sortedResults.length,\n query: searchQuery,\n searchScope: resourceScope ? 'resource' : 'thread',\n searchType: hasSemanticRecall ? 'semantic' : 'text',\n };\n } catch (error) {\n return handleError(error, 'Error searching memory');\n }\n },\n});\n\n// Network routes (same handlers with /network/ prefix)\nexport const GET_MEMORY_STATUS_NETWORK_ROUTE = createRoute({\n method: 'GET',\n path: '/memory/network/status',\n responseType: 'json',\n queryParamSchema: getMemoryStatusNetworkQuerySchema,\n responseSchema: memoryStatusResponseSchema,\n summary: 'Get memory status (network)',\n description: 'Returns the current status of the memory system (network route)',\n tags: ['Memory - Network'],\n requiresAuth: true,\n handler: GET_MEMORY_STATUS_ROUTE.handler,\n});\n\nexport const LIST_THREADS_NETWORK_ROUTE = createRoute({\n method: 'GET',\n path: '/memory/network/threads',\n responseType: 'json',\n queryParamSchema: listThreadsNetworkQuerySchema,\n responseSchema: listThreadsResponseSchema,\n summary: 'List memory threads (network)',\n description: 'Returns a paginated list of conversation threads (network route)',\n tags: ['Memory - Network'],\n requiresAuth: true,\n handler: LIST_THREADS_ROUTE.handler,\n});\n\nexport const GET_THREAD_BY_ID_NETWORK_ROUTE = createRoute({\n method: 'GET',\n path: '/memory/network/threads/:threadId',\n responseType: 'json',\n pathParamSchema: threadIdPathParams,\n queryParamSchema: getThreadByIdNetworkQuerySchema,\n responseSchema: getThreadByIdResponseSchema,\n summary: 'Get thread by ID (network)',\n description: 'Returns details for a specific conversation thread (network route)',\n tags: ['Memory - Network'],\n requiresAuth: true,\n handler: GET_THREAD_BY_ID_ROUTE.handler,\n});\n\nexport const LIST_MESSAGES_NETWORK_ROUTE = createRoute({\n method: 'GET',\n path: '/memory/network/threads/:threadId/messages',\n responseType: 'json',\n pathParamSchema: threadIdPathParams,\n queryParamSchema: listMessagesNetworkQuerySchema,\n responseSchema: listMessagesResponseSchema,\n summary: 'List thread messages (network)',\n description: 'Returns a paginated list of messages in a conversation thread (network route)',\n tags: ['Memory - Network'],\n requiresAuth: true,\n handler: LIST_MESSAGES_ROUTE.handler,\n});\n\nexport const SAVE_MESSAGES_NETWORK_ROUTE = createRoute({\n method: 'POST',\n path: '/memory/network/save-messages',\n responseType: 'json',\n queryParamSchema: saveMessagesNetworkQuerySchema,\n bodySchema: saveMessagesBodySchema,\n responseSchema: saveMessagesResponseSchema,\n summary: 'Save messages (network)',\n description: 'Saves new messages to memory (network route)',\n tags: ['Memory - Network'],\n requiresAuth: true,\n handler: SAVE_MESSAGES_ROUTE.handler,\n});\n\nexport const CREATE_THREAD_NETWORK_ROUTE = createRoute({\n method: 'POST',\n path: '/memory/network/threads',\n responseType: 'json',\n queryParamSchema: createThreadNetworkQuerySchema,\n bodySchema: createThreadBodySchema,\n responseSchema: getThreadByIdResponseSchema,\n summary: 'Create thread (network)',\n description: 'Creates a new conversation thread (network route)',\n tags: ['Memory - Network'],\n requiresAuth: true,\n handler: CREATE_THREAD_ROUTE.handler,\n});\n\nexport const UPDATE_THREAD_NETWORK_ROUTE = createRoute({\n method: 'PATCH',\n path: '/memory/network/threads/:threadId',\n responseType: 'json',\n pathParamSchema: threadIdPathParams,\n queryParamSchema: updateThreadNetworkQuerySchema,\n bodySchema: updateThreadBodySchema,\n responseSchema: getThreadByIdResponseSchema,\n summary: 'Update thread (network)',\n description: 'Updates a conversation thread (network route)',\n tags: ['Memory - Network'],\n requiresAuth: true,\n handler: UPDATE_THREAD_ROUTE.handler,\n});\n\nexport const DELETE_THREAD_NETWORK_ROUTE = createRoute({\n method: 'DELETE',\n path: '/memory/network/threads/:threadId',\n responseType: 'json',\n pathParamSchema: threadIdPathParams,\n queryParamSchema: deleteThreadNetworkQuerySchema,\n responseSchema: deleteThreadResponseSchema,\n summary: 'Delete thread (network)',\n description: 'Deletes a conversation thread (network route)',\n tags: ['Memory - Network'],\n requiresAuth: true,\n handler: DELETE_THREAD_ROUTE.handler,\n});\n\nexport const DELETE_MESSAGES_NETWORK_ROUTE = createRoute({\n method: 'POST',\n path: '/memory/network/messages/delete',\n responseType: 'json',\n queryParamSchema: deleteMessagesNetworkQuerySchema,\n bodySchema: deleteMessagesBodySchema,\n responseSchema: deleteMessagesResponseSchema,\n summary: 'Delete messages (network)',\n description: 'Deletes specific messages from memory (network route)',\n tags: ['Memory - Network'],\n requiresAuth: true,\n handler: DELETE_MESSAGES_ROUTE.handler,\n});\n"]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/server/schemas/system.ts"],"names":[],"mappings":";;;AAEO,IAAM,mBAAA,GAAsB,EAAE,MAAA,CAAO;AAAA,EAC1C,IAAA,EAAM,EAAE,MAAA,EAAO;AAAA,EACf,OAAA,EAAS,EAAE,MAAA;AACb,CAAC;AAEM,IAAM,4BAAA,GAA+B,EAAE,MAAA,CAAO;AAAA,EACnD,QAAA,EAAU,CAAA,CAAE,KAAA,CAAM,mBAAmB,CAAA;AAAA,EACrC,KAAA,EAAO,EAAE,OAAA,EAAQ;AAAA,EACjB,UAAA,EAAY,EAAE,OAAA;AAChB,CAAC","file":"chunk-VEAVTM4P.js","sourcesContent":["import { z } from 'zod/v4';\n\nexport const mastraPackageSchema = z.object({\n name: z.string(),\n version: z.string(),\n});\n\nexport const systemPackagesResponseSchema = z.object({\n packages: z.array(mastraPackageSchema),\n isDev: z.boolean(),\n cmsEnabled: z.boolean(),\n});\n\nexport type MastraPackage = z.infer<typeof mastraPackageSchema>;\nexport type SystemPackagesResponse = z.infer<typeof systemPackagesResponseSchema>;\n"]}
|