@mastra/server 1.79.0-alpha.10 → 1.79.0-alpha.11

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.
Files changed (381) hide show
  1. package/dist/{a2a-CHBSYHxu.js → a2a-BqLB3McP.js} +17 -16
  2. package/dist/a2a-BqLB3McP.js.map +1 -0
  3. package/dist/{a2a-B465DD1u.cjs → a2a-Uood_0DN.cjs} +19 -18
  4. package/dist/a2a-Uood_0DN.cjs.map +1 -0
  5. package/dist/agent-builder-CuBD1tpv.cjs +728 -0
  6. package/dist/agent-builder-CuBD1tpv.cjs.map +1 -0
  7. package/dist/agent-builder-VhM8ADW-.js +627 -0
  8. package/dist/agent-builder-VhM8ADW-.js.map +1 -0
  9. package/dist/{agents-X1E7fW3p.js → agents-BHLTMBff.js} +2 -2
  10. package/dist/{agents-X1E7fW3p.js.map → agents-BHLTMBff.js.map} +1 -1
  11. package/dist/agents-BOWEUKyV.cjs +3127 -0
  12. package/dist/agents-BOWEUKyV.cjs.map +1 -0
  13. package/dist/agents-DRQ3ScbX.js +2828 -0
  14. package/dist/agents-DRQ3ScbX.js.map +1 -0
  15. package/dist/{agents-DoNMSCMt.cjs → agents-T-OIM9IK.cjs} +2 -2
  16. package/dist/{agents-DoNMSCMt.cjs.map → agents-T-OIM9IK.cjs.map} +1 -1
  17. package/dist/{api-schema-manifest-DUseI2VG.cjs → api-schema-manifest-A2qfi54Y.cjs} +4 -4
  18. package/dist/{api-schema-manifest-DUseI2VG.cjs.map → api-schema-manifest-A2qfi54Y.cjs.map} +1 -1
  19. package/dist/{api-schema-manifest-CWRIJP-B.js → api-schema-manifest-Dun5VMRT.js} +3 -3
  20. package/dist/{api-schema-manifest-CWRIJP-B.js.map → api-schema-manifest-Dun5VMRT.js.map} +1 -1
  21. package/dist/{background-tasks-CabImVak.cjs → background-tasks-B3VAKTJh.cjs} +3 -3
  22. package/dist/{background-tasks-CabImVak.cjs.map → background-tasks-B3VAKTJh.cjs.map} +1 -1
  23. package/dist/{background-tasks-oBaLtnCn.js → background-tasks-Du2zYOPl.js} +2 -2
  24. package/dist/{background-tasks-oBaLtnCn.js.map → background-tasks-Du2zYOPl.js.map} +1 -1
  25. package/dist/{builder-registry-DOkLe8ES.js → builder-registry-DLdu9bWH.js} +3 -3
  26. package/dist/{builder-registry-DOkLe8ES.js.map → builder-registry-DLdu9bWH.js.map} +1 -1
  27. package/dist/{builder-registry-D0frV8lQ.cjs → builder-registry-DaFAaMTf.cjs} +3 -3
  28. package/dist/{builder-registry-D0frV8lQ.cjs.map → builder-registry-DaFAaMTf.cjs.map} +1 -1
  29. package/dist/{channels-CBIopVWd.cjs → channels-BnVRmnzK.cjs} +6 -3
  30. package/dist/{channels-CBIopVWd.cjs.map → channels-BnVRmnzK.cjs.map} +1 -1
  31. package/dist/{channels-BOxgHvzI.js → channels-Db-4pXVZ.js} +6 -3
  32. package/dist/{channels-BOxgHvzI.js.map → channels-Db-4pXVZ.js.map} +1 -1
  33. package/dist/conversations-8BWryNlF.js +165 -0
  34. package/dist/conversations-8BWryNlF.js.map +1 -0
  35. package/dist/conversations-C5MkQBB8.cjs +194 -0
  36. package/dist/conversations-C5MkQBB8.cjs.map +1 -0
  37. package/dist/{conversations-Bj5TLNqF.cjs → conversations-DasqEDCF.cjs} +3 -3
  38. package/dist/{conversations-Bj5TLNqF.cjs.map → conversations-DasqEDCF.cjs.map} +1 -1
  39. package/dist/{dist-9c3PXXpk.cjs → dist-B-bEVWlJ.cjs} +4733 -1251
  40. package/dist/dist-B-bEVWlJ.cjs.map +1 -0
  41. package/dist/dist-B3kC8Yd0.cjs +3 -0
  42. package/dist/{dist-CQ3FSKT-.cjs → dist-B9ery9Zw.cjs} +38 -35
  43. package/dist/{dist-CQ3FSKT-.cjs.map → dist-B9ery9Zw.cjs.map} +1 -1
  44. package/dist/{dist-BxMmGD3n.js → dist-BBOnrL_A.js} +10 -12
  45. package/dist/{dist-BxMmGD3n.js.map → dist-BBOnrL_A.js.map} +1 -1
  46. package/dist/{dist-DOWsEmo6.js → dist-BIrQLUV9.js} +20 -20
  47. package/dist/{dist-DOWsEmo6.js.map → dist-BIrQLUV9.js.map} +1 -1
  48. package/dist/dist-BM9J-PTK.js +1 -0
  49. package/dist/{dist-DC1Pewf5.cjs → dist-Bo3GdQwf.cjs} +21 -21
  50. package/dist/{dist-DC1Pewf5.cjs.map → dist-Bo3GdQwf.cjs.map} +1 -1
  51. package/dist/{dist-BwYL7Ykb.js → dist-CREG82cy.js} +37 -34
  52. package/dist/{dist-BwYL7Ykb.js.map → dist-CREG82cy.js.map} +1 -1
  53. package/dist/{dist-rDRetJVY.cjs → dist-CeTLA-e5.cjs} +2 -3
  54. package/dist/{dist-rDRetJVY.cjs.map → dist-CeTLA-e5.cjs.map} +1 -1
  55. package/dist/{dist-CBRJax5e.js → dist-DLld1qjf.js} +25 -31
  56. package/dist/{dist-CBRJax5e.js.map → dist-DLld1qjf.js.map} +1 -1
  57. package/dist/{dist-B_bet8uz.js → dist-DjkPkAzV.js} +2 -3
  58. package/dist/{dist-B_bet8uz.js.map → dist-DjkPkAzV.js.map} +1 -1
  59. package/dist/{dist-UKEksCGq.cjs → dist-DsrJXwic.cjs} +11 -13
  60. package/dist/{dist-UKEksCGq.cjs.map → dist-DsrJXwic.cjs.map} +1 -1
  61. package/dist/{dist-DGCnbhNe.js → dist-k77XQGUn.js} +4493 -1043
  62. package/dist/dist-k77XQGUn.js.map +1 -0
  63. package/dist/{dist-3FPW9nVj.cjs → dist-lT2rqyY9.cjs} +26 -32
  64. package/dist/{dist-3FPW9nVj.cjs.map → dist-lT2rqyY9.cjs.map} +1 -1
  65. package/dist/docs/SKILL.md +1 -1
  66. package/dist/docs/assets/SOURCE_MAP.json +1 -1
  67. package/dist/{dynamic-workflows-Rr_6ac1y.js → dynamic-workflows-CTUO0SFu.js} +3 -3
  68. package/dist/{dynamic-workflows-Rr_6ac1y.js.map → dynamic-workflows-CTUO0SFu.js.map} +1 -1
  69. package/dist/{dynamic-workflows-DXlkr-jK.cjs → dynamic-workflows-HwPX3mcf.cjs} +3 -3
  70. package/dist/{dynamic-workflows-DXlkr-jK.cjs.map → dynamic-workflows-HwPX3mcf.cjs.map} +1 -1
  71. package/dist/{editor-builder-BclcHxN6.cjs → editor-builder-BDtiWw0f.cjs} +2 -2
  72. package/dist/{editor-builder-BclcHxN6.cjs.map → editor-builder-BDtiWw0f.cjs.map} +1 -1
  73. package/dist/{editor-builder-D16kc1P6.js → editor-builder-ClFlGXoX.js} +4 -4
  74. package/dist/{editor-builder-D16kc1P6.js.map → editor-builder-ClFlGXoX.js.map} +1 -1
  75. package/dist/{editor-builder-s9WqPJgA.js → editor-builder-DnLCfqnY.js} +2 -2
  76. package/dist/{editor-builder-s9WqPJgA.js.map → editor-builder-DnLCfqnY.js.map} +1 -1
  77. package/dist/{editor-builder-DXHiPX1A.cjs → editor-builder-DtpP1FtW.cjs} +5 -5
  78. package/dist/{editor-builder-DXHiPX1A.cjs.map → editor-builder-DtpP1FtW.cjs.map} +1 -1
  79. package/dist/{helpers-ElhPeCSK.cjs → helpers-CAcEhq38.cjs} +21 -17
  80. package/dist/{helpers-ElhPeCSK.cjs.map → helpers-CAcEhq38.cjs.map} +1 -1
  81. package/dist/{helpers-DLhX1fqc.js → helpers-vrqddDd5.js} +21 -17
  82. package/dist/{helpers-DLhX1fqc.js.map → helpers-vrqddDd5.js.map} +1 -1
  83. package/dist/index.cjs +1 -1
  84. package/dist/logs-CiSw7r0s.cjs +119 -0
  85. package/dist/logs-CiSw7r0s.cjs.map +1 -0
  86. package/dist/logs-CxfPk-iL.js +96 -0
  87. package/dist/logs-CxfPk-iL.js.map +1 -0
  88. package/dist/mcp-BTdLh6E_.js +274 -0
  89. package/dist/mcp-BTdLh6E_.js.map +1 -0
  90. package/dist/mcp-BYqFR5q-.cjs +339 -0
  91. package/dist/mcp-BYqFR5q-.cjs.map +1 -0
  92. package/dist/memory-BHtTSzvJ.js +1739 -0
  93. package/dist/memory-BHtTSzvJ.js.map +1 -0
  94. package/dist/memory-CwwkVDh1.cjs +1906 -0
  95. package/dist/memory-CwwkVDh1.cjs.map +1 -0
  96. package/dist/observability-BBMCMeT-.cjs +502 -0
  97. package/dist/observability-BBMCMeT-.cjs.map +1 -0
  98. package/dist/observability-ZRgRcvoX.js +431 -0
  99. package/dist/observability-ZRgRcvoX.js.map +1 -0
  100. package/dist/{observability-new-endpoints-BU8JYPfh.js → observability-new-endpoints-fjoZzEtk.js} +10 -9
  101. package/dist/{observability-new-endpoints-BU8JYPfh.js.map → observability-new-endpoints-fjoZzEtk.js.map} +1 -1
  102. package/dist/{observability-new-endpoints-AMp9bnMV.cjs → observability-new-endpoints-tG3-odLa.cjs} +11 -10
  103. package/dist/observability-new-endpoints-tG3-odLa.cjs.map +1 -0
  104. package/dist/plans-CiPgWBhO.cjs +68 -0
  105. package/dist/plans-CiPgWBhO.cjs.map +1 -0
  106. package/dist/plans-DCepEY7n.js +57 -0
  107. package/dist/plans-DCepEY7n.js.map +1 -0
  108. package/dist/{probe-image-size-DBGjhUtJ.cjs → probe-image-size-Alv3gwKl.cjs} +194 -184
  109. package/dist/probe-image-size-Alv3gwKl.cjs.map +1 -0
  110. package/dist/{probe-image-size-Dmoxv93t.js → probe-image-size-BdfbUHxx.js} +158 -148
  111. package/dist/probe-image-size-BdfbUHxx.js.map +1 -0
  112. package/dist/responses-4FwMNxoJ.js +628 -0
  113. package/dist/responses-4FwMNxoJ.js.map +1 -0
  114. package/dist/responses-CCRijwDF.cjs +651 -0
  115. package/dist/responses-CCRijwDF.cjs.map +1 -0
  116. package/dist/{responses-CKNdSRkS.cjs → responses-CfcIc53b.cjs} +2 -2
  117. package/dist/{responses-CKNdSRkS.cjs.map → responses-CfcIc53b.cjs.map} +1 -1
  118. package/dist/{rolldown-runtime-Bd6kNlEP.cjs → rolldown-runtime-BwC_XMyb.cjs} +2 -2
  119. package/dist/{rolldown-runtime-maW3aOIk.js → rolldown-runtime-D3Hj5m0v.js} +2 -2
  120. package/dist/{route-builder-BNZs643f.cjs → route-builder-B2Qhhd7C.cjs} +52 -66
  121. package/dist/route-builder-B2Qhhd7C.cjs.map +1 -0
  122. package/dist/{route-builder-BfQYtclb.js → route-builder-CjkWxv4E.js} +51 -65
  123. package/dist/route-builder-CjkWxv4E.js.map +1 -0
  124. package/dist/{routes-Dl6_kWm7.js → routes-CKfXiwRc.js} +5 -3
  125. package/dist/routes-CKfXiwRc.js.map +1 -0
  126. package/dist/{routes-rwufkyUe.js → routes-D1cP2OeF.js} +26 -26
  127. package/dist/{routes-rwufkyUe.js.map → routes-D1cP2OeF.js.map} +1 -1
  128. package/dist/{routes-DPojsNf1.cjs → routes-bxG4x1MV.cjs} +199 -199
  129. package/dist/{routes-DPojsNf1.cjs.map → routes-bxG4x1MV.cjs.map} +1 -1
  130. package/dist/{routes-BULZI-PU.cjs → routes-jXksmX9G.cjs} +5 -3
  131. package/dist/routes-jXksmX9G.cjs.map +1 -0
  132. package/dist/{schedules-Bj-giFbc.cjs → schedules-CTTTCgbk.cjs} +3 -3
  133. package/dist/{schedules-Bj-giFbc.cjs.map → schedules-CTTTCgbk.cjs.map} +1 -1
  134. package/dist/{schedules-BQYgaz66.js → schedules-DXh37n6-.js} +2 -2
  135. package/dist/{schedules-BQYgaz66.js.map → schedules-DXh37n6-.js.map} +1 -1
  136. package/dist/{schema-e0VHpMt0-C0452jOk.cjs → schema-CzbEIyhE-20gGIWkz.cjs} +83 -88
  137. package/dist/schema-CzbEIyhE-20gGIWkz.cjs.map +1 -0
  138. package/dist/{schema-e0VHpMt0-CVP5Hnxy.js → schema-CzbEIyhE-BsMcj9Ws.js} +82 -87
  139. package/dist/schema-CzbEIyhE-BsMcj9Ws.js.map +1 -0
  140. package/dist/scores-D9UgETt_.js +288 -0
  141. package/dist/scores-D9UgETt_.js.map +1 -0
  142. package/dist/scores-DRdtS7NT.cjs +329 -0
  143. package/dist/scores-DRdtS7NT.cjs.map +1 -0
  144. package/dist/server/a2a/store.cjs +1 -1
  145. package/dist/server/auth/index.cjs +2 -2
  146. package/dist/server/auth/index.js +1 -1
  147. package/dist/server/browser-stream/index.cjs +9 -11
  148. package/dist/server/browser-stream/index.cjs.map +1 -1
  149. package/dist/server/browser-stream/index.js +8 -10
  150. package/dist/server/browser-stream/index.js.map +1 -1
  151. package/dist/server/handlers/a2a.cjs +2 -2
  152. package/dist/server/handlers/a2a.js +1 -2
  153. package/dist/server/handlers/agent-builder.cjs +18 -648
  154. package/dist/server/handlers/agent-builder.js +1 -627
  155. package/dist/server/handlers/agent-controller.cjs +5 -5
  156. package/dist/server/handlers/agent-controller.cjs.map +1 -1
  157. package/dist/server/handlers/agent-controller.js +11 -9
  158. package/dist/server/handlers/agent-controller.js.map +1 -1
  159. package/dist/server/handlers/agent-versions.cjs +15 -8
  160. package/dist/server/handlers/agent-versions.cjs.map +1 -1
  161. package/dist/server/handlers/agent-versions.js +14 -7
  162. package/dist/server/handlers/agent-versions.js.map +1 -1
  163. package/dist/server/handlers/agents.cjs +51 -2860
  164. package/dist/server/handlers/agents.js +1 -2806
  165. package/dist/server/handlers/auth.cjs +14 -12
  166. package/dist/server/handlers/auth.cjs.map +1 -1
  167. package/dist/server/handlers/auth.js +20 -16
  168. package/dist/server/handlers/auth.js.map +1 -1
  169. package/dist/server/handlers/author-enrichment.cjs +1 -1
  170. package/dist/server/handlers/authorship.cjs +1 -1
  171. package/dist/server/handlers/authorship.cjs.map +1 -1
  172. package/dist/server/handlers/background-tasks.cjs +2 -2
  173. package/dist/server/handlers/background-tasks.js +1 -2
  174. package/dist/server/handlers/builder-registry.cjs +2 -2
  175. package/dist/server/handlers/builder-registry.js +1 -2
  176. package/dist/server/handlers/channels.cjs +2 -2
  177. package/dist/server/handlers/channels.js +1 -2
  178. package/dist/server/handlers/conversations.cjs +6 -171
  179. package/dist/server/handlers/conversations.js +1 -162
  180. package/dist/server/handlers/datasets.cjs +2 -2
  181. package/dist/server/handlers/datasets.cjs.map +1 -1
  182. package/dist/server/handlers/datasets.js +1 -1
  183. package/dist/server/handlers/dynamic-workflows.cjs +2 -2
  184. package/dist/server/handlers/dynamic-workflows.js +1 -2
  185. package/dist/server/handlers/editor-builder.cjs +2 -2
  186. package/dist/server/handlers/editor-builder.js +1 -2
  187. package/dist/server/handlers/error.cjs +18 -13
  188. package/dist/server/handlers/error.cjs.map +1 -1
  189. package/dist/server/handlers/error.js +17 -12
  190. package/dist/server/handlers/error.js.map +1 -1
  191. package/dist/server/handlers/favorites-enrichment.cjs +2 -2
  192. package/dist/server/handlers/favorites-enrichment.js +1 -1
  193. package/dist/server/handlers/gateway-memory-client.cjs +1 -1
  194. package/dist/server/handlers/logs.cjs +5 -104
  195. package/dist/server/handlers/logs.js +1 -96
  196. package/dist/server/handlers/mcp-client-versions.cjs +15 -8
  197. package/dist/server/handlers/mcp-client-versions.cjs.map +1 -1
  198. package/dist/server/handlers/mcp-client-versions.js +14 -7
  199. package/dist/server/handlers/mcp-client-versions.js.map +1 -1
  200. package/dist/server/handlers/mcp.cjs +12 -289
  201. package/dist/server/handlers/mcp.js +1 -274
  202. package/dist/server/handlers/memory.cjs +29 -1763
  203. package/dist/server/handlers/memory.js +1 -1731
  204. package/dist/server/handlers/observability-list-query-schemas.cjs +1 -1
  205. package/dist/server/handlers/observability-new-endpoints.cjs +2 -2
  206. package/dist/server/handlers/observability-new-endpoints.js +1 -2
  207. package/dist/server/handlers/observability-shared.cjs +2 -2
  208. package/dist/server/handlers/observability-shared.js +1 -1
  209. package/dist/server/handlers/observability-storage-schemas.cjs +1 -1
  210. package/dist/server/handlers/observability.cjs +14 -445
  211. package/dist/server/handlers/observability.js +3 -429
  212. package/dist/server/handlers/plans.cjs +3 -63
  213. package/dist/server/handlers/plans.js +1 -57
  214. package/dist/server/handlers/processor-providers.cjs +2 -2
  215. package/dist/server/handlers/processor-providers.cjs.map +1 -1
  216. package/dist/server/handlers/processor-providers.js +1 -1
  217. package/dist/server/handlers/processors.cjs +13 -15
  218. package/dist/server/handlers/processors.cjs.map +1 -1
  219. package/dist/server/handlers/processors.js +12 -14
  220. package/dist/server/handlers/processors.js.map +1 -1
  221. package/dist/server/handlers/prompt-block-versions.cjs +15 -8
  222. package/dist/server/handlers/prompt-block-versions.cjs.map +1 -1
  223. package/dist/server/handlers/prompt-block-versions.js +14 -7
  224. package/dist/server/handlers/prompt-block-versions.js.map +1 -1
  225. package/dist/server/handlers/responses.adapter.cjs +1 -1
  226. package/dist/server/handlers/responses.adapter.cjs.map +1 -1
  227. package/dist/server/handlers/responses.cjs +5 -632
  228. package/dist/server/handlers/responses.js +1 -624
  229. package/dist/server/handlers/responses.storage.cjs +2 -2
  230. package/dist/server/handlers/schedules-workflows-shim.cjs +1 -1
  231. package/dist/server/handlers/schedules.cjs +2 -2
  232. package/dist/server/handlers/schedules.js +1 -2
  233. package/dist/server/handlers/scorer-versions.cjs +15 -8
  234. package/dist/server/handlers/scorer-versions.cjs.map +1 -1
  235. package/dist/server/handlers/scorer-versions.js +14 -7
  236. package/dist/server/handlers/scorer-versions.js.map +1 -1
  237. package/dist/server/handlers/scores.cjs +8 -299
  238. package/dist/server/handlers/scores.js +1 -288
  239. package/dist/server/handlers/skills-sh-shared.cjs +1 -1
  240. package/dist/server/handlers/stored-agent-favorites.cjs +4 -4
  241. package/dist/server/handlers/stored-agent-favorites.js +3 -3
  242. package/dist/server/handlers/stored-agents.cjs +19 -13
  243. package/dist/server/handlers/stored-agents.cjs.map +1 -1
  244. package/dist/server/handlers/stored-agents.js +18 -12
  245. package/dist/server/handlers/stored-agents.js.map +1 -1
  246. package/dist/server/handlers/stored-mcp-clients.cjs +8 -6
  247. package/dist/server/handlers/stored-mcp-clients.cjs.map +1 -1
  248. package/dist/server/handlers/stored-mcp-clients.js +7 -5
  249. package/dist/server/handlers/stored-mcp-clients.js.map +1 -1
  250. package/dist/server/handlers/stored-prompt-blocks.cjs +3 -3
  251. package/dist/server/handlers/stored-prompt-blocks.js +2 -2
  252. package/dist/server/handlers/stored-scorers.cjs +3 -3
  253. package/dist/server/handlers/stored-scorers.js +2 -2
  254. package/dist/server/handlers/stored-skill-favorites.cjs +4 -4
  255. package/dist/server/handlers/stored-skill-favorites.js +3 -3
  256. package/dist/server/handlers/stored-skills.cjs +6 -5
  257. package/dist/server/handlers/stored-skills.cjs.map +1 -1
  258. package/dist/server/handlers/stored-skills.js +5 -4
  259. package/dist/server/handlers/stored-skills.js.map +1 -1
  260. package/dist/server/handlers/stored-workspaces.cjs +3 -3
  261. package/dist/server/handlers/stored-workspaces.js +2 -2
  262. package/dist/server/handlers/system.cjs +3 -3
  263. package/dist/server/handlers/system.cjs.map +1 -1
  264. package/dist/server/handlers/system.js +2 -2
  265. package/dist/server/handlers/test-utils.cjs +1 -1
  266. package/dist/server/handlers/tool-providers.cjs +2 -2
  267. package/dist/server/handlers/tool-providers.js +1 -1
  268. package/dist/server/handlers/tool-schema-overrides.cjs +1 -1
  269. package/dist/server/handlers/tools.cjs +7 -267
  270. package/dist/server/handlers/tools.js +1 -257
  271. package/dist/server/handlers/utils.cjs +2 -2
  272. package/dist/server/handlers/utils.js +1 -2
  273. package/dist/server/handlers/validate-agent-instructions.cjs +2 -2
  274. package/dist/server/handlers/validate-agent-instructions.js +1 -1
  275. package/dist/server/handlers/validate-avatar.cjs +2 -2
  276. package/dist/server/handlers/validate-avatar.cjs.map +1 -1
  277. package/dist/server/handlers/validate-avatar.js +1 -1
  278. package/dist/server/handlers/validate-avatar.js.map +1 -1
  279. package/dist/server/handlers/vector.cjs +17 -334
  280. package/dist/server/handlers/vector.js +1 -314
  281. package/dist/server/handlers/version-helpers.cjs +1 -1
  282. package/dist/server/handlers/voice.cjs +9 -35
  283. package/dist/server/handlers/voice.js +1 -23
  284. package/dist/server/handlers/workflow-builder.cjs +2 -2
  285. package/dist/server/handlers/workflow-builder.js +1 -2
  286. package/dist/server/handlers/workflows.cjs +30 -1293
  287. package/dist/server/handlers/workflows.js +1 -1257
  288. package/dist/server/handlers/workspace.cjs +27 -1176
  289. package/dist/server/handlers/workspace.js +1 -1146
  290. package/dist/server/handlers.cjs +33 -33
  291. package/dist/server/handlers.js +17 -17
  292. package/dist/server/schemas/index.cjs +6 -6
  293. package/dist/server/schemas/index.js +3 -3
  294. package/dist/server/server-adapter/index.cjs +5 -5
  295. package/dist/server/server-adapter/index.cjs.map +1 -1
  296. package/dist/server/server-adapter/index.js +4 -4
  297. package/dist/server/server-adapter/index.js.map +1 -1
  298. package/dist/tools-CmFSfDMn.js +256 -0
  299. package/dist/tools-CmFSfDMn.js.map +1 -0
  300. package/dist/tools-SPJtxG9N.cjs +291 -0
  301. package/dist/tools-SPJtxG9N.cjs.map +1 -0
  302. package/dist/{utils-DCgeTrq2.cjs → utils-CF76qzZR.cjs} +12 -17
  303. package/dist/{utils-DCgeTrq2.cjs.map → utils-CF76qzZR.cjs.map} +1 -1
  304. package/dist/{utils-DCAUeb6M.js → utils-aoLN3Wfi.js} +11 -16
  305. package/dist/{utils-DCAUeb6M.js.map → utils-aoLN3Wfi.js.map} +1 -1
  306. package/dist/{utils-Du-EpvDs.cjs → utils-dDLIDg8O.cjs} +2 -2
  307. package/dist/{utils-Du-EpvDs.cjs.map → utils-dDLIDg8O.cjs.map} +1 -1
  308. package/dist/vector-BKDD1kwc.cjs +409 -0
  309. package/dist/vector-BKDD1kwc.cjs.map +1 -0
  310. package/dist/vector-TWv4t-4g.js +314 -0
  311. package/dist/vector-TWv4t-4g.js.map +1 -0
  312. package/dist/voice-BnGwlZ75.cjs +70 -0
  313. package/dist/voice-BnGwlZ75.cjs.map +1 -0
  314. package/dist/voice-DjG8tBAD.js +23 -0
  315. package/dist/voice-DjG8tBAD.js.map +1 -0
  316. package/dist/{workflow-builder-Brj3IArM.cjs → workflow-builder-C9-8ZOWF.cjs} +5 -5
  317. package/dist/{workflow-builder-Brj3IArM.cjs.map → workflow-builder-C9-8ZOWF.cjs.map} +1 -1
  318. package/dist/{workflow-builder-DOa1Vx6w.js → workflow-builder-CjlLoQvo.js} +10 -8
  319. package/dist/{workflow-builder-DOa1Vx6w.js.map → workflow-builder-CjlLoQvo.js.map} +1 -1
  320. package/dist/workflows-DjqeJcdJ.cjs +1446 -0
  321. package/dist/workflows-DjqeJcdJ.cjs.map +1 -0
  322. package/dist/workflows-bb-otd2o.js +1273 -0
  323. package/dist/workflows-bb-otd2o.js.map +1 -0
  324. package/dist/workspace-B6kzp-bo.js +1154 -0
  325. package/dist/workspace-B6kzp-bo.js.map +1 -0
  326. package/dist/workspace-COKR1SxH.cjs +1309 -0
  327. package/dist/workspace-COKR1SxH.cjs.map +1 -0
  328. package/package.json +4 -4
  329. package/dist/a2a-B465DD1u.cjs.map +0 -1
  330. package/dist/a2a-CHBSYHxu.js.map +0 -1
  331. package/dist/dist-9c3PXXpk.cjs.map +0 -1
  332. package/dist/dist-B5OwHWTo.cjs +0 -2294
  333. package/dist/dist-B5OwHWTo.cjs.map +0 -1
  334. package/dist/dist-DGCnbhNe.js.map +0 -1
  335. package/dist/dist-DcoIg_tp.js +0 -2293
  336. package/dist/dist-DcoIg_tp.js.map +0 -1
  337. package/dist/observability-new-endpoints-AMp9bnMV.cjs.map +0 -1
  338. package/dist/probe-image-size-DBGjhUtJ.cjs.map +0 -1
  339. package/dist/probe-image-size-Dmoxv93t.js.map +0 -1
  340. package/dist/route-builder-BNZs643f.cjs.map +0 -1
  341. package/dist/route-builder-BfQYtclb.js.map +0 -1
  342. package/dist/routes-BULZI-PU.cjs.map +0 -1
  343. package/dist/routes-Dl6_kWm7.js.map +0 -1
  344. package/dist/schema-Drf2W04o.js +0 -2
  345. package/dist/schema-EQanefYq.cjs +0 -1
  346. package/dist/schema-e0VHpMt0-C0452jOk.cjs.map +0 -1
  347. package/dist/schema-e0VHpMt0-CVP5Hnxy.js.map +0 -1
  348. package/dist/server/handlers/agent-builder.cjs.map +0 -1
  349. package/dist/server/handlers/agent-builder.js.map +0 -1
  350. package/dist/server/handlers/agents.cjs.map +0 -1
  351. package/dist/server/handlers/agents.js.map +0 -1
  352. package/dist/server/handlers/conversations.cjs.map +0 -1
  353. package/dist/server/handlers/conversations.js.map +0 -1
  354. package/dist/server/handlers/logs.cjs.map +0 -1
  355. package/dist/server/handlers/logs.js.map +0 -1
  356. package/dist/server/handlers/mcp.cjs.map +0 -1
  357. package/dist/server/handlers/mcp.js.map +0 -1
  358. package/dist/server/handlers/memory.cjs.map +0 -1
  359. package/dist/server/handlers/memory.js.map +0 -1
  360. package/dist/server/handlers/observability.cjs.map +0 -1
  361. package/dist/server/handlers/observability.js.map +0 -1
  362. package/dist/server/handlers/plans.cjs.map +0 -1
  363. package/dist/server/handlers/plans.js.map +0 -1
  364. package/dist/server/handlers/responses.cjs.map +0 -1
  365. package/dist/server/handlers/responses.js.map +0 -1
  366. package/dist/server/handlers/scores.cjs.map +0 -1
  367. package/dist/server/handlers/scores.js.map +0 -1
  368. package/dist/server/handlers/tools.cjs.map +0 -1
  369. package/dist/server/handlers/tools.js.map +0 -1
  370. package/dist/server/handlers/vector.cjs.map +0 -1
  371. package/dist/server/handlers/vector.js.map +0 -1
  372. package/dist/server/handlers/voice.cjs.map +0 -1
  373. package/dist/server/handlers/voice.js.map +0 -1
  374. package/dist/server/handlers/workflows.cjs.map +0 -1
  375. package/dist/server/handlers/workflows.js.map +0 -1
  376. package/dist/server/handlers/workspace.cjs.map +0 -1
  377. package/dist/server/handlers/workspace.js.map +0 -1
  378. package/dist/sync-Ai_ZDz7U.js +0 -1700
  379. package/dist/sync-Ai_ZDz7U.js.map +0 -1
  380. package/dist/sync-BrO5MtSe.cjs +0 -1729
  381. package/dist/sync-BrO5MtSe.cjs.map +0 -1
@@ -1,8 +1,8 @@
1
1
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
2
- require("../../rolldown-runtime-Bd6kNlEP.cjs");
2
+ require("../../rolldown-runtime-BwC_XMyb.cjs");
3
3
  const require_http_exception = require("../../http-exception-CKDHupKw.cjs");
4
- const require_route_builder = require("../../route-builder-BNZs643f.cjs");
5
- const require_utils = require("../../utils-DCgeTrq2.cjs");
4
+ const require_route_builder = require("../../route-builder-B2Qhhd7C.cjs");
5
+ const require_utils = require("../../utils-CF76qzZR.cjs");
6
6
  const require_server_handlers_error = require("./error.cjs");
7
7
  const require_version_common = require("../../version-common-DrzXq7Ct.cjs");
8
8
  const require_agent_versions = require("../../agent-versions-CzXJWn1T.cjs");
@@ -99,7 +99,8 @@ const CREATE_AGENT_VERSION_ROUTE = require_route_builder.createRoute({
99
99
  }
100
100
  const latestVersion = await agentsStore.getLatestVersion(agentId);
101
101
  if (!agent.activeVersionId && latestVersion) currentConfig = require_server_handlers_version_helpers.extractConfigFromVersion(latestVersion, SNAPSHOT_CONFIG_FIELDS);
102
- const changedFields = require_server_handlers_version_helpers.calculateChangedFields(latestVersion ? require_server_handlers_version_helpers.extractConfigFromVersion(latestVersion, SNAPSHOT_CONFIG_FIELDS) : null, currentConfig);
102
+ const previousConfig = latestVersion ? require_server_handlers_version_helpers.extractConfigFromVersion(latestVersion, SNAPSHOT_CONFIG_FIELDS) : null;
103
+ const changedFields = require_server_handlers_version_helpers.calculateChangedFields(previousConfig, currentConfig);
103
104
  const { versionId } = await require_server_handlers_version_helpers.createVersionWithRetry(agentsStore, agentId, "agentId", currentConfig, changedFields, { changeMessage });
104
105
  const version = await agentsStore.getVersion(versionId);
105
106
  if (!version) throw new require_http_exception.HTTPException(500, { message: "Failed to retrieve created version" });
@@ -132,7 +133,8 @@ const GET_AGENT_VERSION_ROUTE = require_route_builder.createRoute({
132
133
  const version = await agentsStore.getVersion(versionId);
133
134
  if (!version) throw new require_http_exception.HTTPException(404, { message: `Version with id ${versionId} not found` });
134
135
  if (version.agentId !== agentId) throw new require_http_exception.HTTPException(404, { message: `Version with id ${versionId} not found for agent ${agentId}` });
135
- require_utils.assertStoredResourceScope(await agentsStore.getById(agentId), await require_utils.getStoredResourceScope(mastra, requestContext));
136
+ const agent = await agentsStore.getById(agentId);
137
+ require_utils.assertStoredResourceScope(agent, await require_utils.getStoredResourceScope(mastra, requestContext));
136
138
  return version;
137
139
  } catch (error) {
138
140
  return require_server_handlers_error.handleError(error, "Error getting agent version");
@@ -216,7 +218,9 @@ const RESTORE_AGENT_VERSION_ROUTE = require_route_builder.createRoute({
216
218
  ...restoredConfig
217
219
  });
218
220
  const latestVersion = await agentsStore.getLatestVersion(agentId);
219
- const { versionId: newVersionId } = await require_server_handlers_version_helpers.createVersionWithRetry(agentsStore, agentId, "agentId", restoredConfig, require_server_handlers_version_helpers.calculateChangedFields(latestVersion ? require_server_handlers_version_helpers.extractConfigFromVersion(latestVersion, SNAPSHOT_CONFIG_FIELDS) : null, restoredConfig), { changeMessage: `Restored from version ${versionToRestore.versionNumber}` });
221
+ const previousConfig = latestVersion ? require_server_handlers_version_helpers.extractConfigFromVersion(latestVersion, SNAPSHOT_CONFIG_FIELDS) : null;
222
+ const changedFields = require_server_handlers_version_helpers.calculateChangedFields(previousConfig, restoredConfig);
223
+ const { versionId: newVersionId } = await require_server_handlers_version_helpers.createVersionWithRetry(agentsStore, agentId, "agentId", restoredConfig, changedFields, { changeMessage: `Restored from version ${versionToRestore.versionNumber}` });
220
224
  const newVersion = await agentsStore.getVersion(newVersionId);
221
225
  if (!newVersion) throw new require_http_exception.HTTPException(500, { message: "Failed to retrieve created version" });
222
226
  await require_server_handlers_version_helpers.enforceRetentionLimit(agentsStore, agentId, "agentId", agent.activeVersionId);
@@ -284,15 +288,18 @@ const COMPARE_AGENT_VERSIONS_ROUTE = require_route_builder.createRoute({
284
288
  if (!storage) throw new require_http_exception.HTTPException(500, { message: "Storage is not configured" });
285
289
  const agentsStore = await storage.getStore("agents");
286
290
  if (!agentsStore) throw new require_http_exception.HTTPException(500, { message: "Agents storage domain is not available" });
287
- require_utils.assertStoredResourceScope(await agentsStore.getById(agentId), await require_utils.getStoredResourceScope(mastra, requestContext));
291
+ const agent = await agentsStore.getById(agentId);
292
+ require_utils.assertStoredResourceScope(agent, await require_utils.getStoredResourceScope(mastra, requestContext));
288
293
  const fromVersion = await agentsStore.getVersion(from);
289
294
  if (!fromVersion) throw new require_http_exception.HTTPException(404, { message: `Version with id ${from} not found` });
290
295
  if (fromVersion.agentId !== agentId) throw new require_http_exception.HTTPException(404, { message: `Version with id ${from} not found for agent ${agentId}` });
291
296
  const toVersion = await agentsStore.getVersion(to);
292
297
  if (!toVersion) throw new require_http_exception.HTTPException(404, { message: `Version with id ${to} not found` });
293
298
  if (toVersion.agentId !== agentId) throw new require_http_exception.HTTPException(404, { message: `Version with id ${to} not found for agent ${agentId}` });
299
+ const fromConfig = require_server_handlers_version_helpers.extractConfigFromVersion(fromVersion, SNAPSHOT_CONFIG_FIELDS);
300
+ const toConfig = require_server_handlers_version_helpers.extractConfigFromVersion(toVersion, SNAPSHOT_CONFIG_FIELDS);
294
301
  return {
295
- diffs: require_server_handlers_version_helpers.computeVersionDiffs(require_server_handlers_version_helpers.extractConfigFromVersion(fromVersion, SNAPSHOT_CONFIG_FIELDS), require_server_handlers_version_helpers.extractConfigFromVersion(toVersion, SNAPSHOT_CONFIG_FIELDS)),
302
+ diffs: require_server_handlers_version_helpers.computeVersionDiffs(fromConfig, toConfig),
296
303
  fromVersion,
297
304
  toVersion
298
305
  };
@@ -1 +1 @@
1
- {"version":3,"file":"agent-versions.cjs","names":["createRoute","agentVersionPathParams","listVersionsQuerySchema","listVersionsResponseSchema","HTTPException","getStoredResourceScope","handleError","createVersionBodySchema","createVersionResponseSchema","extractConfigFromVersion","calculateChangedFields","createVersionWithRetry","enforceRetentionLimit","versionIdPathParams","getVersionResponseSchema","activateVersionResponseSchema","validateAgentInstructionReferences","restoreVersionResponseSchema","deleteVersionResponseSchema","compareVersionsQuerySchema","compareVersionsResponseSchema","computeVersionDiffs"],"sources":["../../../src/server/handlers/agent-versions.ts"],"sourcesContent":["import type { z } from 'zod/v4';\n\nimport { HTTPException } from '../http-exception';\nimport {\n agentVersionPathParams,\n versionIdPathParams,\n listVersionsQuerySchema,\n createVersionBodySchema,\n compareVersionsQuerySchema,\n listVersionsResponseSchema,\n getVersionResponseSchema,\n createVersionResponseSchema,\n activateVersionResponseSchema,\n restoreVersionResponseSchema,\n deleteVersionResponseSchema,\n compareVersionsResponseSchema,\n} from '../schemas/agent-versions';\nimport type { ServerRoute, RouteSchemas, InferParams } from '../server-adapter/routes';\nimport { createRoute } from '../server-adapter/routes/route-builder';\nimport { assertStoredResourceScope, getStoredResourceScope } from '../utils';\n\nimport { handleError } from './error';\nimport { validateAgentInstructionReferences } from './validate-agent-instructions';\nimport {\n extractConfigFromVersion,\n calculateChangedFields,\n computeVersionDiffs,\n createVersionWithRetry,\n enforceRetentionLimit,\n} from './version-helpers';\nimport type { VersionedStoreInterface } from './version-helpers';\n\n/**\n * The config field names that live on version rows (StorageAgentSnapshotType fields).\n * Used to extract config from a version record for comparison and restoration.\n */\nconst SNAPSHOT_CONFIG_FIELDS = [\n 'name',\n 'description',\n 'instructions',\n 'model',\n 'tools',\n 'defaultOptions',\n 'workflows',\n 'agents',\n 'integrationTools',\n 'inputProcessors',\n 'outputProcessors',\n 'memory',\n 'scorers',\n 'requestContextSchema',\n 'mcpClients',\n] as const;\n\n// ============================================================================\n// Route Definitions\n// ============================================================================\n\n/**\n * GET /stored/agents/:agentId/versions - List all versions for an agent\n */\nexport const LIST_AGENT_VERSIONS_ROUTE = createRoute({\n method: 'GET',\n path: '/stored/agents/:agentId/versions',\n requiresAuth: true,\n responseType: 'json',\n pathParamSchema: agentVersionPathParams,\n queryParamSchema: listVersionsQuerySchema,\n responseSchema: listVersionsResponseSchema,\n summary: 'List agent versions',\n description: 'Returns a paginated list of all versions for a stored agent',\n tags: ['Agent Versions'],\n handler: async ({ mastra, agentId, page, perPage, orderBy, requestContext }) => {\n try {\n const storage = mastra.getStorage();\n\n if (!storage) {\n throw new HTTPException(500, { message: 'Storage is not configured' });\n }\n\n const agentsStore = await storage.getStore('agents');\n if (!agentsStore) {\n throw new HTTPException(500, { message: 'Agents storage domain is not available' });\n }\n\n // Verify agent exists in code or storage\n const storedAgent = await agentsStore.getById(agentId);\n let codeAgentExists = false;\n try {\n mastra.getAgentById(agentId);\n codeAgentExists = true;\n } catch {\n // Agent not registered in code\n }\n\n if (!storedAgent && !codeAgentExists) {\n throw new HTTPException(404, { message: `Agent with id ${agentId} not found` });\n }\n assertStoredResourceScope(storedAgent, await getStoredResourceScope(mastra, requestContext));\n\n const result = await agentsStore.listVersions({\n agentId,\n page,\n perPage,\n orderBy,\n });\n\n return result;\n } catch (error) {\n return handleError(error, 'Error listing agent versions');\n }\n },\n});\n\n/**\n * POST /stored/agents/:agentId/versions - Create a new version snapshot\n */\nexport const CREATE_AGENT_VERSION_ROUTE = createRoute({\n method: 'POST',\n path: '/stored/agents/:agentId/versions',\n requiresAuth: true,\n responseType: 'json',\n pathParamSchema: agentVersionPathParams,\n bodySchema: createVersionBodySchema,\n responseSchema: createVersionResponseSchema,\n summary: 'Create agent version',\n description: 'Creates a new version snapshot of the current agent configuration',\n tags: ['Agent Versions'],\n handler: async ({ mastra, agentId, changeMessage, requestContext }) => {\n try {\n const storage = mastra.getStorage();\n\n if (!storage) {\n throw new HTTPException(500, { message: 'Storage is not configured' });\n }\n\n const agentsStore = await storage.getStore('agents');\n if (!agentsStore) {\n throw new HTTPException(500, { message: 'Agents storage domain is not available' });\n }\n\n // Get the current agent to find its active version\n const agent = await agentsStore.getById(agentId);\n if (!agent) {\n throw new HTTPException(404, { message: `Agent with id ${agentId} not found` });\n }\n assertStoredResourceScope(agent, await getStoredResourceScope(mastra, requestContext));\n\n // Get the current active version to snapshot its config\n let currentConfig: Record<string, unknown> = {};\n if (agent.activeVersionId) {\n const activeVersion = await agentsStore.getVersion(agent.activeVersionId);\n if (activeVersion) {\n currentConfig = extractConfigFromVersion(\n activeVersion as unknown as Record<string, unknown>,\n SNAPSHOT_CONFIG_FIELDS,\n );\n }\n }\n\n // Get the latest version to calculate changed fields\n const latestVersion = await agentsStore.getLatestVersion(agentId);\n\n // If no activeVersionId, fall back to latest version config\n if (!agent.activeVersionId && latestVersion) {\n currentConfig = extractConfigFromVersion(\n latestVersion as unknown as Record<string, unknown>,\n SNAPSHOT_CONFIG_FIELDS,\n );\n }\n const previousConfig = latestVersion\n ? extractConfigFromVersion(latestVersion as unknown as Record<string, unknown>, SNAPSHOT_CONFIG_FIELDS)\n : null;\n\n const changedFields = calculateChangedFields(previousConfig, currentConfig);\n\n // Create the new version with retry logic to handle race conditions\n // Config fields are passed top-level\n const { versionId } = await createVersionWithRetry(\n agentsStore as unknown as VersionedStoreInterface,\n agentId,\n 'agentId',\n currentConfig,\n changedFields,\n { changeMessage },\n );\n\n // Get the created version to return\n const version = await agentsStore.getVersion(versionId);\n if (!version) {\n throw new HTTPException(500, { message: 'Failed to retrieve created version' });\n }\n\n // Enforce retention limit - delete oldest versions if we exceed the max\n await enforceRetentionLimit(\n agentsStore as unknown as VersionedStoreInterface,\n agentId,\n 'agentId',\n agent.activeVersionId,\n );\n\n return version;\n } catch (error) {\n return handleError(error, 'Error creating agent version');\n }\n },\n});\n\n/**\n * GET /stored/agents/:agentId/versions/:versionId - Get a specific version\n */\nexport const GET_AGENT_VERSION_ROUTE = createRoute({\n method: 'GET',\n path: '/stored/agents/:agentId/versions/:versionId',\n requiresAuth: true,\n responseType: 'json',\n pathParamSchema: versionIdPathParams,\n responseSchema: getVersionResponseSchema,\n summary: 'Get agent version',\n description: 'Returns a specific version of an agent by its version ID',\n tags: ['Agent Versions'],\n handler: async ({ mastra, agentId, versionId, requestContext }) => {\n try {\n const storage = mastra.getStorage();\n\n if (!storage) {\n throw new HTTPException(500, { message: 'Storage is not configured' });\n }\n\n const agentsStore = await storage.getStore('agents');\n if (!agentsStore) {\n throw new HTTPException(500, { message: 'Agents storage domain is not available' });\n }\n\n const version = await agentsStore.getVersion(versionId);\n\n if (!version) {\n throw new HTTPException(404, { message: `Version with id ${versionId} not found` });\n }\n\n // Verify the version belongs to the specified agent\n if (version.agentId !== agentId) {\n throw new HTTPException(404, { message: `Version with id ${versionId} not found for agent ${agentId}` });\n }\n const agent = await agentsStore.getById(agentId);\n assertStoredResourceScope(agent, await getStoredResourceScope(mastra, requestContext));\n\n return version;\n } catch (error) {\n return handleError(error, 'Error getting agent version');\n }\n },\n});\n\n/**\n * POST /stored/agents/:agentId/versions/:versionId/activate - Set a version as active\n */\nexport const ACTIVATE_AGENT_VERSION_ROUTE = createRoute({\n method: 'POST',\n path: '/stored/agents/:agentId/versions/:versionId/activate',\n requiresAuth: true,\n responseType: 'json',\n pathParamSchema: versionIdPathParams,\n responseSchema: activateVersionResponseSchema,\n summary: 'Activate agent version',\n description: 'Sets a specific version as the active version for the agent',\n tags: ['Agent Versions'],\n handler: async ({ mastra, agentId, versionId, requestContext }) => {\n try {\n const storage = mastra.getStorage();\n\n if (!storage) {\n throw new HTTPException(500, { message: 'Storage is not configured' });\n }\n\n const agentsStore = await storage.getStore('agents');\n if (!agentsStore) {\n throw new HTTPException(500, { message: 'Agents storage domain is not available' });\n }\n\n // Verify agent exists\n const agent = await agentsStore.getById(agentId);\n if (!agent) {\n throw new HTTPException(404, { message: `Agent with id ${agentId} not found` });\n }\n assertStoredResourceScope(agent, await getStoredResourceScope(mastra, requestContext));\n\n // Verify version exists and belongs to this agent\n const version = await agentsStore.getVersion(versionId);\n if (!version) {\n throw new HTTPException(404, { message: `Version with id ${versionId} not found` });\n }\n if (version.agentId !== agentId) {\n throw new HTTPException(404, { message: `Version with id ${versionId} not found for agent ${agentId}` });\n }\n\n await validateAgentInstructionReferences({\n instructions: version.instructions,\n mastra,\n requestContext,\n });\n\n // Update the agent's activeVersionId AND status to 'published'\n await agentsStore.update({\n id: agentId,\n activeVersionId: versionId,\n status: 'published',\n });\n\n // Clear the editor cache so subsequent requests see the new active version\n mastra.getEditor()?.agent.clearCache(agentId);\n\n return {\n success: true,\n message: `Version ${version.versionNumber} is now active`,\n activeVersionId: versionId,\n };\n } catch (error) {\n return handleError(error, 'Error activating agent version');\n }\n },\n});\n\n/**\n * POST /stored/agents/:agentId/versions/:versionId/restore - Restore agent to a version\n */\nexport const RESTORE_AGENT_VERSION_ROUTE = createRoute({\n method: 'POST',\n path: '/stored/agents/:agentId/versions/:versionId/restore',\n requiresAuth: true,\n responseType: 'json',\n pathParamSchema: versionIdPathParams,\n responseSchema: restoreVersionResponseSchema,\n summary: 'Restore agent version',\n description: 'Restores the agent configuration from a version, creating a new version',\n tags: ['Agent Versions'],\n handler: async ({ mastra, agentId, versionId, requestContext }) => {\n try {\n const storage = mastra.getStorage();\n\n if (!storage) {\n throw new HTTPException(500, { message: 'Storage is not configured' });\n }\n\n const agentsStore = await storage.getStore('agents');\n if (!agentsStore) {\n throw new HTTPException(500, { message: 'Agents storage domain is not available' });\n }\n\n // Verify agent exists\n const agent = await agentsStore.getById(agentId);\n if (!agent) {\n throw new HTTPException(404, { message: `Agent with id ${agentId} not found` });\n }\n assertStoredResourceScope(agent, await getStoredResourceScope(mastra, requestContext));\n\n // Get the version to restore\n const versionToRestore = await agentsStore.getVersion(versionId);\n if (!versionToRestore) {\n throw new HTTPException(404, { message: `Version with id ${versionId} not found` });\n }\n if (versionToRestore.agentId !== agentId) {\n throw new HTTPException(404, { message: `Version with id ${versionId} not found for agent ${agentId}` });\n }\n\n // Extract the config fields from the version to restore (top-level, no .snapshot)\n const restoredConfig = extractConfigFromVersion(\n versionToRestore as unknown as Record<string, unknown>,\n SNAPSHOT_CONFIG_FIELDS,\n );\n\n // Update the agent with the config from the version to restore\n await agentsStore.update({\n id: agentId,\n ...restoredConfig,\n });\n\n // Get the latest version to calculate changed fields\n const latestVersion = await agentsStore.getLatestVersion(agentId);\n const previousConfig = latestVersion\n ? extractConfigFromVersion(latestVersion as unknown as Record<string, unknown>, SNAPSHOT_CONFIG_FIELDS)\n : null;\n\n const changedFields = calculateChangedFields(previousConfig, restoredConfig);\n\n // Create a new version with retry logic to handle race conditions\n // Config fields are passed top-level\n const { versionId: newVersionId } = await createVersionWithRetry(\n agentsStore as unknown as VersionedStoreInterface,\n agentId,\n 'agentId',\n restoredConfig,\n changedFields,\n {\n changeMessage: `Restored from version ${versionToRestore.versionNumber}`,\n },\n );\n\n // Do NOT auto-activate the restored version - user must explicitly activate it\n\n // Get the created version to return\n const newVersion = await agentsStore.getVersion(newVersionId);\n if (!newVersion) {\n throw new HTTPException(500, { message: 'Failed to retrieve created version' });\n }\n\n // Enforce retention limit - delete oldest versions if we exceed the max\n // Use the agent's existing activeVersionId\n await enforceRetentionLimit(\n agentsStore as unknown as VersionedStoreInterface,\n agentId,\n 'agentId',\n agent.activeVersionId,\n );\n\n // Clear the editor cache so subsequent requests see the restored config\n mastra.getEditor()?.agent.clearCache(agentId);\n\n return newVersion;\n } catch (error) {\n return handleError(error, 'Error restoring agent version');\n }\n },\n});\n\n/**\n * DELETE /stored/agents/:agentId/versions/:versionId - Delete a version\n */\nexport const DELETE_AGENT_VERSION_ROUTE = createRoute({\n method: 'DELETE',\n path: '/stored/agents/:agentId/versions/:versionId',\n requiresAuth: true,\n responseType: 'json',\n pathParamSchema: versionIdPathParams,\n responseSchema: deleteVersionResponseSchema,\n summary: 'Delete agent version',\n description: 'Deletes a specific version (cannot delete the active version)',\n tags: ['Agent Versions'],\n handler: async ({ mastra, agentId, versionId, requestContext }) => {\n try {\n const storage = mastra.getStorage();\n\n if (!storage) {\n throw new HTTPException(500, { message: 'Storage is not configured' });\n }\n\n const agentsStore = await storage.getStore('agents');\n if (!agentsStore) {\n throw new HTTPException(500, { message: 'Agents storage domain is not available' });\n }\n\n // Verify agent exists\n const agent = await agentsStore.getById(agentId);\n if (!agent) {\n throw new HTTPException(404, { message: `Agent with id ${agentId} not found` });\n }\n assertStoredResourceScope(agent, await getStoredResourceScope(mastra, requestContext));\n\n // Verify version exists and belongs to this agent\n const version = await agentsStore.getVersion(versionId);\n if (!version) {\n throw new HTTPException(404, { message: `Version with id ${versionId} not found` });\n }\n if (version.agentId !== agentId) {\n throw new HTTPException(404, { message: `Version with id ${versionId} not found for agent ${agentId}` });\n }\n\n // Check if this is the active version\n if (agent.activeVersionId === versionId) {\n throw new HTTPException(400, {\n message: 'Cannot delete the active version. Activate a different version first.',\n });\n }\n\n await agentsStore.deleteVersion(versionId);\n\n // Clear the editor cache in case the deleted version affected resolution\n mastra.getEditor()?.agent.clearCache(agentId);\n\n return {\n success: true,\n message: `Version ${version.versionNumber} deleted successfully`,\n };\n } catch (error) {\n return handleError(error, 'Error deleting agent version');\n }\n },\n});\n\n/**\n * GET /stored/agents/:agentId/versions/compare - Compare two versions\n */\nexport const COMPARE_AGENT_VERSIONS_ROUTE: ServerRoute<\n InferParams<typeof agentVersionPathParams, typeof compareVersionsQuerySchema, undefined>,\n z.infer<typeof compareVersionsResponseSchema>,\n 'json',\n RouteSchemas<\n typeof agentVersionPathParams,\n typeof compareVersionsQuerySchema,\n undefined,\n typeof compareVersionsResponseSchema\n >,\n 'GET',\n '/stored/agents/:agentId/versions/compare'\n> = createRoute({\n method: 'GET',\n path: '/stored/agents/:agentId/versions/compare',\n requiresAuth: true,\n responseType: 'json',\n pathParamSchema: agentVersionPathParams,\n queryParamSchema: compareVersionsQuerySchema,\n responseSchema: compareVersionsResponseSchema,\n summary: 'Compare agent versions',\n description: 'Compares two versions and returns the differences between them',\n tags: ['Agent Versions'],\n handler: async ({ mastra, agentId, from, to, requestContext }) => {\n try {\n const storage = mastra.getStorage();\n\n if (!storage) {\n throw new HTTPException(500, { message: 'Storage is not configured' });\n }\n\n const agentsStore = await storage.getStore('agents');\n if (!agentsStore) {\n throw new HTTPException(500, { message: 'Agents storage domain is not available' });\n }\n const agent = await agentsStore.getById(agentId);\n assertStoredResourceScope(agent, await getStoredResourceScope(mastra, requestContext));\n\n // Get both versions\n const fromVersion = await agentsStore.getVersion(from);\n if (!fromVersion) {\n throw new HTTPException(404, { message: `Version with id ${from} not found` });\n }\n if (fromVersion.agentId !== agentId) {\n throw new HTTPException(404, { message: `Version with id ${from} not found for agent ${agentId}` });\n }\n\n const toVersion = await agentsStore.getVersion(to);\n if (!toVersion) {\n throw new HTTPException(404, { message: `Version with id ${to} not found` });\n }\n if (toVersion.agentId !== agentId) {\n throw new HTTPException(404, { message: `Version with id ${to} not found for agent ${agentId}` });\n }\n\n // Extract config fields from both versions (top-level, no .snapshot)\n const fromConfig = extractConfigFromVersion(\n fromVersion as unknown as Record<string, unknown>,\n SNAPSHOT_CONFIG_FIELDS,\n );\n const toConfig = extractConfigFromVersion(\n toVersion as unknown as Record<string, unknown>,\n SNAPSHOT_CONFIG_FIELDS,\n );\n\n // Compute diffs on the config fields\n const diffs = computeVersionDiffs(fromConfig, toConfig);\n\n return {\n diffs,\n fromVersion,\n toVersion,\n };\n } catch (error) {\n return handleError(error, 'Error comparing agent versions');\n }\n },\n});\n"],"mappings":"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"}
1
+ {"version":3,"file":"agent-versions.cjs","names":["createRoute","agentVersionPathParams","listVersionsQuerySchema","listVersionsResponseSchema","HTTPException","getStoredResourceScope","handleError","createVersionBodySchema","createVersionResponseSchema","extractConfigFromVersion","calculateChangedFields","createVersionWithRetry","enforceRetentionLimit","versionIdPathParams","getVersionResponseSchema","activateVersionResponseSchema","validateAgentInstructionReferences","restoreVersionResponseSchema","deleteVersionResponseSchema","compareVersionsQuerySchema","compareVersionsResponseSchema","computeVersionDiffs"],"sources":["../../../src/server/handlers/agent-versions.ts"],"sourcesContent":["import type { z } from 'zod/v4';\n\nimport { HTTPException } from '../http-exception';\nimport {\n agentVersionPathParams,\n versionIdPathParams,\n listVersionsQuerySchema,\n createVersionBodySchema,\n compareVersionsQuerySchema,\n listVersionsResponseSchema,\n getVersionResponseSchema,\n createVersionResponseSchema,\n activateVersionResponseSchema,\n restoreVersionResponseSchema,\n deleteVersionResponseSchema,\n compareVersionsResponseSchema,\n} from '../schemas/agent-versions';\nimport type { ServerRoute, RouteSchemas, InferParams } from '../server-adapter/routes';\nimport { createRoute } from '../server-adapter/routes/route-builder';\nimport { assertStoredResourceScope, getStoredResourceScope } from '../utils';\n\nimport { handleError } from './error';\nimport { validateAgentInstructionReferences } from './validate-agent-instructions';\nimport {\n extractConfigFromVersion,\n calculateChangedFields,\n computeVersionDiffs,\n createVersionWithRetry,\n enforceRetentionLimit,\n} from './version-helpers';\nimport type { VersionedStoreInterface } from './version-helpers';\n\n/**\n * The config field names that live on version rows (StorageAgentSnapshotType fields).\n * Used to extract config from a version record for comparison and restoration.\n */\nconst SNAPSHOT_CONFIG_FIELDS = [\n 'name',\n 'description',\n 'instructions',\n 'model',\n 'tools',\n 'defaultOptions',\n 'workflows',\n 'agents',\n 'integrationTools',\n 'inputProcessors',\n 'outputProcessors',\n 'memory',\n 'scorers',\n 'requestContextSchema',\n 'mcpClients',\n] as const;\n\n// ============================================================================\n// Route Definitions\n// ============================================================================\n\n/**\n * GET /stored/agents/:agentId/versions - List all versions for an agent\n */\nexport const LIST_AGENT_VERSIONS_ROUTE = createRoute({\n method: 'GET',\n path: '/stored/agents/:agentId/versions',\n requiresAuth: true,\n responseType: 'json',\n pathParamSchema: agentVersionPathParams,\n queryParamSchema: listVersionsQuerySchema,\n responseSchema: listVersionsResponseSchema,\n summary: 'List agent versions',\n description: 'Returns a paginated list of all versions for a stored agent',\n tags: ['Agent Versions'],\n handler: async ({ mastra, agentId, page, perPage, orderBy, requestContext }) => {\n try {\n const storage = mastra.getStorage();\n\n if (!storage) {\n throw new HTTPException(500, { message: 'Storage is not configured' });\n }\n\n const agentsStore = await storage.getStore('agents');\n if (!agentsStore) {\n throw new HTTPException(500, { message: 'Agents storage domain is not available' });\n }\n\n // Verify agent exists in code or storage\n const storedAgent = await agentsStore.getById(agentId);\n let codeAgentExists = false;\n try {\n mastra.getAgentById(agentId);\n codeAgentExists = true;\n } catch {\n // Agent not registered in code\n }\n\n if (!storedAgent && !codeAgentExists) {\n throw new HTTPException(404, { message: `Agent with id ${agentId} not found` });\n }\n assertStoredResourceScope(storedAgent, await getStoredResourceScope(mastra, requestContext));\n\n const result = await agentsStore.listVersions({\n agentId,\n page,\n perPage,\n orderBy,\n });\n\n return result;\n } catch (error) {\n return handleError(error, 'Error listing agent versions');\n }\n },\n});\n\n/**\n * POST /stored/agents/:agentId/versions - Create a new version snapshot\n */\nexport const CREATE_AGENT_VERSION_ROUTE = createRoute({\n method: 'POST',\n path: '/stored/agents/:agentId/versions',\n requiresAuth: true,\n responseType: 'json',\n pathParamSchema: agentVersionPathParams,\n bodySchema: createVersionBodySchema,\n responseSchema: createVersionResponseSchema,\n summary: 'Create agent version',\n description: 'Creates a new version snapshot of the current agent configuration',\n tags: ['Agent Versions'],\n handler: async ({ mastra, agentId, changeMessage, requestContext }) => {\n try {\n const storage = mastra.getStorage();\n\n if (!storage) {\n throw new HTTPException(500, { message: 'Storage is not configured' });\n }\n\n const agentsStore = await storage.getStore('agents');\n if (!agentsStore) {\n throw new HTTPException(500, { message: 'Agents storage domain is not available' });\n }\n\n // Get the current agent to find its active version\n const agent = await agentsStore.getById(agentId);\n if (!agent) {\n throw new HTTPException(404, { message: `Agent with id ${agentId} not found` });\n }\n assertStoredResourceScope(agent, await getStoredResourceScope(mastra, requestContext));\n\n // Get the current active version to snapshot its config\n let currentConfig: Record<string, unknown> = {};\n if (agent.activeVersionId) {\n const activeVersion = await agentsStore.getVersion(agent.activeVersionId);\n if (activeVersion) {\n currentConfig = extractConfigFromVersion(\n activeVersion as unknown as Record<string, unknown>,\n SNAPSHOT_CONFIG_FIELDS,\n );\n }\n }\n\n // Get the latest version to calculate changed fields\n const latestVersion = await agentsStore.getLatestVersion(agentId);\n\n // If no activeVersionId, fall back to latest version config\n if (!agent.activeVersionId && latestVersion) {\n currentConfig = extractConfigFromVersion(\n latestVersion as unknown as Record<string, unknown>,\n SNAPSHOT_CONFIG_FIELDS,\n );\n }\n const previousConfig = latestVersion\n ? extractConfigFromVersion(latestVersion as unknown as Record<string, unknown>, SNAPSHOT_CONFIG_FIELDS)\n : null;\n\n const changedFields = calculateChangedFields(previousConfig, currentConfig);\n\n // Create the new version with retry logic to handle race conditions\n // Config fields are passed top-level\n const { versionId } = await createVersionWithRetry(\n agentsStore as unknown as VersionedStoreInterface,\n agentId,\n 'agentId',\n currentConfig,\n changedFields,\n { changeMessage },\n );\n\n // Get the created version to return\n const version = await agentsStore.getVersion(versionId);\n if (!version) {\n throw new HTTPException(500, { message: 'Failed to retrieve created version' });\n }\n\n // Enforce retention limit - delete oldest versions if we exceed the max\n await enforceRetentionLimit(\n agentsStore as unknown as VersionedStoreInterface,\n agentId,\n 'agentId',\n agent.activeVersionId,\n );\n\n return version;\n } catch (error) {\n return handleError(error, 'Error creating agent version');\n }\n },\n});\n\n/**\n * GET /stored/agents/:agentId/versions/:versionId - Get a specific version\n */\nexport const GET_AGENT_VERSION_ROUTE = createRoute({\n method: 'GET',\n path: '/stored/agents/:agentId/versions/:versionId',\n requiresAuth: true,\n responseType: 'json',\n pathParamSchema: versionIdPathParams,\n responseSchema: getVersionResponseSchema,\n summary: 'Get agent version',\n description: 'Returns a specific version of an agent by its version ID',\n tags: ['Agent Versions'],\n handler: async ({ mastra, agentId, versionId, requestContext }) => {\n try {\n const storage = mastra.getStorage();\n\n if (!storage) {\n throw new HTTPException(500, { message: 'Storage is not configured' });\n }\n\n const agentsStore = await storage.getStore('agents');\n if (!agentsStore) {\n throw new HTTPException(500, { message: 'Agents storage domain is not available' });\n }\n\n const version = await agentsStore.getVersion(versionId);\n\n if (!version) {\n throw new HTTPException(404, { message: `Version with id ${versionId} not found` });\n }\n\n // Verify the version belongs to the specified agent\n if (version.agentId !== agentId) {\n throw new HTTPException(404, { message: `Version with id ${versionId} not found for agent ${agentId}` });\n }\n const agent = await agentsStore.getById(agentId);\n assertStoredResourceScope(agent, await getStoredResourceScope(mastra, requestContext));\n\n return version;\n } catch (error) {\n return handleError(error, 'Error getting agent version');\n }\n },\n});\n\n/**\n * POST /stored/agents/:agentId/versions/:versionId/activate - Set a version as active\n */\nexport const ACTIVATE_AGENT_VERSION_ROUTE = createRoute({\n method: 'POST',\n path: '/stored/agents/:agentId/versions/:versionId/activate',\n requiresAuth: true,\n responseType: 'json',\n pathParamSchema: versionIdPathParams,\n responseSchema: activateVersionResponseSchema,\n summary: 'Activate agent version',\n description: 'Sets a specific version as the active version for the agent',\n tags: ['Agent Versions'],\n handler: async ({ mastra, agentId, versionId, requestContext }) => {\n try {\n const storage = mastra.getStorage();\n\n if (!storage) {\n throw new HTTPException(500, { message: 'Storage is not configured' });\n }\n\n const agentsStore = await storage.getStore('agents');\n if (!agentsStore) {\n throw new HTTPException(500, { message: 'Agents storage domain is not available' });\n }\n\n // Verify agent exists\n const agent = await agentsStore.getById(agentId);\n if (!agent) {\n throw new HTTPException(404, { message: `Agent with id ${agentId} not found` });\n }\n assertStoredResourceScope(agent, await getStoredResourceScope(mastra, requestContext));\n\n // Verify version exists and belongs to this agent\n const version = await agentsStore.getVersion(versionId);\n if (!version) {\n throw new HTTPException(404, { message: `Version with id ${versionId} not found` });\n }\n if (version.agentId !== agentId) {\n throw new HTTPException(404, { message: `Version with id ${versionId} not found for agent ${agentId}` });\n }\n\n await validateAgentInstructionReferences({\n instructions: version.instructions,\n mastra,\n requestContext,\n });\n\n // Update the agent's activeVersionId AND status to 'published'\n await agentsStore.update({\n id: agentId,\n activeVersionId: versionId,\n status: 'published',\n });\n\n // Clear the editor cache so subsequent requests see the new active version\n mastra.getEditor()?.agent.clearCache(agentId);\n\n return {\n success: true,\n message: `Version ${version.versionNumber} is now active`,\n activeVersionId: versionId,\n };\n } catch (error) {\n return handleError(error, 'Error activating agent version');\n }\n },\n});\n\n/**\n * POST /stored/agents/:agentId/versions/:versionId/restore - Restore agent to a version\n */\nexport const RESTORE_AGENT_VERSION_ROUTE = createRoute({\n method: 'POST',\n path: '/stored/agents/:agentId/versions/:versionId/restore',\n requiresAuth: true,\n responseType: 'json',\n pathParamSchema: versionIdPathParams,\n responseSchema: restoreVersionResponseSchema,\n summary: 'Restore agent version',\n description: 'Restores the agent configuration from a version, creating a new version',\n tags: ['Agent Versions'],\n handler: async ({ mastra, agentId, versionId, requestContext }) => {\n try {\n const storage = mastra.getStorage();\n\n if (!storage) {\n throw new HTTPException(500, { message: 'Storage is not configured' });\n }\n\n const agentsStore = await storage.getStore('agents');\n if (!agentsStore) {\n throw new HTTPException(500, { message: 'Agents storage domain is not available' });\n }\n\n // Verify agent exists\n const agent = await agentsStore.getById(agentId);\n if (!agent) {\n throw new HTTPException(404, { message: `Agent with id ${agentId} not found` });\n }\n assertStoredResourceScope(agent, await getStoredResourceScope(mastra, requestContext));\n\n // Get the version to restore\n const versionToRestore = await agentsStore.getVersion(versionId);\n if (!versionToRestore) {\n throw new HTTPException(404, { message: `Version with id ${versionId} not found` });\n }\n if (versionToRestore.agentId !== agentId) {\n throw new HTTPException(404, { message: `Version with id ${versionId} not found for agent ${agentId}` });\n }\n\n // Extract the config fields from the version to restore (top-level, no .snapshot)\n const restoredConfig = extractConfigFromVersion(\n versionToRestore as unknown as Record<string, unknown>,\n SNAPSHOT_CONFIG_FIELDS,\n );\n\n // Update the agent with the config from the version to restore\n await agentsStore.update({\n id: agentId,\n ...restoredConfig,\n });\n\n // Get the latest version to calculate changed fields\n const latestVersion = await agentsStore.getLatestVersion(agentId);\n const previousConfig = latestVersion\n ? extractConfigFromVersion(latestVersion as unknown as Record<string, unknown>, SNAPSHOT_CONFIG_FIELDS)\n : null;\n\n const changedFields = calculateChangedFields(previousConfig, restoredConfig);\n\n // Create a new version with retry logic to handle race conditions\n // Config fields are passed top-level\n const { versionId: newVersionId } = await createVersionWithRetry(\n agentsStore as unknown as VersionedStoreInterface,\n agentId,\n 'agentId',\n restoredConfig,\n changedFields,\n {\n changeMessage: `Restored from version ${versionToRestore.versionNumber}`,\n },\n );\n\n // Do NOT auto-activate the restored version - user must explicitly activate it\n\n // Get the created version to return\n const newVersion = await agentsStore.getVersion(newVersionId);\n if (!newVersion) {\n throw new HTTPException(500, { message: 'Failed to retrieve created version' });\n }\n\n // Enforce retention limit - delete oldest versions if we exceed the max\n // Use the agent's existing activeVersionId\n await enforceRetentionLimit(\n agentsStore as unknown as VersionedStoreInterface,\n agentId,\n 'agentId',\n agent.activeVersionId,\n );\n\n // Clear the editor cache so subsequent requests see the restored config\n mastra.getEditor()?.agent.clearCache(agentId);\n\n return newVersion;\n } catch (error) {\n return handleError(error, 'Error restoring agent version');\n }\n },\n});\n\n/**\n * DELETE /stored/agents/:agentId/versions/:versionId - Delete a version\n */\nexport const DELETE_AGENT_VERSION_ROUTE = createRoute({\n method: 'DELETE',\n path: '/stored/agents/:agentId/versions/:versionId',\n requiresAuth: true,\n responseType: 'json',\n pathParamSchema: versionIdPathParams,\n responseSchema: deleteVersionResponseSchema,\n summary: 'Delete agent version',\n description: 'Deletes a specific version (cannot delete the active version)',\n tags: ['Agent Versions'],\n handler: async ({ mastra, agentId, versionId, requestContext }) => {\n try {\n const storage = mastra.getStorage();\n\n if (!storage) {\n throw new HTTPException(500, { message: 'Storage is not configured' });\n }\n\n const agentsStore = await storage.getStore('agents');\n if (!agentsStore) {\n throw new HTTPException(500, { message: 'Agents storage domain is not available' });\n }\n\n // Verify agent exists\n const agent = await agentsStore.getById(agentId);\n if (!agent) {\n throw new HTTPException(404, { message: `Agent with id ${agentId} not found` });\n }\n assertStoredResourceScope(agent, await getStoredResourceScope(mastra, requestContext));\n\n // Verify version exists and belongs to this agent\n const version = await agentsStore.getVersion(versionId);\n if (!version) {\n throw new HTTPException(404, { message: `Version with id ${versionId} not found` });\n }\n if (version.agentId !== agentId) {\n throw new HTTPException(404, { message: `Version with id ${versionId} not found for agent ${agentId}` });\n }\n\n // Check if this is the active version\n if (agent.activeVersionId === versionId) {\n throw new HTTPException(400, {\n message: 'Cannot delete the active version. Activate a different version first.',\n });\n }\n\n await agentsStore.deleteVersion(versionId);\n\n // Clear the editor cache in case the deleted version affected resolution\n mastra.getEditor()?.agent.clearCache(agentId);\n\n return {\n success: true,\n message: `Version ${version.versionNumber} deleted successfully`,\n };\n } catch (error) {\n return handleError(error, 'Error deleting agent version');\n }\n },\n});\n\n/**\n * GET /stored/agents/:agentId/versions/compare - Compare two versions\n */\nexport const COMPARE_AGENT_VERSIONS_ROUTE: ServerRoute<\n InferParams<typeof agentVersionPathParams, typeof compareVersionsQuerySchema, undefined>,\n z.infer<typeof compareVersionsResponseSchema>,\n 'json',\n RouteSchemas<\n typeof agentVersionPathParams,\n typeof compareVersionsQuerySchema,\n undefined,\n typeof compareVersionsResponseSchema\n >,\n 'GET',\n '/stored/agents/:agentId/versions/compare'\n> = createRoute({\n method: 'GET',\n path: '/stored/agents/:agentId/versions/compare',\n requiresAuth: true,\n responseType: 'json',\n pathParamSchema: agentVersionPathParams,\n queryParamSchema: compareVersionsQuerySchema,\n responseSchema: compareVersionsResponseSchema,\n summary: 'Compare agent versions',\n description: 'Compares two versions and returns the differences between them',\n tags: ['Agent Versions'],\n handler: async ({ mastra, agentId, from, to, requestContext }) => {\n try {\n const storage = mastra.getStorage();\n\n if (!storage) {\n throw new HTTPException(500, { message: 'Storage is not configured' });\n }\n\n const agentsStore = await storage.getStore('agents');\n if (!agentsStore) {\n throw new HTTPException(500, { message: 'Agents storage domain is not available' });\n }\n const agent = await agentsStore.getById(agentId);\n assertStoredResourceScope(agent, await getStoredResourceScope(mastra, requestContext));\n\n // Get both versions\n const fromVersion = await agentsStore.getVersion(from);\n if (!fromVersion) {\n throw new HTTPException(404, { message: `Version with id ${from} not found` });\n }\n if (fromVersion.agentId !== agentId) {\n throw new HTTPException(404, { message: `Version with id ${from} not found for agent ${agentId}` });\n }\n\n const toVersion = await agentsStore.getVersion(to);\n if (!toVersion) {\n throw new HTTPException(404, { message: `Version with id ${to} not found` });\n }\n if (toVersion.agentId !== agentId) {\n throw new HTTPException(404, { message: `Version with id ${to} not found for agent ${agentId}` });\n }\n\n // Extract config fields from both versions (top-level, no .snapshot)\n const fromConfig = extractConfigFromVersion(\n fromVersion as unknown as Record<string, unknown>,\n SNAPSHOT_CONFIG_FIELDS,\n );\n const toConfig = extractConfigFromVersion(\n toVersion as unknown as Record<string, unknown>,\n SNAPSHOT_CONFIG_FIELDS,\n );\n\n // Compute diffs on the config fields\n const diffs = computeVersionDiffs(fromConfig, toConfig);\n\n return {\n diffs,\n fromVersion,\n toVersion,\n };\n } catch (error) {\n return handleError(error, 'Error comparing agent versions');\n }\n },\n});\n"],"mappings":"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"}
@@ -1,6 +1,6 @@
1
1
  import { t as HTTPException } from "../../http-exception-CyfxZB6W.js";
2
- import { n as createRoute } from "../../route-builder-BfQYtclb.js";
3
- import { i as getStoredResourceScope, n as assertStoredResourceScope } from "../../utils-DCAUeb6M.js";
2
+ import { n as createRoute } from "../../route-builder-CjkWxv4E.js";
3
+ import { i as getStoredResourceScope, n as assertStoredResourceScope } from "../../utils-aoLN3Wfi.js";
4
4
  import { handleError } from "./error.js";
5
5
  import { a as createVersionBodySchema, n as compareVersionsQuerySchema, o as deleteVersionResponseSchema, s as listVersionsQuerySchema, t as activateVersionResponseSchema } from "../../version-common-4xFzvCS5.js";
6
6
  import { a as getVersionResponseSchema, c as versionIdPathParams, i as createVersionResponseSchema, o as listVersionsResponseSchema, r as compareVersionsResponseSchema, s as restoreVersionResponseSchema, t as agentVersionPathParams } from "../../agent-versions-W600H1ME.js";
@@ -97,7 +97,8 @@ const CREATE_AGENT_VERSION_ROUTE = createRoute({
97
97
  }
98
98
  const latestVersion = await agentsStore.getLatestVersion(agentId);
99
99
  if (!agent.activeVersionId && latestVersion) currentConfig = extractConfigFromVersion(latestVersion, SNAPSHOT_CONFIG_FIELDS);
100
- const changedFields = calculateChangedFields(latestVersion ? extractConfigFromVersion(latestVersion, SNAPSHOT_CONFIG_FIELDS) : null, currentConfig);
100
+ const previousConfig = latestVersion ? extractConfigFromVersion(latestVersion, SNAPSHOT_CONFIG_FIELDS) : null;
101
+ const changedFields = calculateChangedFields(previousConfig, currentConfig);
101
102
  const { versionId } = await createVersionWithRetry(agentsStore, agentId, "agentId", currentConfig, changedFields, { changeMessage });
102
103
  const version = await agentsStore.getVersion(versionId);
103
104
  if (!version) throw new HTTPException(500, { message: "Failed to retrieve created version" });
@@ -130,7 +131,8 @@ const GET_AGENT_VERSION_ROUTE = createRoute({
130
131
  const version = await agentsStore.getVersion(versionId);
131
132
  if (!version) throw new HTTPException(404, { message: `Version with id ${versionId} not found` });
132
133
  if (version.agentId !== agentId) throw new HTTPException(404, { message: `Version with id ${versionId} not found for agent ${agentId}` });
133
- assertStoredResourceScope(await agentsStore.getById(agentId), await getStoredResourceScope(mastra, requestContext));
134
+ const agent = await agentsStore.getById(agentId);
135
+ assertStoredResourceScope(agent, await getStoredResourceScope(mastra, requestContext));
134
136
  return version;
135
137
  } catch (error) {
136
138
  return handleError(error, "Error getting agent version");
@@ -214,7 +216,9 @@ const RESTORE_AGENT_VERSION_ROUTE = createRoute({
214
216
  ...restoredConfig
215
217
  });
216
218
  const latestVersion = await agentsStore.getLatestVersion(agentId);
217
- const { versionId: newVersionId } = await createVersionWithRetry(agentsStore, agentId, "agentId", restoredConfig, calculateChangedFields(latestVersion ? extractConfigFromVersion(latestVersion, SNAPSHOT_CONFIG_FIELDS) : null, restoredConfig), { changeMessage: `Restored from version ${versionToRestore.versionNumber}` });
219
+ const previousConfig = latestVersion ? extractConfigFromVersion(latestVersion, SNAPSHOT_CONFIG_FIELDS) : null;
220
+ const changedFields = calculateChangedFields(previousConfig, restoredConfig);
221
+ const { versionId: newVersionId } = await createVersionWithRetry(agentsStore, agentId, "agentId", restoredConfig, changedFields, { changeMessage: `Restored from version ${versionToRestore.versionNumber}` });
218
222
  const newVersion = await agentsStore.getVersion(newVersionId);
219
223
  if (!newVersion) throw new HTTPException(500, { message: "Failed to retrieve created version" });
220
224
  await enforceRetentionLimit(agentsStore, agentId, "agentId", agent.activeVersionId);
@@ -282,15 +286,18 @@ const COMPARE_AGENT_VERSIONS_ROUTE = createRoute({
282
286
  if (!storage) throw new HTTPException(500, { message: "Storage is not configured" });
283
287
  const agentsStore = await storage.getStore("agents");
284
288
  if (!agentsStore) throw new HTTPException(500, { message: "Agents storage domain is not available" });
285
- assertStoredResourceScope(await agentsStore.getById(agentId), await getStoredResourceScope(mastra, requestContext));
289
+ const agent = await agentsStore.getById(agentId);
290
+ assertStoredResourceScope(agent, await getStoredResourceScope(mastra, requestContext));
286
291
  const fromVersion = await agentsStore.getVersion(from);
287
292
  if (!fromVersion) throw new HTTPException(404, { message: `Version with id ${from} not found` });
288
293
  if (fromVersion.agentId !== agentId) throw new HTTPException(404, { message: `Version with id ${from} not found for agent ${agentId}` });
289
294
  const toVersion = await agentsStore.getVersion(to);
290
295
  if (!toVersion) throw new HTTPException(404, { message: `Version with id ${to} not found` });
291
296
  if (toVersion.agentId !== agentId) throw new HTTPException(404, { message: `Version with id ${to} not found for agent ${agentId}` });
297
+ const fromConfig = extractConfigFromVersion(fromVersion, SNAPSHOT_CONFIG_FIELDS);
298
+ const toConfig = extractConfigFromVersion(toVersion, SNAPSHOT_CONFIG_FIELDS);
292
299
  return {
293
- diffs: computeVersionDiffs(extractConfigFromVersion(fromVersion, SNAPSHOT_CONFIG_FIELDS), extractConfigFromVersion(toVersion, SNAPSHOT_CONFIG_FIELDS)),
300
+ diffs: computeVersionDiffs(fromConfig, toConfig),
294
301
  fromVersion,
295
302
  toVersion
296
303
  };
@@ -1 +1 @@
1
- {"version":3,"file":"agent-versions.js","names":[],"sources":["../../../src/server/handlers/agent-versions.ts"],"sourcesContent":["import type { z } from 'zod/v4';\n\nimport { HTTPException } from '../http-exception';\nimport {\n agentVersionPathParams,\n versionIdPathParams,\n listVersionsQuerySchema,\n createVersionBodySchema,\n compareVersionsQuerySchema,\n listVersionsResponseSchema,\n getVersionResponseSchema,\n createVersionResponseSchema,\n activateVersionResponseSchema,\n restoreVersionResponseSchema,\n deleteVersionResponseSchema,\n compareVersionsResponseSchema,\n} from '../schemas/agent-versions';\nimport type { ServerRoute, RouteSchemas, InferParams } from '../server-adapter/routes';\nimport { createRoute } from '../server-adapter/routes/route-builder';\nimport { assertStoredResourceScope, getStoredResourceScope } from '../utils';\n\nimport { handleError } from './error';\nimport { validateAgentInstructionReferences } from './validate-agent-instructions';\nimport {\n extractConfigFromVersion,\n calculateChangedFields,\n computeVersionDiffs,\n createVersionWithRetry,\n enforceRetentionLimit,\n} from './version-helpers';\nimport type { VersionedStoreInterface } from './version-helpers';\n\n/**\n * The config field names that live on version rows (StorageAgentSnapshotType fields).\n * Used to extract config from a version record for comparison and restoration.\n */\nconst SNAPSHOT_CONFIG_FIELDS = [\n 'name',\n 'description',\n 'instructions',\n 'model',\n 'tools',\n 'defaultOptions',\n 'workflows',\n 'agents',\n 'integrationTools',\n 'inputProcessors',\n 'outputProcessors',\n 'memory',\n 'scorers',\n 'requestContextSchema',\n 'mcpClients',\n] as const;\n\n// ============================================================================\n// Route Definitions\n// ============================================================================\n\n/**\n * GET /stored/agents/:agentId/versions - List all versions for an agent\n */\nexport const LIST_AGENT_VERSIONS_ROUTE = createRoute({\n method: 'GET',\n path: '/stored/agents/:agentId/versions',\n requiresAuth: true,\n responseType: 'json',\n pathParamSchema: agentVersionPathParams,\n queryParamSchema: listVersionsQuerySchema,\n responseSchema: listVersionsResponseSchema,\n summary: 'List agent versions',\n description: 'Returns a paginated list of all versions for a stored agent',\n tags: ['Agent Versions'],\n handler: async ({ mastra, agentId, page, perPage, orderBy, requestContext }) => {\n try {\n const storage = mastra.getStorage();\n\n if (!storage) {\n throw new HTTPException(500, { message: 'Storage is not configured' });\n }\n\n const agentsStore = await storage.getStore('agents');\n if (!agentsStore) {\n throw new HTTPException(500, { message: 'Agents storage domain is not available' });\n }\n\n // Verify agent exists in code or storage\n const storedAgent = await agentsStore.getById(agentId);\n let codeAgentExists = false;\n try {\n mastra.getAgentById(agentId);\n codeAgentExists = true;\n } catch {\n // Agent not registered in code\n }\n\n if (!storedAgent && !codeAgentExists) {\n throw new HTTPException(404, { message: `Agent with id ${agentId} not found` });\n }\n assertStoredResourceScope(storedAgent, await getStoredResourceScope(mastra, requestContext));\n\n const result = await agentsStore.listVersions({\n agentId,\n page,\n perPage,\n orderBy,\n });\n\n return result;\n } catch (error) {\n return handleError(error, 'Error listing agent versions');\n }\n },\n});\n\n/**\n * POST /stored/agents/:agentId/versions - Create a new version snapshot\n */\nexport const CREATE_AGENT_VERSION_ROUTE = createRoute({\n method: 'POST',\n path: '/stored/agents/:agentId/versions',\n requiresAuth: true,\n responseType: 'json',\n pathParamSchema: agentVersionPathParams,\n bodySchema: createVersionBodySchema,\n responseSchema: createVersionResponseSchema,\n summary: 'Create agent version',\n description: 'Creates a new version snapshot of the current agent configuration',\n tags: ['Agent Versions'],\n handler: async ({ mastra, agentId, changeMessage, requestContext }) => {\n try {\n const storage = mastra.getStorage();\n\n if (!storage) {\n throw new HTTPException(500, { message: 'Storage is not configured' });\n }\n\n const agentsStore = await storage.getStore('agents');\n if (!agentsStore) {\n throw new HTTPException(500, { message: 'Agents storage domain is not available' });\n }\n\n // Get the current agent to find its active version\n const agent = await agentsStore.getById(agentId);\n if (!agent) {\n throw new HTTPException(404, { message: `Agent with id ${agentId} not found` });\n }\n assertStoredResourceScope(agent, await getStoredResourceScope(mastra, requestContext));\n\n // Get the current active version to snapshot its config\n let currentConfig: Record<string, unknown> = {};\n if (agent.activeVersionId) {\n const activeVersion = await agentsStore.getVersion(agent.activeVersionId);\n if (activeVersion) {\n currentConfig = extractConfigFromVersion(\n activeVersion as unknown as Record<string, unknown>,\n SNAPSHOT_CONFIG_FIELDS,\n );\n }\n }\n\n // Get the latest version to calculate changed fields\n const latestVersion = await agentsStore.getLatestVersion(agentId);\n\n // If no activeVersionId, fall back to latest version config\n if (!agent.activeVersionId && latestVersion) {\n currentConfig = extractConfigFromVersion(\n latestVersion as unknown as Record<string, unknown>,\n SNAPSHOT_CONFIG_FIELDS,\n );\n }\n const previousConfig = latestVersion\n ? extractConfigFromVersion(latestVersion as unknown as Record<string, unknown>, SNAPSHOT_CONFIG_FIELDS)\n : null;\n\n const changedFields = calculateChangedFields(previousConfig, currentConfig);\n\n // Create the new version with retry logic to handle race conditions\n // Config fields are passed top-level\n const { versionId } = await createVersionWithRetry(\n agentsStore as unknown as VersionedStoreInterface,\n agentId,\n 'agentId',\n currentConfig,\n changedFields,\n { changeMessage },\n );\n\n // Get the created version to return\n const version = await agentsStore.getVersion(versionId);\n if (!version) {\n throw new HTTPException(500, { message: 'Failed to retrieve created version' });\n }\n\n // Enforce retention limit - delete oldest versions if we exceed the max\n await enforceRetentionLimit(\n agentsStore as unknown as VersionedStoreInterface,\n agentId,\n 'agentId',\n agent.activeVersionId,\n );\n\n return version;\n } catch (error) {\n return handleError(error, 'Error creating agent version');\n }\n },\n});\n\n/**\n * GET /stored/agents/:agentId/versions/:versionId - Get a specific version\n */\nexport const GET_AGENT_VERSION_ROUTE = createRoute({\n method: 'GET',\n path: '/stored/agents/:agentId/versions/:versionId',\n requiresAuth: true,\n responseType: 'json',\n pathParamSchema: versionIdPathParams,\n responseSchema: getVersionResponseSchema,\n summary: 'Get agent version',\n description: 'Returns a specific version of an agent by its version ID',\n tags: ['Agent Versions'],\n handler: async ({ mastra, agentId, versionId, requestContext }) => {\n try {\n const storage = mastra.getStorage();\n\n if (!storage) {\n throw new HTTPException(500, { message: 'Storage is not configured' });\n }\n\n const agentsStore = await storage.getStore('agents');\n if (!agentsStore) {\n throw new HTTPException(500, { message: 'Agents storage domain is not available' });\n }\n\n const version = await agentsStore.getVersion(versionId);\n\n if (!version) {\n throw new HTTPException(404, { message: `Version with id ${versionId} not found` });\n }\n\n // Verify the version belongs to the specified agent\n if (version.agentId !== agentId) {\n throw new HTTPException(404, { message: `Version with id ${versionId} not found for agent ${agentId}` });\n }\n const agent = await agentsStore.getById(agentId);\n assertStoredResourceScope(agent, await getStoredResourceScope(mastra, requestContext));\n\n return version;\n } catch (error) {\n return handleError(error, 'Error getting agent version');\n }\n },\n});\n\n/**\n * POST /stored/agents/:agentId/versions/:versionId/activate - Set a version as active\n */\nexport const ACTIVATE_AGENT_VERSION_ROUTE = createRoute({\n method: 'POST',\n path: '/stored/agents/:agentId/versions/:versionId/activate',\n requiresAuth: true,\n responseType: 'json',\n pathParamSchema: versionIdPathParams,\n responseSchema: activateVersionResponseSchema,\n summary: 'Activate agent version',\n description: 'Sets a specific version as the active version for the agent',\n tags: ['Agent Versions'],\n handler: async ({ mastra, agentId, versionId, requestContext }) => {\n try {\n const storage = mastra.getStorage();\n\n if (!storage) {\n throw new HTTPException(500, { message: 'Storage is not configured' });\n }\n\n const agentsStore = await storage.getStore('agents');\n if (!agentsStore) {\n throw new HTTPException(500, { message: 'Agents storage domain is not available' });\n }\n\n // Verify agent exists\n const agent = await agentsStore.getById(agentId);\n if (!agent) {\n throw new HTTPException(404, { message: `Agent with id ${agentId} not found` });\n }\n assertStoredResourceScope(agent, await getStoredResourceScope(mastra, requestContext));\n\n // Verify version exists and belongs to this agent\n const version = await agentsStore.getVersion(versionId);\n if (!version) {\n throw new HTTPException(404, { message: `Version with id ${versionId} not found` });\n }\n if (version.agentId !== agentId) {\n throw new HTTPException(404, { message: `Version with id ${versionId} not found for agent ${agentId}` });\n }\n\n await validateAgentInstructionReferences({\n instructions: version.instructions,\n mastra,\n requestContext,\n });\n\n // Update the agent's activeVersionId AND status to 'published'\n await agentsStore.update({\n id: agentId,\n activeVersionId: versionId,\n status: 'published',\n });\n\n // Clear the editor cache so subsequent requests see the new active version\n mastra.getEditor()?.agent.clearCache(agentId);\n\n return {\n success: true,\n message: `Version ${version.versionNumber} is now active`,\n activeVersionId: versionId,\n };\n } catch (error) {\n return handleError(error, 'Error activating agent version');\n }\n },\n});\n\n/**\n * POST /stored/agents/:agentId/versions/:versionId/restore - Restore agent to a version\n */\nexport const RESTORE_AGENT_VERSION_ROUTE = createRoute({\n method: 'POST',\n path: '/stored/agents/:agentId/versions/:versionId/restore',\n requiresAuth: true,\n responseType: 'json',\n pathParamSchema: versionIdPathParams,\n responseSchema: restoreVersionResponseSchema,\n summary: 'Restore agent version',\n description: 'Restores the agent configuration from a version, creating a new version',\n tags: ['Agent Versions'],\n handler: async ({ mastra, agentId, versionId, requestContext }) => {\n try {\n const storage = mastra.getStorage();\n\n if (!storage) {\n throw new HTTPException(500, { message: 'Storage is not configured' });\n }\n\n const agentsStore = await storage.getStore('agents');\n if (!agentsStore) {\n throw new HTTPException(500, { message: 'Agents storage domain is not available' });\n }\n\n // Verify agent exists\n const agent = await agentsStore.getById(agentId);\n if (!agent) {\n throw new HTTPException(404, { message: `Agent with id ${agentId} not found` });\n }\n assertStoredResourceScope(agent, await getStoredResourceScope(mastra, requestContext));\n\n // Get the version to restore\n const versionToRestore = await agentsStore.getVersion(versionId);\n if (!versionToRestore) {\n throw new HTTPException(404, { message: `Version with id ${versionId} not found` });\n }\n if (versionToRestore.agentId !== agentId) {\n throw new HTTPException(404, { message: `Version with id ${versionId} not found for agent ${agentId}` });\n }\n\n // Extract the config fields from the version to restore (top-level, no .snapshot)\n const restoredConfig = extractConfigFromVersion(\n versionToRestore as unknown as Record<string, unknown>,\n SNAPSHOT_CONFIG_FIELDS,\n );\n\n // Update the agent with the config from the version to restore\n await agentsStore.update({\n id: agentId,\n ...restoredConfig,\n });\n\n // Get the latest version to calculate changed fields\n const latestVersion = await agentsStore.getLatestVersion(agentId);\n const previousConfig = latestVersion\n ? extractConfigFromVersion(latestVersion as unknown as Record<string, unknown>, SNAPSHOT_CONFIG_FIELDS)\n : null;\n\n const changedFields = calculateChangedFields(previousConfig, restoredConfig);\n\n // Create a new version with retry logic to handle race conditions\n // Config fields are passed top-level\n const { versionId: newVersionId } = await createVersionWithRetry(\n agentsStore as unknown as VersionedStoreInterface,\n agentId,\n 'agentId',\n restoredConfig,\n changedFields,\n {\n changeMessage: `Restored from version ${versionToRestore.versionNumber}`,\n },\n );\n\n // Do NOT auto-activate the restored version - user must explicitly activate it\n\n // Get the created version to return\n const newVersion = await agentsStore.getVersion(newVersionId);\n if (!newVersion) {\n throw new HTTPException(500, { message: 'Failed to retrieve created version' });\n }\n\n // Enforce retention limit - delete oldest versions if we exceed the max\n // Use the agent's existing activeVersionId\n await enforceRetentionLimit(\n agentsStore as unknown as VersionedStoreInterface,\n agentId,\n 'agentId',\n agent.activeVersionId,\n );\n\n // Clear the editor cache so subsequent requests see the restored config\n mastra.getEditor()?.agent.clearCache(agentId);\n\n return newVersion;\n } catch (error) {\n return handleError(error, 'Error restoring agent version');\n }\n },\n});\n\n/**\n * DELETE /stored/agents/:agentId/versions/:versionId - Delete a version\n */\nexport const DELETE_AGENT_VERSION_ROUTE = createRoute({\n method: 'DELETE',\n path: '/stored/agents/:agentId/versions/:versionId',\n requiresAuth: true,\n responseType: 'json',\n pathParamSchema: versionIdPathParams,\n responseSchema: deleteVersionResponseSchema,\n summary: 'Delete agent version',\n description: 'Deletes a specific version (cannot delete the active version)',\n tags: ['Agent Versions'],\n handler: async ({ mastra, agentId, versionId, requestContext }) => {\n try {\n const storage = mastra.getStorage();\n\n if (!storage) {\n throw new HTTPException(500, { message: 'Storage is not configured' });\n }\n\n const agentsStore = await storage.getStore('agents');\n if (!agentsStore) {\n throw new HTTPException(500, { message: 'Agents storage domain is not available' });\n }\n\n // Verify agent exists\n const agent = await agentsStore.getById(agentId);\n if (!agent) {\n throw new HTTPException(404, { message: `Agent with id ${agentId} not found` });\n }\n assertStoredResourceScope(agent, await getStoredResourceScope(mastra, requestContext));\n\n // Verify version exists and belongs to this agent\n const version = await agentsStore.getVersion(versionId);\n if (!version) {\n throw new HTTPException(404, { message: `Version with id ${versionId} not found` });\n }\n if (version.agentId !== agentId) {\n throw new HTTPException(404, { message: `Version with id ${versionId} not found for agent ${agentId}` });\n }\n\n // Check if this is the active version\n if (agent.activeVersionId === versionId) {\n throw new HTTPException(400, {\n message: 'Cannot delete the active version. Activate a different version first.',\n });\n }\n\n await agentsStore.deleteVersion(versionId);\n\n // Clear the editor cache in case the deleted version affected resolution\n mastra.getEditor()?.agent.clearCache(agentId);\n\n return {\n success: true,\n message: `Version ${version.versionNumber} deleted successfully`,\n };\n } catch (error) {\n return handleError(error, 'Error deleting agent version');\n }\n },\n});\n\n/**\n * GET /stored/agents/:agentId/versions/compare - Compare two versions\n */\nexport const COMPARE_AGENT_VERSIONS_ROUTE: ServerRoute<\n InferParams<typeof agentVersionPathParams, typeof compareVersionsQuerySchema, undefined>,\n z.infer<typeof compareVersionsResponseSchema>,\n 'json',\n RouteSchemas<\n typeof agentVersionPathParams,\n typeof compareVersionsQuerySchema,\n undefined,\n typeof compareVersionsResponseSchema\n >,\n 'GET',\n '/stored/agents/:agentId/versions/compare'\n> = createRoute({\n method: 'GET',\n path: '/stored/agents/:agentId/versions/compare',\n requiresAuth: true,\n responseType: 'json',\n pathParamSchema: agentVersionPathParams,\n queryParamSchema: compareVersionsQuerySchema,\n responseSchema: compareVersionsResponseSchema,\n summary: 'Compare agent versions',\n description: 'Compares two versions and returns the differences between them',\n tags: ['Agent Versions'],\n handler: async ({ mastra, agentId, from, to, requestContext }) => {\n try {\n const storage = mastra.getStorage();\n\n if (!storage) {\n throw new HTTPException(500, { message: 'Storage is not configured' });\n }\n\n const agentsStore = await storage.getStore('agents');\n if (!agentsStore) {\n throw new HTTPException(500, { message: 'Agents storage domain is not available' });\n }\n const agent = await agentsStore.getById(agentId);\n assertStoredResourceScope(agent, await getStoredResourceScope(mastra, requestContext));\n\n // Get both versions\n const fromVersion = await agentsStore.getVersion(from);\n if (!fromVersion) {\n throw new HTTPException(404, { message: `Version with id ${from} not found` });\n }\n if (fromVersion.agentId !== agentId) {\n throw new HTTPException(404, { message: `Version with id ${from} not found for agent ${agentId}` });\n }\n\n const toVersion = await agentsStore.getVersion(to);\n if (!toVersion) {\n throw new HTTPException(404, { message: `Version with id ${to} not found` });\n }\n if (toVersion.agentId !== agentId) {\n throw new HTTPException(404, { message: `Version with id ${to} not found for agent ${agentId}` });\n }\n\n // Extract config fields from both versions (top-level, no .snapshot)\n const fromConfig = extractConfigFromVersion(\n fromVersion as unknown as Record<string, unknown>,\n SNAPSHOT_CONFIG_FIELDS,\n );\n const toConfig = extractConfigFromVersion(\n toVersion as unknown as Record<string, unknown>,\n SNAPSHOT_CONFIG_FIELDS,\n );\n\n // Compute diffs on the config fields\n const diffs = computeVersionDiffs(fromConfig, toConfig);\n\n return {\n diffs,\n fromVersion,\n toVersion,\n };\n } catch (error) {\n return handleError(error, 'Error comparing agent versions');\n }\n },\n});\n"],"mappings":"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"}
1
+ {"version":3,"file":"agent-versions.js","names":[],"sources":["../../../src/server/handlers/agent-versions.ts"],"sourcesContent":["import type { z } from 'zod/v4';\n\nimport { HTTPException } from '../http-exception';\nimport {\n agentVersionPathParams,\n versionIdPathParams,\n listVersionsQuerySchema,\n createVersionBodySchema,\n compareVersionsQuerySchema,\n listVersionsResponseSchema,\n getVersionResponseSchema,\n createVersionResponseSchema,\n activateVersionResponseSchema,\n restoreVersionResponseSchema,\n deleteVersionResponseSchema,\n compareVersionsResponseSchema,\n} from '../schemas/agent-versions';\nimport type { ServerRoute, RouteSchemas, InferParams } from '../server-adapter/routes';\nimport { createRoute } from '../server-adapter/routes/route-builder';\nimport { assertStoredResourceScope, getStoredResourceScope } from '../utils';\n\nimport { handleError } from './error';\nimport { validateAgentInstructionReferences } from './validate-agent-instructions';\nimport {\n extractConfigFromVersion,\n calculateChangedFields,\n computeVersionDiffs,\n createVersionWithRetry,\n enforceRetentionLimit,\n} from './version-helpers';\nimport type { VersionedStoreInterface } from './version-helpers';\n\n/**\n * The config field names that live on version rows (StorageAgentSnapshotType fields).\n * Used to extract config from a version record for comparison and restoration.\n */\nconst SNAPSHOT_CONFIG_FIELDS = [\n 'name',\n 'description',\n 'instructions',\n 'model',\n 'tools',\n 'defaultOptions',\n 'workflows',\n 'agents',\n 'integrationTools',\n 'inputProcessors',\n 'outputProcessors',\n 'memory',\n 'scorers',\n 'requestContextSchema',\n 'mcpClients',\n] as const;\n\n// ============================================================================\n// Route Definitions\n// ============================================================================\n\n/**\n * GET /stored/agents/:agentId/versions - List all versions for an agent\n */\nexport const LIST_AGENT_VERSIONS_ROUTE = createRoute({\n method: 'GET',\n path: '/stored/agents/:agentId/versions',\n requiresAuth: true,\n responseType: 'json',\n pathParamSchema: agentVersionPathParams,\n queryParamSchema: listVersionsQuerySchema,\n responseSchema: listVersionsResponseSchema,\n summary: 'List agent versions',\n description: 'Returns a paginated list of all versions for a stored agent',\n tags: ['Agent Versions'],\n handler: async ({ mastra, agentId, page, perPage, orderBy, requestContext }) => {\n try {\n const storage = mastra.getStorage();\n\n if (!storage) {\n throw new HTTPException(500, { message: 'Storage is not configured' });\n }\n\n const agentsStore = await storage.getStore('agents');\n if (!agentsStore) {\n throw new HTTPException(500, { message: 'Agents storage domain is not available' });\n }\n\n // Verify agent exists in code or storage\n const storedAgent = await agentsStore.getById(agentId);\n let codeAgentExists = false;\n try {\n mastra.getAgentById(agentId);\n codeAgentExists = true;\n } catch {\n // Agent not registered in code\n }\n\n if (!storedAgent && !codeAgentExists) {\n throw new HTTPException(404, { message: `Agent with id ${agentId} not found` });\n }\n assertStoredResourceScope(storedAgent, await getStoredResourceScope(mastra, requestContext));\n\n const result = await agentsStore.listVersions({\n agentId,\n page,\n perPage,\n orderBy,\n });\n\n return result;\n } catch (error) {\n return handleError(error, 'Error listing agent versions');\n }\n },\n});\n\n/**\n * POST /stored/agents/:agentId/versions - Create a new version snapshot\n */\nexport const CREATE_AGENT_VERSION_ROUTE = createRoute({\n method: 'POST',\n path: '/stored/agents/:agentId/versions',\n requiresAuth: true,\n responseType: 'json',\n pathParamSchema: agentVersionPathParams,\n bodySchema: createVersionBodySchema,\n responseSchema: createVersionResponseSchema,\n summary: 'Create agent version',\n description: 'Creates a new version snapshot of the current agent configuration',\n tags: ['Agent Versions'],\n handler: async ({ mastra, agentId, changeMessage, requestContext }) => {\n try {\n const storage = mastra.getStorage();\n\n if (!storage) {\n throw new HTTPException(500, { message: 'Storage is not configured' });\n }\n\n const agentsStore = await storage.getStore('agents');\n if (!agentsStore) {\n throw new HTTPException(500, { message: 'Agents storage domain is not available' });\n }\n\n // Get the current agent to find its active version\n const agent = await agentsStore.getById(agentId);\n if (!agent) {\n throw new HTTPException(404, { message: `Agent with id ${agentId} not found` });\n }\n assertStoredResourceScope(agent, await getStoredResourceScope(mastra, requestContext));\n\n // Get the current active version to snapshot its config\n let currentConfig: Record<string, unknown> = {};\n if (agent.activeVersionId) {\n const activeVersion = await agentsStore.getVersion(agent.activeVersionId);\n if (activeVersion) {\n currentConfig = extractConfigFromVersion(\n activeVersion as unknown as Record<string, unknown>,\n SNAPSHOT_CONFIG_FIELDS,\n );\n }\n }\n\n // Get the latest version to calculate changed fields\n const latestVersion = await agentsStore.getLatestVersion(agentId);\n\n // If no activeVersionId, fall back to latest version config\n if (!agent.activeVersionId && latestVersion) {\n currentConfig = extractConfigFromVersion(\n latestVersion as unknown as Record<string, unknown>,\n SNAPSHOT_CONFIG_FIELDS,\n );\n }\n const previousConfig = latestVersion\n ? extractConfigFromVersion(latestVersion as unknown as Record<string, unknown>, SNAPSHOT_CONFIG_FIELDS)\n : null;\n\n const changedFields = calculateChangedFields(previousConfig, currentConfig);\n\n // Create the new version with retry logic to handle race conditions\n // Config fields are passed top-level\n const { versionId } = await createVersionWithRetry(\n agentsStore as unknown as VersionedStoreInterface,\n agentId,\n 'agentId',\n currentConfig,\n changedFields,\n { changeMessage },\n );\n\n // Get the created version to return\n const version = await agentsStore.getVersion(versionId);\n if (!version) {\n throw new HTTPException(500, { message: 'Failed to retrieve created version' });\n }\n\n // Enforce retention limit - delete oldest versions if we exceed the max\n await enforceRetentionLimit(\n agentsStore as unknown as VersionedStoreInterface,\n agentId,\n 'agentId',\n agent.activeVersionId,\n );\n\n return version;\n } catch (error) {\n return handleError(error, 'Error creating agent version');\n }\n },\n});\n\n/**\n * GET /stored/agents/:agentId/versions/:versionId - Get a specific version\n */\nexport const GET_AGENT_VERSION_ROUTE = createRoute({\n method: 'GET',\n path: '/stored/agents/:agentId/versions/:versionId',\n requiresAuth: true,\n responseType: 'json',\n pathParamSchema: versionIdPathParams,\n responseSchema: getVersionResponseSchema,\n summary: 'Get agent version',\n description: 'Returns a specific version of an agent by its version ID',\n tags: ['Agent Versions'],\n handler: async ({ mastra, agentId, versionId, requestContext }) => {\n try {\n const storage = mastra.getStorage();\n\n if (!storage) {\n throw new HTTPException(500, { message: 'Storage is not configured' });\n }\n\n const agentsStore = await storage.getStore('agents');\n if (!agentsStore) {\n throw new HTTPException(500, { message: 'Agents storage domain is not available' });\n }\n\n const version = await agentsStore.getVersion(versionId);\n\n if (!version) {\n throw new HTTPException(404, { message: `Version with id ${versionId} not found` });\n }\n\n // Verify the version belongs to the specified agent\n if (version.agentId !== agentId) {\n throw new HTTPException(404, { message: `Version with id ${versionId} not found for agent ${agentId}` });\n }\n const agent = await agentsStore.getById(agentId);\n assertStoredResourceScope(agent, await getStoredResourceScope(mastra, requestContext));\n\n return version;\n } catch (error) {\n return handleError(error, 'Error getting agent version');\n }\n },\n});\n\n/**\n * POST /stored/agents/:agentId/versions/:versionId/activate - Set a version as active\n */\nexport const ACTIVATE_AGENT_VERSION_ROUTE = createRoute({\n method: 'POST',\n path: '/stored/agents/:agentId/versions/:versionId/activate',\n requiresAuth: true,\n responseType: 'json',\n pathParamSchema: versionIdPathParams,\n responseSchema: activateVersionResponseSchema,\n summary: 'Activate agent version',\n description: 'Sets a specific version as the active version for the agent',\n tags: ['Agent Versions'],\n handler: async ({ mastra, agentId, versionId, requestContext }) => {\n try {\n const storage = mastra.getStorage();\n\n if (!storage) {\n throw new HTTPException(500, { message: 'Storage is not configured' });\n }\n\n const agentsStore = await storage.getStore('agents');\n if (!agentsStore) {\n throw new HTTPException(500, { message: 'Agents storage domain is not available' });\n }\n\n // Verify agent exists\n const agent = await agentsStore.getById(agentId);\n if (!agent) {\n throw new HTTPException(404, { message: `Agent with id ${agentId} not found` });\n }\n assertStoredResourceScope(agent, await getStoredResourceScope(mastra, requestContext));\n\n // Verify version exists and belongs to this agent\n const version = await agentsStore.getVersion(versionId);\n if (!version) {\n throw new HTTPException(404, { message: `Version with id ${versionId} not found` });\n }\n if (version.agentId !== agentId) {\n throw new HTTPException(404, { message: `Version with id ${versionId} not found for agent ${agentId}` });\n }\n\n await validateAgentInstructionReferences({\n instructions: version.instructions,\n mastra,\n requestContext,\n });\n\n // Update the agent's activeVersionId AND status to 'published'\n await agentsStore.update({\n id: agentId,\n activeVersionId: versionId,\n status: 'published',\n });\n\n // Clear the editor cache so subsequent requests see the new active version\n mastra.getEditor()?.agent.clearCache(agentId);\n\n return {\n success: true,\n message: `Version ${version.versionNumber} is now active`,\n activeVersionId: versionId,\n };\n } catch (error) {\n return handleError(error, 'Error activating agent version');\n }\n },\n});\n\n/**\n * POST /stored/agents/:agentId/versions/:versionId/restore - Restore agent to a version\n */\nexport const RESTORE_AGENT_VERSION_ROUTE = createRoute({\n method: 'POST',\n path: '/stored/agents/:agentId/versions/:versionId/restore',\n requiresAuth: true,\n responseType: 'json',\n pathParamSchema: versionIdPathParams,\n responseSchema: restoreVersionResponseSchema,\n summary: 'Restore agent version',\n description: 'Restores the agent configuration from a version, creating a new version',\n tags: ['Agent Versions'],\n handler: async ({ mastra, agentId, versionId, requestContext }) => {\n try {\n const storage = mastra.getStorage();\n\n if (!storage) {\n throw new HTTPException(500, { message: 'Storage is not configured' });\n }\n\n const agentsStore = await storage.getStore('agents');\n if (!agentsStore) {\n throw new HTTPException(500, { message: 'Agents storage domain is not available' });\n }\n\n // Verify agent exists\n const agent = await agentsStore.getById(agentId);\n if (!agent) {\n throw new HTTPException(404, { message: `Agent with id ${agentId} not found` });\n }\n assertStoredResourceScope(agent, await getStoredResourceScope(mastra, requestContext));\n\n // Get the version to restore\n const versionToRestore = await agentsStore.getVersion(versionId);\n if (!versionToRestore) {\n throw new HTTPException(404, { message: `Version with id ${versionId} not found` });\n }\n if (versionToRestore.agentId !== agentId) {\n throw new HTTPException(404, { message: `Version with id ${versionId} not found for agent ${agentId}` });\n }\n\n // Extract the config fields from the version to restore (top-level, no .snapshot)\n const restoredConfig = extractConfigFromVersion(\n versionToRestore as unknown as Record<string, unknown>,\n SNAPSHOT_CONFIG_FIELDS,\n );\n\n // Update the agent with the config from the version to restore\n await agentsStore.update({\n id: agentId,\n ...restoredConfig,\n });\n\n // Get the latest version to calculate changed fields\n const latestVersion = await agentsStore.getLatestVersion(agentId);\n const previousConfig = latestVersion\n ? extractConfigFromVersion(latestVersion as unknown as Record<string, unknown>, SNAPSHOT_CONFIG_FIELDS)\n : null;\n\n const changedFields = calculateChangedFields(previousConfig, restoredConfig);\n\n // Create a new version with retry logic to handle race conditions\n // Config fields are passed top-level\n const { versionId: newVersionId } = await createVersionWithRetry(\n agentsStore as unknown as VersionedStoreInterface,\n agentId,\n 'agentId',\n restoredConfig,\n changedFields,\n {\n changeMessage: `Restored from version ${versionToRestore.versionNumber}`,\n },\n );\n\n // Do NOT auto-activate the restored version - user must explicitly activate it\n\n // Get the created version to return\n const newVersion = await agentsStore.getVersion(newVersionId);\n if (!newVersion) {\n throw new HTTPException(500, { message: 'Failed to retrieve created version' });\n }\n\n // Enforce retention limit - delete oldest versions if we exceed the max\n // Use the agent's existing activeVersionId\n await enforceRetentionLimit(\n agentsStore as unknown as VersionedStoreInterface,\n agentId,\n 'agentId',\n agent.activeVersionId,\n );\n\n // Clear the editor cache so subsequent requests see the restored config\n mastra.getEditor()?.agent.clearCache(agentId);\n\n return newVersion;\n } catch (error) {\n return handleError(error, 'Error restoring agent version');\n }\n },\n});\n\n/**\n * DELETE /stored/agents/:agentId/versions/:versionId - Delete a version\n */\nexport const DELETE_AGENT_VERSION_ROUTE = createRoute({\n method: 'DELETE',\n path: '/stored/agents/:agentId/versions/:versionId',\n requiresAuth: true,\n responseType: 'json',\n pathParamSchema: versionIdPathParams,\n responseSchema: deleteVersionResponseSchema,\n summary: 'Delete agent version',\n description: 'Deletes a specific version (cannot delete the active version)',\n tags: ['Agent Versions'],\n handler: async ({ mastra, agentId, versionId, requestContext }) => {\n try {\n const storage = mastra.getStorage();\n\n if (!storage) {\n throw new HTTPException(500, { message: 'Storage is not configured' });\n }\n\n const agentsStore = await storage.getStore('agents');\n if (!agentsStore) {\n throw new HTTPException(500, { message: 'Agents storage domain is not available' });\n }\n\n // Verify agent exists\n const agent = await agentsStore.getById(agentId);\n if (!agent) {\n throw new HTTPException(404, { message: `Agent with id ${agentId} not found` });\n }\n assertStoredResourceScope(agent, await getStoredResourceScope(mastra, requestContext));\n\n // Verify version exists and belongs to this agent\n const version = await agentsStore.getVersion(versionId);\n if (!version) {\n throw new HTTPException(404, { message: `Version with id ${versionId} not found` });\n }\n if (version.agentId !== agentId) {\n throw new HTTPException(404, { message: `Version with id ${versionId} not found for agent ${agentId}` });\n }\n\n // Check if this is the active version\n if (agent.activeVersionId === versionId) {\n throw new HTTPException(400, {\n message: 'Cannot delete the active version. Activate a different version first.',\n });\n }\n\n await agentsStore.deleteVersion(versionId);\n\n // Clear the editor cache in case the deleted version affected resolution\n mastra.getEditor()?.agent.clearCache(agentId);\n\n return {\n success: true,\n message: `Version ${version.versionNumber} deleted successfully`,\n };\n } catch (error) {\n return handleError(error, 'Error deleting agent version');\n }\n },\n});\n\n/**\n * GET /stored/agents/:agentId/versions/compare - Compare two versions\n */\nexport const COMPARE_AGENT_VERSIONS_ROUTE: ServerRoute<\n InferParams<typeof agentVersionPathParams, typeof compareVersionsQuerySchema, undefined>,\n z.infer<typeof compareVersionsResponseSchema>,\n 'json',\n RouteSchemas<\n typeof agentVersionPathParams,\n typeof compareVersionsQuerySchema,\n undefined,\n typeof compareVersionsResponseSchema\n >,\n 'GET',\n '/stored/agents/:agentId/versions/compare'\n> = createRoute({\n method: 'GET',\n path: '/stored/agents/:agentId/versions/compare',\n requiresAuth: true,\n responseType: 'json',\n pathParamSchema: agentVersionPathParams,\n queryParamSchema: compareVersionsQuerySchema,\n responseSchema: compareVersionsResponseSchema,\n summary: 'Compare agent versions',\n description: 'Compares two versions and returns the differences between them',\n tags: ['Agent Versions'],\n handler: async ({ mastra, agentId, from, to, requestContext }) => {\n try {\n const storage = mastra.getStorage();\n\n if (!storage) {\n throw new HTTPException(500, { message: 'Storage is not configured' });\n }\n\n const agentsStore = await storage.getStore('agents');\n if (!agentsStore) {\n throw new HTTPException(500, { message: 'Agents storage domain is not available' });\n }\n const agent = await agentsStore.getById(agentId);\n assertStoredResourceScope(agent, await getStoredResourceScope(mastra, requestContext));\n\n // Get both versions\n const fromVersion = await agentsStore.getVersion(from);\n if (!fromVersion) {\n throw new HTTPException(404, { message: `Version with id ${from} not found` });\n }\n if (fromVersion.agentId !== agentId) {\n throw new HTTPException(404, { message: `Version with id ${from} not found for agent ${agentId}` });\n }\n\n const toVersion = await agentsStore.getVersion(to);\n if (!toVersion) {\n throw new HTTPException(404, { message: `Version with id ${to} not found` });\n }\n if (toVersion.agentId !== agentId) {\n throw new HTTPException(404, { message: `Version with id ${to} not found for agent ${agentId}` });\n }\n\n // Extract config fields from both versions (top-level, no .snapshot)\n const fromConfig = extractConfigFromVersion(\n fromVersion as unknown as Record<string, unknown>,\n SNAPSHOT_CONFIG_FIELDS,\n );\n const toConfig = extractConfigFromVersion(\n toVersion as unknown as Record<string, unknown>,\n SNAPSHOT_CONFIG_FIELDS,\n );\n\n // Compute diffs on the config fields\n const diffs = computeVersionDiffs(fromConfig, toConfig);\n\n return {\n diffs,\n fromVersion,\n toVersion,\n };\n } catch (error) {\n return handleError(error, 'Error comparing agent versions');\n }\n },\n});\n"],"mappings":"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"}