@mastra/server 1.79.0 → 1.80.0-alpha.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (222) hide show
  1. package/dist/_types/@internal_core/dist/storage/index.d.ts +243 -243
  2. package/dist/_types/@internal_voice/dist/_types/@internal_core/dist/request-context/index.d.ts +13 -13
  3. package/dist/_types/@internal_voice/dist/_types/@internal_core/dist/routes/index.d.ts +12 -12
  4. package/dist/_types/@internal_voice/dist/_types/@internal_core/dist/types/index.d.ts +1 -2
  5. package/dist/{a2a-Uood_0DN.cjs → a2a-qQkFvE8f.cjs} +2 -2
  6. package/dist/{a2a-Uood_0DN.cjs.map → a2a-qQkFvE8f.cjs.map} +1 -1
  7. package/dist/{a2a-BqLB3McP.js → a2a-wv2WQ3IG.js} +2 -2
  8. package/dist/{a2a-BqLB3McP.js.map → a2a-wv2WQ3IG.js.map} +1 -1
  9. package/dist/{agent-builder-CuBD1tpv.cjs → agent-builder-C8F4tCwd.cjs} +4 -4
  10. package/dist/{agent-builder-CuBD1tpv.cjs.map → agent-builder-C8F4tCwd.cjs.map} +1 -1
  11. package/dist/{agent-builder-VhM8ADW-.js → agent-builder-DFZjeOkA.js} +4 -4
  12. package/dist/{agent-builder-VhM8ADW-.js.map → agent-builder-DFZjeOkA.js.map} +1 -1
  13. package/dist/{agents-BHLTMBff.js → agents-BjdJ-Tyf.js} +3 -2
  14. package/dist/agents-BjdJ-Tyf.js.map +1 -0
  15. package/dist/{agents-T-OIM9IK.cjs → agents-CPYFVJak.cjs} +8 -1
  16. package/dist/agents-CPYFVJak.cjs.map +1 -0
  17. package/dist/{agents-BOWEUKyV.cjs → agents-CcY0JTDF.cjs} +81 -9
  18. package/dist/agents-CcY0JTDF.cjs.map +1 -0
  19. package/dist/{agents-DRQ3ScbX.js → agents-DaLwtv9x.js} +76 -10
  20. package/dist/agents-DaLwtv9x.js.map +1 -0
  21. package/dist/{api-schema-manifest-CI90M4sX.js → api-schema-manifest-B1WyInlF.js} +2 -2
  22. package/dist/{api-schema-manifest-CI90M4sX.js.map → api-schema-manifest-B1WyInlF.js.map} +1 -1
  23. package/dist/{api-schema-manifest-DIlNfbyw.cjs → api-schema-manifest-CxrGchcx.cjs} +2 -2
  24. package/dist/{api-schema-manifest-DIlNfbyw.cjs.map → api-schema-manifest-CxrGchcx.cjs.map} +1 -1
  25. package/dist/{conversations-C5MkQBB8.cjs → conversations-B16oVu_1.cjs} +2 -2
  26. package/dist/{conversations-C5MkQBB8.cjs.map → conversations-B16oVu_1.cjs.map} +1 -1
  27. package/dist/{conversations-8BWryNlF.js → conversations-B5RJ2jcO.js} +2 -2
  28. package/dist/{conversations-8BWryNlF.js.map → conversations-B5RJ2jcO.js.map} +1 -1
  29. package/dist/{datasets-BUC5T-fd.cjs → datasets-Cgtczd13.cjs} +11 -1
  30. package/dist/datasets-Cgtczd13.cjs.map +1 -0
  31. package/dist/{datasets-CCWuznUu.js → datasets-FRp69Mwv.js} +11 -1
  32. package/dist/datasets-FRp69Mwv.js.map +1 -0
  33. package/dist/{dist-k77XQGUn.js → dist-6ZwWUUBQ.js} +40 -6
  34. package/dist/{dist-k77XQGUn.js.map → dist-6ZwWUUBQ.js.map} +1 -1
  35. package/dist/{dist-B-bEVWlJ.cjs → dist-U8ZBR8z5.cjs} +40 -6
  36. package/dist/{dist-B-bEVWlJ.cjs.map → dist-U8ZBR8z5.cjs.map} +1 -1
  37. package/dist/{dist-B3kC8Yd0.cjs → dist-bT2343kX.cjs} +1 -1
  38. package/dist/dist-qYC51DiT.js +1 -0
  39. package/dist/docs/SKILL.md +2 -2
  40. package/dist/docs/assets/SOURCE_MAP.json +1 -1
  41. package/dist/docs/references/docs-connections-a2a.md +1 -1
  42. package/dist/docs/references/docs-guides-mcp-authentication-authorization.md +2 -2
  43. package/dist/docs/references/docs-server-middleware.md +1 -1
  44. package/dist/docs/references/reference-observability-tracing-advanced-queries.md +92 -11
  45. package/dist/{editor-builder-BDtiWw0f.cjs → editor-builder-Bt26tVKI.cjs} +2 -2
  46. package/dist/{editor-builder-BDtiWw0f.cjs.map → editor-builder-Bt26tVKI.cjs.map} +1 -1
  47. package/dist/{editor-builder-DnLCfqnY.js → editor-builder-DWMgkYK-.js} +2 -2
  48. package/dist/{editor-builder-DnLCfqnY.js.map → editor-builder-DWMgkYK-.js.map} +1 -1
  49. package/dist/{editor-builder-DtpP1FtW.cjs → editor-builder-D_OUA9P6.cjs} +3 -3
  50. package/dist/{editor-builder-DtpP1FtW.cjs.map → editor-builder-D_OUA9P6.cjs.map} +1 -1
  51. package/dist/{editor-builder-ClFlGXoX.js → editor-builder-DzGLnYcJ.js} +3 -3
  52. package/dist/{editor-builder-ClFlGXoX.js.map → editor-builder-DzGLnYcJ.js.map} +1 -1
  53. package/dist/{helpers-CAcEhq38.cjs → helpers-DvzrUzqY.cjs} +2 -2
  54. package/dist/{helpers-CAcEhq38.cjs.map → helpers-DvzrUzqY.cjs.map} +1 -1
  55. package/dist/{helpers-vrqddDd5.js → helpers-gCkmhB9x.js} +2 -2
  56. package/dist/{helpers-vrqddDd5.js.map → helpers-gCkmhB9x.js.map} +1 -1
  57. package/dist/{observability-BBMCMeT-.cjs → observability-C2BZQ2jU.cjs} +3 -2
  58. package/dist/{observability-BBMCMeT-.cjs.map → observability-C2BZQ2jU.cjs.map} +1 -1
  59. package/dist/{observability-ZRgRcvoX.js → observability-Dz9jvMJ3.js} +3 -2
  60. package/dist/{observability-ZRgRcvoX.js.map → observability-Dz9jvMJ3.js.map} +1 -1
  61. package/dist/{observability-new-endpoints-fjoZzEtk.js → observability-new-endpoints-3DlTYf34.js} +117 -4
  62. package/dist/observability-new-endpoints-3DlTYf34.js.map +1 -0
  63. package/dist/{observability-new-endpoints-tG3-odLa.cjs → observability-new-endpoints-Drr7q2Dj.cjs} +121 -2
  64. package/dist/observability-new-endpoints-Drr7q2Dj.cjs.map +1 -0
  65. package/dist/{plans-CiPgWBhO.cjs → plans-DVzqRj-i.cjs} +3 -3
  66. package/dist/{plans-CiPgWBhO.cjs.map → plans-DVzqRj-i.cjs.map} +1 -1
  67. package/dist/{plans-DCepEY7n.js → plans-TpICqvFU.js} +3 -3
  68. package/dist/{plans-DCepEY7n.js.map → plans-TpICqvFU.js.map} +1 -1
  69. package/dist/{probe-image-size-BdfbUHxx.js → probe-image-size-BYv_-JV7.js} +2 -2
  70. package/dist/{probe-image-size-BdfbUHxx.js.map → probe-image-size-BYv_-JV7.js.map} +1 -1
  71. package/dist/{probe-image-size-Alv3gwKl.cjs → probe-image-size-mZ2ldE98.cjs} +2 -2
  72. package/dist/{probe-image-size-Alv3gwKl.cjs.map → probe-image-size-mZ2ldE98.cjs.map} +1 -1
  73. package/dist/{responses-CCRijwDF.cjs → responses-CP2UYT8z.cjs} +2 -2
  74. package/dist/{responses-CCRijwDF.cjs.map → responses-CP2UYT8z.cjs.map} +1 -1
  75. package/dist/{responses-4FwMNxoJ.js → responses-CnQoSpBc.js} +2 -2
  76. package/dist/{responses-4FwMNxoJ.js.map → responses-CnQoSpBc.js.map} +1 -1
  77. package/dist/{routes-BC20mdNN.js → routes-DZ2QfTnF.js} +17 -15
  78. package/dist/routes-DZ2QfTnF.js.map +1 -0
  79. package/dist/{routes-DGLJyqjD.cjs → routes-OsQV338J.cjs} +17 -15
  80. package/dist/routes-OsQV338J.cjs.map +1 -0
  81. package/dist/{scores-D9UgETt_.js → scores-DFFS3Zxo.js} +2 -2
  82. package/dist/{scores-D9UgETt_.js.map → scores-DFFS3Zxo.js.map} +1 -1
  83. package/dist/{scores-DRdtS7NT.cjs → scores-DwiL1Nk8.cjs} +2 -2
  84. package/dist/{scores-DRdtS7NT.cjs.map → scores-DwiL1Nk8.cjs.map} +1 -1
  85. package/dist/server/auth/helpers.d.ts.map +1 -1
  86. package/dist/server/auth/index.cjs +1 -1
  87. package/dist/server/auth/index.js +1 -1
  88. package/dist/server/handlers/a2a.cjs +1 -1
  89. package/dist/server/handlers/a2a.js +1 -1
  90. package/dist/server/handlers/agent-builder.cjs +1 -1
  91. package/dist/server/handlers/agent-builder.js +1 -1
  92. package/dist/server/handlers/agents.cjs +2 -1
  93. package/dist/server/handlers/agents.d.ts +31 -0
  94. package/dist/server/handlers/agents.d.ts.map +1 -1
  95. package/dist/server/handlers/agents.js +1 -1
  96. package/dist/server/handlers/auth.cjs +15 -1
  97. package/dist/server/handlers/auth.cjs.map +1 -1
  98. package/dist/server/handlers/auth.d.ts.map +1 -1
  99. package/dist/server/handlers/auth.js +15 -1
  100. package/dist/server/handlers/auth.js.map +1 -1
  101. package/dist/server/handlers/conversations.cjs +1 -1
  102. package/dist/server/handlers/conversations.js +1 -1
  103. package/dist/server/handlers/datasets.cjs +3 -2
  104. package/dist/server/handlers/datasets.cjs.map +1 -1
  105. package/dist/server/handlers/datasets.d.ts +8 -0
  106. package/dist/server/handlers/datasets.d.ts.map +1 -1
  107. package/dist/server/handlers/datasets.js +3 -2
  108. package/dist/server/handlers/datasets.js.map +1 -1
  109. package/dist/server/handlers/editor-builder.cjs +1 -1
  110. package/dist/server/handlers/editor-builder.js +1 -1
  111. package/dist/server/handlers/favorites-enrichment.cjs +1 -1
  112. package/dist/server/handlers/favorites-enrichment.js +1 -1
  113. package/dist/server/handlers/observability-new-endpoints.cjs +2 -1
  114. package/dist/server/handlers/observability-new-endpoints.d.ts +132 -0
  115. package/dist/server/handlers/observability-new-endpoints.d.ts.map +1 -1
  116. package/dist/server/handlers/observability-new-endpoints.js +1 -1
  117. package/dist/server/handlers/observability-shared.cjs +19 -0
  118. package/dist/server/handlers/observability-shared.cjs.map +1 -1
  119. package/dist/server/handlers/observability-shared.d.ts +10 -0
  120. package/dist/server/handlers/observability-shared.d.ts.map +1 -1
  121. package/dist/server/handlers/observability-shared.js +18 -1
  122. package/dist/server/handlers/observability-shared.js.map +1 -1
  123. package/dist/server/handlers/observability.cjs +3 -2
  124. package/dist/server/handlers/observability.js +3 -3
  125. package/dist/server/handlers/plans.cjs +1 -1
  126. package/dist/server/handlers/plans.js +1 -1
  127. package/dist/server/handlers/responses.cjs +1 -1
  128. package/dist/server/handlers/responses.js +1 -1
  129. package/dist/server/handlers/schedules-workflows-shim.cjs.map +1 -1
  130. package/dist/server/handlers/schedules-workflows-shim.js.map +1 -1
  131. package/dist/server/handlers/scores.cjs +1 -1
  132. package/dist/server/handlers/scores.js +1 -1
  133. package/dist/server/handlers/stored-agent-favorites.cjs +1 -1
  134. package/dist/server/handlers/stored-agent-favorites.js +1 -1
  135. package/dist/server/handlers/stored-agents.cjs +29 -11
  136. package/dist/server/handlers/stored-agents.cjs.map +1 -1
  137. package/dist/server/handlers/stored-agents.d.ts.map +1 -1
  138. package/dist/server/handlers/stored-agents.js +29 -11
  139. package/dist/server/handlers/stored-agents.js.map +1 -1
  140. package/dist/server/handlers/stored-skill-favorites.cjs +1 -1
  141. package/dist/server/handlers/stored-skill-favorites.js +1 -1
  142. package/dist/server/handlers/stored-skills.cjs +1 -1
  143. package/dist/server/handlers/stored-skills.js +1 -1
  144. package/dist/server/handlers/system.cjs +2 -2
  145. package/dist/server/handlers/system.d.ts +2 -0
  146. package/dist/server/handlers/system.d.ts.map +1 -1
  147. package/dist/server/handlers/system.js +2 -2
  148. package/dist/server/handlers/tools.cjs +1 -1
  149. package/dist/server/handlers/tools.d.ts.map +1 -1
  150. package/dist/server/handlers/tools.js +1 -1
  151. package/dist/server/handlers/workflow-builder.cjs +1 -1
  152. package/dist/server/handlers/workflow-builder.js +1 -1
  153. package/dist/server/handlers/workflows.cjs +1 -1
  154. package/dist/server/handlers/workflows.js +1 -1
  155. package/dist/server/handlers/workspace.cjs +1 -1
  156. package/dist/server/handlers/workspace.d.ts +23 -23
  157. package/dist/server/handlers/workspace.js +1 -1
  158. package/dist/server/handlers.cjs +11 -11
  159. package/dist/server/handlers.js +11 -11
  160. package/dist/server/schemas/agents.d.ts +4 -0
  161. package/dist/server/schemas/agents.d.ts.map +1 -1
  162. package/dist/server/schemas/datasets.d.ts +4 -0
  163. package/dist/server/schemas/datasets.d.ts.map +1 -1
  164. package/dist/server/schemas/index.cjs +5 -4
  165. package/dist/server/schemas/index.js +5 -5
  166. package/dist/server/schemas/system.d.ts +2 -0
  167. package/dist/server/schemas/system.d.ts.map +1 -1
  168. package/dist/server/server-adapter/index.cjs +95 -3
  169. package/dist/server/server-adapter/index.cjs.map +1 -1
  170. package/dist/server/server-adapter/index.d.ts +28 -1
  171. package/dist/server/server-adapter/index.d.ts.map +1 -1
  172. package/dist/server/server-adapter/index.js +93 -4
  173. package/dist/server/server-adapter/index.js.map +1 -1
  174. package/dist/server/server-adapter/mcp-disconnect.d.ts +16 -0
  175. package/dist/server/server-adapter/mcp-disconnect.d.ts.map +1 -0
  176. package/dist/server/server-adapter/routes/agents.d.ts +2 -1
  177. package/dist/server/server-adapter/routes/agents.d.ts.map +1 -1
  178. package/dist/server/server-adapter/routes/datasets.d.ts +8 -0
  179. package/dist/server/server-adapter/routes/datasets.d.ts.map +1 -1
  180. package/dist/server/server-adapter/routes/observability.d.ts +129 -0
  181. package/dist/server/server-adapter/routes/observability.d.ts.map +1 -1
  182. package/dist/server/server-adapter/routes/system.d.ts +2 -0
  183. package/dist/server/server-adapter/routes/system.d.ts.map +1 -1
  184. package/dist/server/server-adapter/routes/workspace.d.ts +23 -23
  185. package/dist/{system-BvpFMIJB.cjs → system-B_Sod-Le.cjs} +2 -1
  186. package/dist/system-B_Sod-Le.cjs.map +1 -0
  187. package/dist/{system-CpzPxRRq.js → system-sSSmmt7I.js} +2 -1
  188. package/dist/system-sSSmmt7I.js.map +1 -0
  189. package/dist/{tools-SPJtxG9N.cjs → tools-B2fMQuwp.cjs} +3 -3
  190. package/dist/tools-B2fMQuwp.cjs.map +1 -0
  191. package/dist/{tools-CmFSfDMn.js → tools-BrO42c5i.js} +3 -3
  192. package/dist/tools-BrO42c5i.js.map +1 -0
  193. package/dist/{workflow-builder-CjlLoQvo.js → workflow-builder-D-YMkDHC.js} +3 -3
  194. package/dist/{workflow-builder-CjlLoQvo.js.map → workflow-builder-D-YMkDHC.js.map} +1 -1
  195. package/dist/{workflow-builder-C9-8ZOWF.cjs → workflow-builder-DtXcLQoG.cjs} +3 -3
  196. package/dist/{workflow-builder-C9-8ZOWF.cjs.map → workflow-builder-DtXcLQoG.cjs.map} +1 -1
  197. package/dist/{workflows-bb-otd2o.js → workflows-CF7e2ST9.js} +2 -2
  198. package/dist/{workflows-bb-otd2o.js.map → workflows-CF7e2ST9.js.map} +1 -1
  199. package/dist/{workflows-DjqeJcdJ.cjs → workflows-DN2axrmq.cjs} +2 -2
  200. package/dist/{workflows-DjqeJcdJ.cjs.map → workflows-DN2axrmq.cjs.map} +1 -1
  201. package/dist/{workspace-B6kzp-bo.js → workspace-BVHXoKmP.js} +2 -2
  202. package/dist/workspace-BVHXoKmP.js.map +1 -0
  203. package/dist/{workspace-COKR1SxH.cjs → workspace-d25MZ9dj.cjs} +2 -2
  204. package/dist/workspace-d25MZ9dj.cjs.map +1 -0
  205. package/package.json +10 -10
  206. package/dist/agents-BHLTMBff.js.map +0 -1
  207. package/dist/agents-BOWEUKyV.cjs.map +0 -1
  208. package/dist/agents-DRQ3ScbX.js.map +0 -1
  209. package/dist/agents-T-OIM9IK.cjs.map +0 -1
  210. package/dist/datasets-BUC5T-fd.cjs.map +0 -1
  211. package/dist/datasets-CCWuznUu.js.map +0 -1
  212. package/dist/dist-BM9J-PTK.js +0 -1
  213. package/dist/observability-new-endpoints-fjoZzEtk.js.map +0 -1
  214. package/dist/observability-new-endpoints-tG3-odLa.cjs.map +0 -1
  215. package/dist/routes-BC20mdNN.js.map +0 -1
  216. package/dist/routes-DGLJyqjD.cjs.map +0 -1
  217. package/dist/system-BvpFMIJB.cjs.map +0 -1
  218. package/dist/system-CpzPxRRq.js.map +0 -1
  219. package/dist/tools-CmFSfDMn.js.map +0 -1
  220. package/dist/tools-SPJtxG9N.cjs.map +0 -1
  221. package/dist/workspace-B6kzp-bo.js.map +0 -1
  222. package/dist/workspace-COKR1SxH.cjs.map +0 -1
@@ -1 +0,0 @@
1
- {"version":3,"file":"routes-DGLJyqjD.cjs","names":["GET_AGENT_CARD_ROUTE","AGENT_EXECUTION_ROUTE","LIST_AGENT_BUILDER_ACTIONS_ROUTE","GET_AGENT_BUILDER_ACTION_BY_ID_ROUTE","LIST_AGENT_BUILDER_ACTION_RUNS_ROUTE","GET_AGENT_BUILDER_ACTION_RUN_BY_ID_ROUTE","CREATE_AGENT_BUILDER_ACTION_RUN_ROUTE","STREAM_AGENT_BUILDER_ACTION_ROUTE","STREAM_LEGACY_AGENT_BUILDER_ACTION_ROUTE","START_ASYNC_AGENT_BUILDER_ACTION_ROUTE","START_AGENT_BUILDER_ACTION_RUN_ROUTE","OBSERVE_STREAM_AGENT_BUILDER_ACTION_ROUTE","OBSERVE_STREAM_LEGACY_AGENT_BUILDER_ACTION_ROUTE","RESUME_ASYNC_AGENT_BUILDER_ACTION_ROUTE","RESUME_NO_WAIT_AGENT_BUILDER_ACTION_ROUTE","RESUME_AGENT_BUILDER_ACTION_ROUTE","RESUME_STREAM_AGENT_BUILDER_ACTION_ROUTE","CANCEL_AGENT_BUILDER_ACTION_RUN_ROUTE","LIST_AGENT_CONTROLLERS_ROUTE","LIST_AGENT_CONTROLLER_MODES_ROUTE","LIST_AGENT_CONTROLLER_MODELS_ROUTE","LIST_AGENT_CONTROLLER_ACTIVE_RUNS_ROUTE","CREATE_AGENT_CONTROLLER_SESSION_ROUTE","GET_AGENT_CONTROLLER_SESSION_STATE_ROUTE","LIST_AGENT_CONTROLLER_THREADS_ROUTE","CREATE_AGENT_CONTROLLER_THREAD_ROUTE","DELETE_AGENT_CONTROLLER_THREAD_ROUTE","RENAME_AGENT_CONTROLLER_THREAD_ROUTE","CLONE_AGENT_CONTROLLER_THREAD_ROUTE","LIST_AGENT_CONTROLLER_THREAD_MESSAGES_ROUTE","STREAM_AGENT_CONTROLLER_SESSION_ROUTE","SEND_AGENT_CONTROLLER_MESSAGE_ROUTE","STEER_AGENT_CONTROLLER_SESSION_ROUTE","FOLLOW_UP_AGENT_CONTROLLER_SESSION_ROUTE","ABORT_AGENT_CONTROLLER_SESSION_ROUTE","AGENT_CONTROLLER_TOOL_APPROVAL_ROUTE","AGENT_CONTROLLER_TOOL_SUSPENSION_ROUTE","SWITCH_AGENT_CONTROLLER_MODE_ROUTE","SWITCH_AGENT_CONTROLLER_MODEL_ROUTE","SWITCH_AGENT_CONTROLLER_THREAD_ROUTE","TRANSFER_AGENT_CONTROLLER_THREAD_OWNERSHIP_ROUTE","SEND_AGENT_CONTROLLER_NOTIFICATION_ROUTE","GET_AGENT_CONTROLLER_WORKSPACE_STATUS_ROUTE","GET_AGENT_CONTROLLER_OM_RECORD_ROUTE","SET_AGENT_CONTROLLER_RESOURCE_ID_ROUTE","GET_AGENT_CONTROLLER_RESOURCE_IDS_ROUTE","GET_AGENT_CONTROLLER_GOAL_ROUTE","SET_AGENT_CONTROLLER_GOAL_ROUTE","UPDATE_AGENT_CONTROLLER_GOAL_ROUTE","CLEAR_AGENT_CONTROLLER_GOAL_ROUTE","GET_AGENT_CONTROLLER_PERMISSIONS_ROUTE","SET_AGENT_CONTROLLER_CATEGORY_PERMISSION_ROUTE","SET_AGENT_CONTROLLER_TOOL_PERMISSION_ROUTE","SET_AGENT_CONTROLLER_SESSION_STATE_ROUTE","LIST_AGENTS_ROUTE","GET_PROVIDERS_ROUTE","GET_AGENT_BY_ID_ROUTE","CLONE_AGENT_ROUTE","GET_SPEAKERS_ROUTE","GET_SPEAKERS_DEPRECATED_ROUTE","GENERATE_AGENT_ROUTE","GENERATE_AGENT_VNEXT_ROUTE","STREAM_GENERATE_ROUTE","STREAM_UNTIL_IDLE_GENERATE_ROUTE","STREAM_GENERATE_VNEXT_DEPRECATED_ROUTE","OBSERVE_AGENT_STREAM_ROUTE","SEND_AGENT_MESSAGE_ROUTE","QUEUE_AGENT_MESSAGE_ROUTE","QUEUE_AGENT_SIGNAL_ROUTE","SEND_AGENT_SIGNAL_ROUTE","ABORT_AGENT_THREAD_ROUTE","CANCEL_AGENT_PENDING_SIGNALS_ROUTE","SUBSCRIBE_AGENT_THREAD_ROUTE","EXECUTE_AGENT_TOOL_ROUTE","APPROVE_TOOL_CALL_ROUTE","SEND_TOOL_APPROVAL_ROUTE","LIST_SUSPENDED_RUNS_ROUTE","DECLINE_TOOL_CALL_ROUTE","RESUME_STREAM_ROUTE","RECOVER_ROUTE","APPROVE_TOOL_CALL_GENERATE_ROUTE","DECLINE_TOOL_CALL_GENERATE_ROUTE","APPROVE_NETWORK_TOOL_CALL_ROUTE","DECLINE_NETWORK_TOOL_CALL_ROUTE","RESUME_STREAM_UNTIL_IDLE_ROUTE","STREAM_NETWORK_ROUTE","UPDATE_AGENT_MODEL_ROUTE","RESET_AGENT_MODEL_ROUTE","REORDER_AGENT_MODEL_LIST_ROUTE","UPDATE_AGENT_MODEL_IN_MODEL_LIST_ROUTE","ENHANCE_INSTRUCTIONS_ROUTE","GET_AGENT_TOOL_ROUTE","READ_AGENT_PLAN_ROUTE","GET_AGENT_SKILL_ROUTE","GENERATE_SPEECH_ROUTE","GENERATE_SPEECH_DEPRECATED_ROUTE","TRANSCRIBE_SPEECH_ROUTE","TRANSCRIBE_SPEECH_DEPRECATED_ROUTE","GET_LISTENER_ROUTE","STREAM_VNEXT_DEPRECATED_ROUTE","STREAM_UI_MESSAGE_VNEXT_DEPRECATED_ROUTE","STREAM_UI_MESSAGE_DEPRECATED_ROUTE","BACKGROUND_TASK_STREAM_ROUTE","LIST_BACKGROUND_TASKS_ROUTE","GET_BACKGROUND_TASK_ROUTE","LIST_CHANNEL_PLATFORMS_ROUTE","LIST_CHANNEL_INSTALLATIONS_ROUTE","CONNECT_CHANNEL_ROUTE","RECONCILE_CHANNEL_ROUTE","DISCONNECT_CHANNEL_ROUTE","CREATE_CONVERSATION_ROUTE","GET_CONVERSATION_ROUTE","GET_CONVERSATION_ITEMS_ROUTE","DELETE_CONVERSATION_ROUTE","LIST_DATASETS_ROUTE","CREATE_DATASET_ROUTE","GET_DATASET_ROUTE","UPDATE_DATASET_ROUTE","DELETE_DATASET_ROUTE","LIST_ITEMS_ROUTE","ADD_ITEM_ROUTE","BATCH_INSERT_ITEMS_ROUTE","BATCH_DELETE_ITEMS_ROUTE","GET_ITEM_ROUTE","UPDATE_ITEM_ROUTE","PURGE_ITEM_ROUTE","DELETE_ITEM_ROUTE","LIST_DATASET_VERSIONS_ROUTE","LIST_ITEM_VERSIONS_ROUTE","GET_ITEM_VERSION_ROUTE","LIST_ALL_EXPERIMENTS_ROUTE","EXPERIMENT_REVIEW_SUMMARY_ROUTE","GET_ANY_EXPERIMENT_ROUTE","DELETE_ANY_EXPERIMENT_ROUTE","LIST_EXPERIMENTS_ROUTE","TRIGGER_EXPERIMENT_ROUTE","RUN_EXPERIMENT_ITEM_ROUTE","SUBMIT_EXPERIMENT_RESULT_ROUTE","FINALIZE_EXPERIMENT_ROUTE","GET_EXPERIMENT_ROUTE","DELETE_EXPERIMENT_ROUTE","UPDATE_EXPERIMENT_ROUTE","LIST_EXPERIMENT_RESULTS_ROUTE","UPDATE_EXPERIMENT_RESULT_ROUTE","COMPARE_EXPERIMENTS_ROUTE","GENERATE_ITEMS_ROUTE","CLUSTER_FAILURES_ROUTE","LIST_DYNAMIC_WORKFLOWS_ROUTE","UPSERT_DYNAMIC_WORKFLOW_ROUTE","GET_DYNAMIC_WORKFLOW_ROUTE","DELETE_DYNAMIC_WORKFLOW_ROUTE","GET_EDITOR_BUILDER_SETTINGS_ROUTE","GET_WORKFLOW_BUILDER_SETTINGS_ROUTE","STREAM_WORKFLOW_BUILDER_ROUTE","GET_EDITOR_BUILDER_AVAILABLE_MODELS_ROUTE","GET_INFRASTRUCTURE_STATUS_ROUTE","LIST_BUILDER_REGISTRIES_ROUTE","BUILDER_REGISTRY_SEARCH_ROUTE","BUILDER_REGISTRY_POPULAR_ROUTE","BUILDER_REGISTRY_PREVIEW_ROUTE","BUILDER_REGISTRY_INSTALL_ROUTE","GENERATE_LEGACY_ROUTE","STREAM_GENERATE_LEGACY_ROUTE","STREAM_LEGACY_WORKFLOW_ROUTE","OBSERVE_STREAM_LEGACY_WORKFLOW_ROUTE","LIST_LOG_TRANSPORTS_ROUTE","LIST_LOGS_ROUTE","LIST_LOGS_BY_RUN_ID_ROUTE","LIST_MCP_SERVERS_ROUTE","GET_MCP_SERVER_DETAIL_ROUTE","LIST_MCP_SERVER_TOOLS_ROUTE","GET_MCP_SERVER_TOOL_DETAIL_ROUTE","EXECUTE_MCP_SERVER_TOOL_ROUTE","LIST_MCP_SERVER_RESOURCES_ROUTE","READ_MCP_SERVER_RESOURCE_ROUTE","LIST_MCP_SERVER_EVENTS_ROUTE","POLL_MCP_SERVER_EVENT_ROUTE","STREAM_MCP_SERVER_EVENT_ROUTE","EMIT_MCP_SERVER_EVENT_ROUTE","MCP_HTTP_TRANSPORT_ROUTE","MCP_SSE_TRANSPORT_ROUTE","MCP_SSE_MESSAGES_ROUTE","GET_MEMORY_STATUS_ROUTE","GET_MEMORY_CONFIG_ROUTE","GET_OBSERVATIONAL_MEMORY_ROUTE","AWAIT_BUFFER_STATUS_ROUTE","LIST_THREADS_ROUTE","GET_THREAD_BY_ID_ROUTE","LIST_MESSAGES_ROUTE","GET_WORKING_MEMORY_ROUTE","SAVE_MESSAGES_ROUTE","CREATE_THREAD_ROUTE","UPDATE_THREAD_ROUTE","DELETE_THREAD_ROUTE","CLONE_THREAD_ROUTE","TRANSFER_THREAD_ROUTE","UPDATE_WORKING_MEMORY_ROUTE","DELETE_MESSAGES_ROUTE","SEARCH_MEMORY_ROUTE","GET_MEMORY_STATUS_NETWORK_ROUTE","LIST_THREADS_NETWORK_ROUTE","GET_THREAD_BY_ID_NETWORK_ROUTE","LIST_MESSAGES_NETWORK_ROUTE","SAVE_MESSAGES_NETWORK_ROUTE","CREATE_THREAD_NETWORK_ROUTE","UPDATE_THREAD_NETWORK_ROUTE","DELETE_THREAD_NETWORK_ROUTE","DELETE_MESSAGES_NETWORK_ROUTE","LIST_TRACES_ROUTE","LIST_TRACES_LIGHT_ROUTE","LIST_BRANCHES_ROUTE","GET_BRANCH_ROUTE","GET_TRACE_ROUTE","GET_TRACE_LIGHT_ROUTE","GET_SPAN_ROUTE","GET_TRACE_TRAJECTORY_ROUTE","DELETE_TRACES_ROUTE","SCORE_TRACES_ROUTE","LIST_SCORES_BY_SPAN_ROUTE","QUERY_TRACES","AGGREGATE_TRACES","QUERY_THREADS","QUERY_SPANS","GET_TRACE_QUERY_FIELDS","GET_TRACE_QUERY_VALUES","LIST_METRICS","LIST_LOGS","LIST_SCORES","CREATE_SCORE","DELETE_SCORES","GET_SCORE","GET_SCORE_AGGREGATE","GET_SCORE_BREAKDOWN","GET_SCORE_TIME_SERIES","GET_SCORE_PERCENTILES","LIST_FEEDBACK","CREATE_FEEDBACK","DELETE_FEEDBACK","UPDATE_FEEDBACK_REVIEW_STATUS","GET_FEEDBACK_AGGREGATE","GET_FEEDBACK_BREAKDOWN","GET_FEEDBACK_TIME_SERIES","GET_FEEDBACK_PERCENTILES","GET_METRIC_AGGREGATE","GET_METRIC_BREAKDOWN","GET_METRIC_TIME_SERIES","GET_METRIC_PERCENTILES","GET_METRIC_NAMES","GET_METRIC_LABEL_KEYS","GET_METRIC_LABEL_VALUES","GET_ENTITY_TYPES","GET_ENTITY_NAMES","GET_SERVICE_NAMES","GET_ENVIRONMENTS","GET_TAGS","GET_CAPABILITIES","LIST_PROCESSOR_PROVIDERS_ROUTE","GET_PROCESSOR_PROVIDER_ROUTE","LIST_PROCESSORS_ROUTE","GET_PROCESSOR_BY_ID_ROUTE","EXECUTE_PROCESSOR_ROUTE","CREATE_RESPONSE_ROUTE","GET_RESPONSE_ROUTE","DELETE_RESPONSE_ROUTE","LIST_SCHEDULES_ROUTE","GET_SCHEDULE_ROUTE","CREATE_SCHEDULE_ROUTE","UPDATE_SCHEDULE_ROUTE","DELETE_SCHEDULE_ROUTE","LIST_SCHEDULE_TRIGGERS_ROUTE","PAUSE_SCHEDULE_ROUTE","RESUME_SCHEDULE_ROUTE","RUN_SCHEDULE_ROUTE","LIST_SCORERS_ROUTE","GET_SCORER_ROUTE","LIST_SCORES_BY_RUN_ID_ROUTE","LIST_SCORES_BY_SCORER_ID_ROUTE","LIST_SCORES_BY_ENTITY_ID_ROUTE","SAVE_SCORE_ROUTE","LIST_STORED_AGENTS_ROUTE","PREVIEW_INSTRUCTIONS_ROUTE","GET_STORED_AGENT_DEPENDENTS_ROUTE","EXPORT_STORED_AGENT_ROUTE","OPEN_STORED_AGENT_CHANGE_REQUEST_ROUTE","GET_STORED_AGENT_ROUTE","CREATE_STORED_AGENT_ROUTE","UPDATE_STORED_AGENT_ROUTE","DELETE_STORED_AGENT_ROUTE","LIST_AGENT_VERSIONS_ROUTE","CREATE_AGENT_VERSION_ROUTE","COMPARE_AGENT_VERSIONS_ROUTE","GET_AGENT_VERSION_ROUTE","ACTIVATE_AGENT_VERSION_ROUTE","RESTORE_AGENT_VERSION_ROUTE","DELETE_AGENT_VERSION_ROUTE","FAVORITE_STORED_AGENT_ROUTE","UNFAVORITE_STORED_AGENT_ROUTE","LIST_STORED_MCP_CLIENTS_ROUTE","GET_STORED_MCP_CLIENT_ROUTE","CREATE_STORED_MCP_CLIENT_ROUTE","UPDATE_STORED_MCP_CLIENT_ROUTE","DELETE_STORED_MCP_CLIENT_ROUTE","LIST_MCP_CLIENT_VERSIONS_ROUTE","CREATE_MCP_CLIENT_VERSION_ROUTE","COMPARE_MCP_CLIENT_VERSIONS_ROUTE","GET_MCP_CLIENT_VERSION_ROUTE","ACTIVATE_MCP_CLIENT_VERSION_ROUTE","RESTORE_MCP_CLIENT_VERSION_ROUTE","DELETE_MCP_CLIENT_VERSION_ROUTE","LIST_STORED_PROMPT_BLOCKS_ROUTE","GET_STORED_PROMPT_BLOCK_ROUTE","CREATE_STORED_PROMPT_BLOCK_ROUTE","UPDATE_STORED_PROMPT_BLOCK_ROUTE","DELETE_STORED_PROMPT_BLOCK_ROUTE","LIST_PROMPT_BLOCK_VERSIONS_ROUTE","CREATE_PROMPT_BLOCK_VERSION_ROUTE","COMPARE_PROMPT_BLOCK_VERSIONS_ROUTE","GET_PROMPT_BLOCK_VERSION_ROUTE","ACTIVATE_PROMPT_BLOCK_VERSION_ROUTE","RESTORE_PROMPT_BLOCK_VERSION_ROUTE","DELETE_PROMPT_BLOCK_VERSION_ROUTE","LIST_STORED_SCORERS_ROUTE","GET_STORED_SCORER_ROUTE","CREATE_STORED_SCORER_ROUTE","UPDATE_STORED_SCORER_ROUTE","DELETE_STORED_SCORER_ROUTE","LIST_SCORER_VERSIONS_ROUTE","CREATE_SCORER_VERSION_ROUTE","COMPARE_SCORER_VERSIONS_ROUTE","GET_SCORER_VERSION_ROUTE","ACTIVATE_SCORER_VERSION_ROUTE","RESTORE_SCORER_VERSION_ROUTE","DELETE_SCORER_VERSION_ROUTE","LIST_STORED_SKILLS_ROUTE","GET_STORED_SKILL_ROUTE","CREATE_STORED_SKILL_ROUTE","UPDATE_STORED_SKILL_ROUTE","DELETE_STORED_SKILL_ROUTE","PUBLISH_STORED_SKILL_ROUTE","FAVORITE_STORED_SKILL_ROUTE","UNFAVORITE_STORED_SKILL_ROUTE","LIST_STORED_WORKSPACES_ROUTE","GET_STORED_WORKSPACE_ROUTE","CREATE_STORED_WORKSPACE_ROUTE","UPDATE_STORED_WORKSPACE_ROUTE","DELETE_STORED_WORKSPACE_ROUTE","GET_SYSTEM_PACKAGES_ROUTE","GET_API_SCHEMA_ROUTE","LIST_TOOL_PROVIDERS_ROUTE","LIST_TOOL_PROVIDER_TOOLKITS_ROUTE","LIST_TOOL_PROVIDER_TOOLS_ROUTE","GET_TOOL_PROVIDER_TOOL_SCHEMA_ROUTE","AUTHORIZE_TOOL_PROVIDER_ROUTE","GET_TOOL_PROVIDER_AUTH_STATUS_ROUTE","TOOL_PROVIDER_CONNECTION_STATUS_ROUTE","LIST_TOOL_PROVIDER_CONNECTIONS_ROUTE","LIST_TOOL_PROVIDER_CONNECTION_FIELDS_ROUTE","DISCONNECT_TOOL_PROVIDER_CONNECTION_ROUTE","UPDATE_TOOL_PROVIDER_CONNECTION_ROUTE","GET_TOOL_PROVIDER_CONNECTION_USAGE_ROUTE","GET_TOOL_PROVIDER_HEALTH_ROUTE","LIST_TOOLS_ROUTE","GET_TOOL_BY_ID_ROUTE","EXECUTE_TOOL_ROUTE","UPSERT_VECTORS_ROUTE","CREATE_INDEX_ROUTE","QUERY_VECTORS_ROUTE","LIST_INDEXES_ROUTE","DESCRIBE_INDEX_ROUTE","DELETE_INDEX_ROUTE","LIST_VECTORS_ROUTE","LIST_EMBEDDERS_ROUTE","LIST_WORKFLOWS_ROUTE","LIST_WORKFLOW_RUN_COUNTS_ROUTE","GET_WORKFLOW_BY_ID_ROUTE","LIST_WORKFLOW_RUNS_ROUTE","GET_WORKFLOW_RUN_BY_ID_ROUTE","DELETE_WORKFLOW_RUN_BY_ID_ROUTE","CREATE_WORKFLOW_RUN_ROUTE","STREAM_WORKFLOW_ROUTE","RESUME_STREAM_WORKFLOW_ROUTE","START_ASYNC_WORKFLOW_ROUTE","START_WORKFLOW_RUN_ROUTE","OBSERVE_STREAM_WORKFLOW_ROUTE","RESUME_ASYNC_WORKFLOW_ROUTE","RESUME_NO_WAIT_WORKFLOW_ROUTE","RESUME_WORKFLOW_ROUTE","CANCEL_WORKFLOW_RUN_ROUTE","TIME_TRAVEL_WORKFLOW_ROUTE","TIME_TRAVEL_ASYNC_WORKFLOW_ROUTE","TIME_TRAVEL_STREAM_WORKFLOW_ROUTE","RESTART_WORKFLOW_ROUTE","RESTART_ASYNC_WORKFLOW_ROUTE","RESTART_ALL_ACTIVE_WORKFLOW_RUNS_ROUTE","RESTART_ALL_ACTIVE_WORKFLOW_RUNS_ASYNC_ROUTE","EXECUTE_WORKFLOW_STEP_ROUTE","RECEIVE_WORKFLOW_EVENT_ROUTE","LIST_WORKSPACES_ROUTE","GET_WORKSPACE_ROUTE","WORKSPACE_FS_ROUTES","WORKSPACE_SEARCH_ROUTES","WORKSPACE_SKILLS_ROUTES","WORKSPACE_SKILLS_SH_ROUTES","AUTH_ROUTES"],"sources":["../src/server/server-adapter/routes/a2a.ts","../src/server/server-adapter/routes/agent-builder.ts","../src/server/server-adapter/routes/agent-controller.ts","../src/server/server-adapter/routes/agents.ts","../src/server/server-adapter/routes/background-tasks.ts","../src/server/server-adapter/routes/channels.ts","../src/server/server-adapter/routes/conversations.ts","../src/server/server-adapter/routes/datasets.ts","../src/server/server-adapter/routes/dynamic-workflows.ts","../src/server/server-adapter/routes/editor-builder.ts","../src/server/server-adapter/routes/legacy.ts","../src/server/server-adapter/routes/logs.ts","../src/server/server-adapter/routes/mcp.ts","../src/server/server-adapter/routes/memory.ts","../src/server/server-adapter/routes/observability.ts","../src/server/server-adapter/routes/processor-providers.ts","../src/server/server-adapter/routes/processors.ts","../src/server/server-adapter/routes/responses.ts","../src/server/server-adapter/routes/schedules.ts","../src/server/server-adapter/routes/scorers.ts","../src/server/server-adapter/routes/stored-agents.ts","../src/server/server-adapter/routes/stored-mcp-clients.ts","../src/server/server-adapter/routes/stored-prompt-blocks.ts","../src/server/server-adapter/routes/stored-scorers.ts","../src/server/server-adapter/routes/stored-skills.ts","../src/server/server-adapter/routes/stored-workspaces.ts","../src/server/server-adapter/routes/system.ts","../src/server/server-adapter/routes/tool-providers.ts","../src/server/server-adapter/routes/tools.ts","../src/server/server-adapter/routes/vectors.ts","../src/server/server-adapter/routes/workflows.ts","../src/server/server-adapter/routes/workspace.ts","../src/server/server-adapter/routes/index.ts"],"sourcesContent":["import { GET_AGENT_CARD_ROUTE, AGENT_EXECUTION_ROUTE } from '../../handlers/a2a';\n\nexport const A2A_ROUTES = [GET_AGENT_CARD_ROUTE, AGENT_EXECUTION_ROUTE] as const;\n","import {\n LIST_AGENT_BUILDER_ACTIONS_ROUTE,\n GET_AGENT_BUILDER_ACTION_BY_ID_ROUTE,\n LIST_AGENT_BUILDER_ACTION_RUNS_ROUTE,\n GET_AGENT_BUILDER_ACTION_RUN_BY_ID_ROUTE,\n CREATE_AGENT_BUILDER_ACTION_RUN_ROUTE,\n STREAM_AGENT_BUILDER_ACTION_ROUTE,\n STREAM_LEGACY_AGENT_BUILDER_ACTION_ROUTE,\n START_ASYNC_AGENT_BUILDER_ACTION_ROUTE,\n START_AGENT_BUILDER_ACTION_RUN_ROUTE,\n OBSERVE_STREAM_AGENT_BUILDER_ACTION_ROUTE,\n OBSERVE_STREAM_LEGACY_AGENT_BUILDER_ACTION_ROUTE,\n RESUME_ASYNC_AGENT_BUILDER_ACTION_ROUTE,\n RESUME_NO_WAIT_AGENT_BUILDER_ACTION_ROUTE,\n RESUME_AGENT_BUILDER_ACTION_ROUTE,\n RESUME_STREAM_AGENT_BUILDER_ACTION_ROUTE,\n CANCEL_AGENT_BUILDER_ACTION_RUN_ROUTE,\n} from '../../handlers/agent-builder';\n\nexport const AGENT_BUILDER_ROUTES = [\n LIST_AGENT_BUILDER_ACTIONS_ROUTE,\n GET_AGENT_BUILDER_ACTION_BY_ID_ROUTE,\n LIST_AGENT_BUILDER_ACTION_RUNS_ROUTE,\n GET_AGENT_BUILDER_ACTION_RUN_BY_ID_ROUTE,\n CREATE_AGENT_BUILDER_ACTION_RUN_ROUTE,\n STREAM_AGENT_BUILDER_ACTION_ROUTE,\n STREAM_LEGACY_AGENT_BUILDER_ACTION_ROUTE,\n START_ASYNC_AGENT_BUILDER_ACTION_ROUTE,\n START_AGENT_BUILDER_ACTION_RUN_ROUTE,\n OBSERVE_STREAM_AGENT_BUILDER_ACTION_ROUTE,\n OBSERVE_STREAM_LEGACY_AGENT_BUILDER_ACTION_ROUTE,\n RESUME_ASYNC_AGENT_BUILDER_ACTION_ROUTE,\n RESUME_NO_WAIT_AGENT_BUILDER_ACTION_ROUTE,\n RESUME_AGENT_BUILDER_ACTION_ROUTE,\n RESUME_STREAM_AGENT_BUILDER_ACTION_ROUTE,\n CANCEL_AGENT_BUILDER_ACTION_RUN_ROUTE,\n] as const;\n","import {\n LIST_AGENT_CONTROLLERS_ROUTE,\n CREATE_AGENT_CONTROLLER_SESSION_ROUTE,\n GET_AGENT_CONTROLLER_SESSION_STATE_ROUTE,\n STREAM_AGENT_CONTROLLER_SESSION_ROUTE,\n SEND_AGENT_CONTROLLER_MESSAGE_ROUTE,\n STEER_AGENT_CONTROLLER_SESSION_ROUTE,\n ABORT_AGENT_CONTROLLER_SESSION_ROUTE,\n AGENT_CONTROLLER_TOOL_APPROVAL_ROUTE,\n AGENT_CONTROLLER_TOOL_SUSPENSION_ROUTE,\n SWITCH_AGENT_CONTROLLER_MODE_ROUTE,\n SWITCH_AGENT_CONTROLLER_MODEL_ROUTE,\n SWITCH_AGENT_CONTROLLER_THREAD_ROUTE,\n TRANSFER_AGENT_CONTROLLER_THREAD_OWNERSHIP_ROUTE,\n LIST_AGENT_CONTROLLER_MODES_ROUTE,\n LIST_AGENT_CONTROLLER_ACTIVE_RUNS_ROUTE,\n LIST_AGENT_CONTROLLER_THREADS_ROUTE,\n SEND_AGENT_CONTROLLER_NOTIFICATION_ROUTE,\n CREATE_AGENT_CONTROLLER_THREAD_ROUTE,\n DELETE_AGENT_CONTROLLER_THREAD_ROUTE,\n RENAME_AGENT_CONTROLLER_THREAD_ROUTE,\n CLONE_AGENT_CONTROLLER_THREAD_ROUTE,\n LIST_AGENT_CONTROLLER_THREAD_MESSAGES_ROUTE,\n FOLLOW_UP_AGENT_CONTROLLER_SESSION_ROUTE,\n LIST_AGENT_CONTROLLER_MODELS_ROUTE,\n GET_AGENT_CONTROLLER_WORKSPACE_STATUS_ROUTE,\n GET_AGENT_CONTROLLER_OM_RECORD_ROUTE,\n SET_AGENT_CONTROLLER_RESOURCE_ID_ROUTE,\n GET_AGENT_CONTROLLER_RESOURCE_IDS_ROUTE,\n GET_AGENT_CONTROLLER_GOAL_ROUTE,\n SET_AGENT_CONTROLLER_GOAL_ROUTE,\n UPDATE_AGENT_CONTROLLER_GOAL_ROUTE,\n CLEAR_AGENT_CONTROLLER_GOAL_ROUTE,\n GET_AGENT_CONTROLLER_PERMISSIONS_ROUTE,\n SET_AGENT_CONTROLLER_CATEGORY_PERMISSION_ROUTE,\n SET_AGENT_CONTROLLER_TOOL_PERMISSION_ROUTE,\n SET_AGENT_CONTROLLER_SESSION_STATE_ROUTE,\n} from '../../handlers/agent-controller';\nimport type { ServerRoute } from '.';\n\n/**\n * Canonical `AgentController` session API, served under `/agent-controller/...`.\n */\nexport const AGENT_CONTROLLER_ROUTES: readonly ServerRoute[] = [\n LIST_AGENT_CONTROLLERS_ROUTE,\n LIST_AGENT_CONTROLLER_MODES_ROUTE,\n LIST_AGENT_CONTROLLER_MODELS_ROUTE,\n LIST_AGENT_CONTROLLER_ACTIVE_RUNS_ROUTE,\n CREATE_AGENT_CONTROLLER_SESSION_ROUTE,\n GET_AGENT_CONTROLLER_SESSION_STATE_ROUTE,\n LIST_AGENT_CONTROLLER_THREADS_ROUTE,\n CREATE_AGENT_CONTROLLER_THREAD_ROUTE,\n DELETE_AGENT_CONTROLLER_THREAD_ROUTE,\n RENAME_AGENT_CONTROLLER_THREAD_ROUTE,\n CLONE_AGENT_CONTROLLER_THREAD_ROUTE,\n LIST_AGENT_CONTROLLER_THREAD_MESSAGES_ROUTE,\n STREAM_AGENT_CONTROLLER_SESSION_ROUTE,\n SEND_AGENT_CONTROLLER_MESSAGE_ROUTE,\n STEER_AGENT_CONTROLLER_SESSION_ROUTE,\n FOLLOW_UP_AGENT_CONTROLLER_SESSION_ROUTE,\n ABORT_AGENT_CONTROLLER_SESSION_ROUTE,\n AGENT_CONTROLLER_TOOL_APPROVAL_ROUTE,\n AGENT_CONTROLLER_TOOL_SUSPENSION_ROUTE,\n SWITCH_AGENT_CONTROLLER_MODE_ROUTE,\n SWITCH_AGENT_CONTROLLER_MODEL_ROUTE,\n SWITCH_AGENT_CONTROLLER_THREAD_ROUTE,\n TRANSFER_AGENT_CONTROLLER_THREAD_OWNERSHIP_ROUTE,\n SEND_AGENT_CONTROLLER_NOTIFICATION_ROUTE,\n GET_AGENT_CONTROLLER_WORKSPACE_STATUS_ROUTE,\n GET_AGENT_CONTROLLER_OM_RECORD_ROUTE,\n SET_AGENT_CONTROLLER_RESOURCE_ID_ROUTE,\n GET_AGENT_CONTROLLER_RESOURCE_IDS_ROUTE,\n GET_AGENT_CONTROLLER_GOAL_ROUTE,\n SET_AGENT_CONTROLLER_GOAL_ROUTE,\n UPDATE_AGENT_CONTROLLER_GOAL_ROUTE,\n CLEAR_AGENT_CONTROLLER_GOAL_ROUTE,\n GET_AGENT_CONTROLLER_PERMISSIONS_ROUTE,\n SET_AGENT_CONTROLLER_CATEGORY_PERMISSION_ROUTE,\n SET_AGENT_CONTROLLER_TOOL_PERMISSION_ROUTE,\n SET_AGENT_CONTROLLER_SESSION_STATE_ROUTE,\n];\n","import {\n // Agent route objects\n LIST_AGENTS_ROUTE,\n GET_AGENT_BY_ID_ROUTE,\n CLONE_AGENT_ROUTE,\n GENERATE_AGENT_ROUTE,\n GENERATE_AGENT_VNEXT_ROUTE,\n STREAM_GENERATE_ROUTE,\n STREAM_GENERATE_VNEXT_DEPRECATED_ROUTE,\n OBSERVE_AGENT_STREAM_ROUTE,\n SEND_AGENT_MESSAGE_ROUTE,\n QUEUE_AGENT_MESSAGE_ROUTE,\n QUEUE_AGENT_SIGNAL_ROUTE,\n SEND_AGENT_SIGNAL_ROUTE,\n ABORT_AGENT_THREAD_ROUTE,\n CANCEL_AGENT_PENDING_SIGNALS_ROUTE,\n SUBSCRIBE_AGENT_THREAD_ROUTE,\n GET_PROVIDERS_ROUTE,\n APPROVE_TOOL_CALL_ROUTE,\n SEND_TOOL_APPROVAL_ROUTE,\n LIST_SUSPENDED_RUNS_ROUTE,\n DECLINE_TOOL_CALL_ROUTE,\n RESUME_STREAM_ROUTE,\n RECOVER_ROUTE,\n APPROVE_TOOL_CALL_GENERATE_ROUTE,\n DECLINE_TOOL_CALL_GENERATE_ROUTE,\n STREAM_NETWORK_ROUTE,\n UPDATE_AGENT_MODEL_ROUTE,\n RESET_AGENT_MODEL_ROUTE,\n REORDER_AGENT_MODEL_LIST_ROUTE,\n UPDATE_AGENT_MODEL_IN_MODEL_LIST_ROUTE,\n ENHANCE_INSTRUCTIONS_ROUTE,\n STREAM_VNEXT_DEPRECATED_ROUTE,\n STREAM_UI_MESSAGE_VNEXT_DEPRECATED_ROUTE,\n STREAM_UI_MESSAGE_DEPRECATED_ROUTE,\n APPROVE_NETWORK_TOOL_CALL_ROUTE,\n DECLINE_NETWORK_TOOL_CALL_ROUTE,\n GET_AGENT_SKILL_ROUTE,\n STREAM_UNTIL_IDLE_GENERATE_ROUTE,\n RESUME_STREAM_UNTIL_IDLE_ROUTE,\n} from '../../handlers/agents';\nimport { READ_AGENT_PLAN_ROUTE } from '../../handlers/plans';\nimport { GET_AGENT_TOOL_ROUTE, EXECUTE_AGENT_TOOL_ROUTE } from '../../handlers/tools';\nimport {\n GET_SPEAKERS_ROUTE,\n GET_SPEAKERS_DEPRECATED_ROUTE,\n GENERATE_SPEECH_ROUTE,\n GENERATE_SPEECH_DEPRECATED_ROUTE,\n TRANSCRIBE_SPEECH_ROUTE,\n TRANSCRIBE_SPEECH_DEPRECATED_ROUTE,\n GET_LISTENER_ROUTE,\n} from '../../handlers/voice';\nimport type { ServerRoute } from '.';\n\nexport const AGENTS_ROUTES: readonly ServerRoute[] = [\n // ============================================================================\n // Agent Core Routes\n // ============================================================================\n LIST_AGENTS_ROUTE,\n GET_PROVIDERS_ROUTE,\n GET_AGENT_BY_ID_ROUTE,\n CLONE_AGENT_ROUTE,\n\n // ============================================================================\n // Voice Routes\n // ============================================================================\n GET_SPEAKERS_ROUTE,\n GET_SPEAKERS_DEPRECATED_ROUTE,\n\n // ============================================================================\n // Agent Execution Routes\n // ============================================================================\n GENERATE_AGENT_ROUTE,\n GENERATE_AGENT_VNEXT_ROUTE,\n STREAM_GENERATE_ROUTE,\n STREAM_UNTIL_IDLE_GENERATE_ROUTE,\n STREAM_GENERATE_VNEXT_DEPRECATED_ROUTE,\n\n // ============================================================================\n // Resumable Stream Routes\n // ============================================================================\n OBSERVE_AGENT_STREAM_ROUTE,\n SEND_AGENT_MESSAGE_ROUTE,\n QUEUE_AGENT_MESSAGE_ROUTE,\n QUEUE_AGENT_SIGNAL_ROUTE,\n SEND_AGENT_SIGNAL_ROUTE,\n ABORT_AGENT_THREAD_ROUTE,\n CANCEL_AGENT_PENDING_SIGNALS_ROUTE,\n SUBSCRIBE_AGENT_THREAD_ROUTE,\n\n // ============================================================================\n // Tool Routes\n // ============================================================================\n EXECUTE_AGENT_TOOL_ROUTE,\n APPROVE_TOOL_CALL_ROUTE,\n SEND_TOOL_APPROVAL_ROUTE,\n LIST_SUSPENDED_RUNS_ROUTE,\n DECLINE_TOOL_CALL_ROUTE,\n RESUME_STREAM_ROUTE,\n RECOVER_ROUTE,\n APPROVE_TOOL_CALL_GENERATE_ROUTE,\n DECLINE_TOOL_CALL_GENERATE_ROUTE,\n APPROVE_NETWORK_TOOL_CALL_ROUTE,\n DECLINE_NETWORK_TOOL_CALL_ROUTE,\n RESUME_STREAM_UNTIL_IDLE_ROUTE,\n\n // ============================================================================\n // Network Routes\n // ============================================================================\n STREAM_NETWORK_ROUTE,\n\n // ============================================================================\n // Model Management Routes\n // ============================================================================\n UPDATE_AGENT_MODEL_ROUTE,\n RESET_AGENT_MODEL_ROUTE,\n REORDER_AGENT_MODEL_LIST_ROUTE,\n UPDATE_AGENT_MODEL_IN_MODEL_LIST_ROUTE,\n\n // ============================================================================\n // Instruction Enhancement Routes\n // ============================================================================\n ENHANCE_INSTRUCTIONS_ROUTE,\n\n // ============================================================================\n // Agent Tool Routes\n // ============================================================================\n GET_AGENT_TOOL_ROUTE,\n READ_AGENT_PLAN_ROUTE,\n\n // ============================================================================\n // Agent Skill Routes\n // ============================================================================\n GET_AGENT_SKILL_ROUTE,\n\n // ============================================================================\n // Voice/Speech Routes\n // ============================================================================\n GENERATE_SPEECH_ROUTE,\n GENERATE_SPEECH_DEPRECATED_ROUTE,\n TRANSCRIBE_SPEECH_ROUTE,\n TRANSCRIBE_SPEECH_DEPRECATED_ROUTE,\n GET_LISTENER_ROUTE,\n\n // ============================================================================\n // Deprecated Routes\n // ============================================================================\n STREAM_VNEXT_DEPRECATED_ROUTE,\n STREAM_UI_MESSAGE_VNEXT_DEPRECATED_ROUTE,\n STREAM_UI_MESSAGE_DEPRECATED_ROUTE,\n];\n\n/**\n * Type-level tuple preserving each agent route's specific schema types.\n * Used by ServerRoutes to build the type-level route map.\n */\nexport type AgentRoutes = readonly [\n typeof LIST_AGENTS_ROUTE,\n typeof GET_PROVIDERS_ROUTE,\n typeof GET_AGENT_BY_ID_ROUTE,\n typeof CLONE_AGENT_ROUTE,\n typeof GET_SPEAKERS_ROUTE,\n typeof GET_SPEAKERS_DEPRECATED_ROUTE,\n typeof GENERATE_AGENT_ROUTE,\n typeof GENERATE_AGENT_VNEXT_ROUTE,\n typeof STREAM_GENERATE_ROUTE,\n typeof STREAM_UNTIL_IDLE_GENERATE_ROUTE,\n typeof STREAM_GENERATE_VNEXT_DEPRECATED_ROUTE,\n typeof SEND_AGENT_MESSAGE_ROUTE,\n typeof QUEUE_AGENT_MESSAGE_ROUTE,\n typeof QUEUE_AGENT_SIGNAL_ROUTE,\n typeof SEND_AGENT_SIGNAL_ROUTE,\n typeof ABORT_AGENT_THREAD_ROUTE,\n typeof CANCEL_AGENT_PENDING_SIGNALS_ROUTE,\n typeof SUBSCRIBE_AGENT_THREAD_ROUTE,\n typeof EXECUTE_AGENT_TOOL_ROUTE,\n typeof APPROVE_TOOL_CALL_ROUTE,\n typeof SEND_TOOL_APPROVAL_ROUTE,\n typeof LIST_SUSPENDED_RUNS_ROUTE,\n typeof DECLINE_TOOL_CALL_ROUTE,\n typeof RESUME_STREAM_ROUTE,\n typeof RECOVER_ROUTE,\n typeof RESUME_STREAM_UNTIL_IDLE_ROUTE,\n typeof APPROVE_TOOL_CALL_GENERATE_ROUTE,\n typeof DECLINE_TOOL_CALL_GENERATE_ROUTE,\n typeof APPROVE_NETWORK_TOOL_CALL_ROUTE,\n typeof DECLINE_NETWORK_TOOL_CALL_ROUTE,\n typeof STREAM_NETWORK_ROUTE,\n typeof UPDATE_AGENT_MODEL_ROUTE,\n typeof RESET_AGENT_MODEL_ROUTE,\n typeof REORDER_AGENT_MODEL_LIST_ROUTE,\n typeof UPDATE_AGENT_MODEL_IN_MODEL_LIST_ROUTE,\n typeof ENHANCE_INSTRUCTIONS_ROUTE,\n typeof GET_AGENT_TOOL_ROUTE,\n typeof READ_AGENT_PLAN_ROUTE,\n typeof GET_AGENT_SKILL_ROUTE,\n typeof GENERATE_SPEECH_ROUTE,\n typeof GENERATE_SPEECH_DEPRECATED_ROUTE,\n typeof TRANSCRIBE_SPEECH_ROUTE,\n typeof TRANSCRIBE_SPEECH_DEPRECATED_ROUTE,\n typeof GET_LISTENER_ROUTE,\n typeof STREAM_VNEXT_DEPRECATED_ROUTE,\n typeof STREAM_UI_MESSAGE_VNEXT_DEPRECATED_ROUTE,\n typeof STREAM_UI_MESSAGE_DEPRECATED_ROUTE,\n];\n","import {\n BACKGROUND_TASK_STREAM_ROUTE,\n GET_BACKGROUND_TASK_ROUTE,\n LIST_BACKGROUND_TASKS_ROUTE,\n} from '../../handlers/background-tasks';\nimport type { ServerRoute } from '.';\n\nexport const BACKGROUND_TASK_ROUTES: ServerRoute<any, any, any>[] = [\n BACKGROUND_TASK_STREAM_ROUTE,\n LIST_BACKGROUND_TASKS_ROUTE,\n GET_BACKGROUND_TASK_ROUTE,\n];\n","import {\n LIST_CHANNEL_PLATFORMS_ROUTE,\n LIST_CHANNEL_INSTALLATIONS_ROUTE,\n CONNECT_CHANNEL_ROUTE,\n RECONCILE_CHANNEL_ROUTE,\n DISCONNECT_CHANNEL_ROUTE,\n} from '../../handlers/channels';\n\nexport const CHANNELS_ROUTES = [\n LIST_CHANNEL_PLATFORMS_ROUTE,\n LIST_CHANNEL_INSTALLATIONS_ROUTE,\n CONNECT_CHANNEL_ROUTE,\n RECONCILE_CHANNEL_ROUTE,\n DISCONNECT_CHANNEL_ROUTE,\n] as const;\n","import {\n CREATE_CONVERSATION_ROUTE,\n DELETE_CONVERSATION_ROUTE,\n GET_CONVERSATION_ITEMS_ROUTE,\n GET_CONVERSATION_ROUTE,\n} from '../../handlers/conversations';\n\nexport const CONVERSATIONS_ROUTES = [\n CREATE_CONVERSATION_ROUTE,\n GET_CONVERSATION_ROUTE,\n GET_CONVERSATION_ITEMS_ROUTE,\n DELETE_CONVERSATION_ROUTE,\n] as const;\n","import {\n LIST_DATASETS_ROUTE,\n CREATE_DATASET_ROUTE,\n GET_DATASET_ROUTE,\n UPDATE_DATASET_ROUTE,\n DELETE_DATASET_ROUTE,\n LIST_ITEMS_ROUTE,\n ADD_ITEM_ROUTE,\n GET_ITEM_ROUTE,\n UPDATE_ITEM_ROUTE,\n DELETE_ITEM_ROUTE,\n PURGE_ITEM_ROUTE,\n LIST_ALL_EXPERIMENTS_ROUTE,\n EXPERIMENT_REVIEW_SUMMARY_ROUTE,\n GET_ANY_EXPERIMENT_ROUTE,\n DELETE_ANY_EXPERIMENT_ROUTE,\n LIST_EXPERIMENTS_ROUTE,\n TRIGGER_EXPERIMENT_ROUTE,\n RUN_EXPERIMENT_ITEM_ROUTE,\n SUBMIT_EXPERIMENT_RESULT_ROUTE,\n FINALIZE_EXPERIMENT_ROUTE,\n GET_EXPERIMENT_ROUTE,\n DELETE_EXPERIMENT_ROUTE,\n UPDATE_EXPERIMENT_ROUTE,\n LIST_EXPERIMENT_RESULTS_ROUTE,\n UPDATE_EXPERIMENT_RESULT_ROUTE,\n COMPARE_EXPERIMENTS_ROUTE,\n LIST_DATASET_VERSIONS_ROUTE,\n LIST_ITEM_VERSIONS_ROUTE,\n GET_ITEM_VERSION_ROUTE,\n BATCH_INSERT_ITEMS_ROUTE,\n BATCH_DELETE_ITEMS_ROUTE,\n GENERATE_ITEMS_ROUTE,\n CLUSTER_FAILURES_ROUTE,\n} from '../../handlers/datasets';\n\nexport const DATASETS_ROUTES = [\n // Dataset CRUD\n LIST_DATASETS_ROUTE,\n CREATE_DATASET_ROUTE,\n GET_DATASET_ROUTE,\n UPDATE_DATASET_ROUTE,\n DELETE_DATASET_ROUTE,\n // Item list and add\n LIST_ITEMS_ROUTE,\n ADD_ITEM_ROUTE,\n // Batch operations - MUST come before item-specific routes to avoid /items/batch matching /items/:itemId\n BATCH_INSERT_ITEMS_ROUTE,\n BATCH_DELETE_ITEMS_ROUTE,\n // Item-specific CRUD (uses :itemId param)\n GET_ITEM_ROUTE,\n UPDATE_ITEM_ROUTE,\n PURGE_ITEM_ROUTE,\n DELETE_ITEM_ROUTE,\n // Version operations\n LIST_DATASET_VERSIONS_ROUTE,\n LIST_ITEM_VERSIONS_ROUTE,\n GET_ITEM_VERSION_ROUTE,\n // All experiments (cross-dataset) - MUST come before dataset-scoped experiments\n LIST_ALL_EXPERIMENTS_ROUTE,\n // Experiment review summary (cross-dataset) - MUST come before dataset-scoped experiments\n EXPERIMENT_REVIEW_SUMMARY_ROUTE,\n // Cross-dataset experiment get/delete (covers experiments orphaned by dataset deletion)\n // MUST come after the review summary so /experiments/review-summary is not matched as :experimentId\n GET_ANY_EXPERIMENT_ROUTE,\n DELETE_ANY_EXPERIMENT_ROUTE,\n // Experiment operations (dataset-scoped)\n LIST_EXPERIMENTS_ROUTE,\n TRIGGER_EXPERIMENT_ROUTE,\n // Caller-driven experiments (run one item, submit results, finalize)\n RUN_EXPERIMENT_ITEM_ROUTE,\n SUBMIT_EXPERIMENT_RESULT_ROUTE,\n FINALIZE_EXPERIMENT_ROUTE,\n GET_EXPERIMENT_ROUTE,\n DELETE_EXPERIMENT_ROUTE,\n UPDATE_EXPERIMENT_ROUTE,\n LIST_EXPERIMENT_RESULTS_ROUTE,\n UPDATE_EXPERIMENT_RESULT_ROUTE,\n // Analytics\n COMPARE_EXPERIMENTS_ROUTE,\n // AI generation\n GENERATE_ITEMS_ROUTE,\n // Failure analysis\n CLUSTER_FAILURES_ROUTE,\n] as const;\n","import {\n DELETE_DYNAMIC_WORKFLOW_ROUTE,\n GET_DYNAMIC_WORKFLOW_ROUTE,\n LIST_DYNAMIC_WORKFLOWS_ROUTE,\n UPSERT_DYNAMIC_WORKFLOW_ROUTE,\n} from '../../handlers/dynamic-workflows';\nimport type { ServerRoute } from '.';\n\n/**\n * Routes for dynamic workflow definitions: list / get / upsert / delete.\n * Upsert is the path the chat-driven workflow-builder agent (and Studio's\n * future \"Save\" button) uses to persist + live-register a workflow without\n * a server restart.\n */\nexport const DYNAMIC_WORKFLOWS_ROUTES: readonly ServerRoute[] = [\n LIST_DYNAMIC_WORKFLOWS_ROUTE,\n UPSERT_DYNAMIC_WORKFLOW_ROUTE,\n GET_DYNAMIC_WORKFLOW_ROUTE, // After UPSERT (POST) since both are on the same /stored/workflows base\n DELETE_DYNAMIC_WORKFLOW_ROUTE,\n];\n\nexport type DynamicWorkflowRoutes = readonly [\n typeof LIST_DYNAMIC_WORKFLOWS_ROUTE,\n typeof UPSERT_DYNAMIC_WORKFLOW_ROUTE,\n typeof GET_DYNAMIC_WORKFLOW_ROUTE,\n typeof DELETE_DYNAMIC_WORKFLOW_ROUTE,\n];\n","import {\n BUILDER_REGISTRY_INSTALL_ROUTE,\n BUILDER_REGISTRY_POPULAR_ROUTE,\n BUILDER_REGISTRY_PREVIEW_ROUTE,\n BUILDER_REGISTRY_SEARCH_ROUTE,\n LIST_BUILDER_REGISTRIES_ROUTE,\n} from '../../handlers/builder-registry';\nimport {\n GET_EDITOR_BUILDER_AVAILABLE_MODELS_ROUTE,\n GET_EDITOR_BUILDER_SETTINGS_ROUTE,\n GET_INFRASTRUCTURE_STATUS_ROUTE,\n} from '../../handlers/editor-builder';\nimport { GET_WORKFLOW_BUILDER_SETTINGS_ROUTE, STREAM_WORKFLOW_BUILDER_ROUTE } from '../../handlers/workflow-builder';\n\n/**\n * Editor Builder Routes\n *\n * Routes for agent builder settings, infrastructure status, and external\n * skill registries.\n */\nexport const EDITOR_BUILDER_ROUTES = [\n GET_EDITOR_BUILDER_SETTINGS_ROUTE,\n GET_WORKFLOW_BUILDER_SETTINGS_ROUTE,\n STREAM_WORKFLOW_BUILDER_ROUTE,\n GET_EDITOR_BUILDER_AVAILABLE_MODELS_ROUTE,\n GET_INFRASTRUCTURE_STATUS_ROUTE,\n LIST_BUILDER_REGISTRIES_ROUTE,\n BUILDER_REGISTRY_SEARCH_ROUTE,\n BUILDER_REGISTRY_POPULAR_ROUTE,\n BUILDER_REGISTRY_PREVIEW_ROUTE,\n BUILDER_REGISTRY_INSTALL_ROUTE,\n] as const;\n","/**\n * Legacy routes that are deprecated but still exist in deployer for backward compatibility.\n * These routes should not be used in new code and will be removed in a future version.\n */\n\nimport { GENERATE_LEGACY_ROUTE, STREAM_GENERATE_LEGACY_ROUTE } from '../../handlers/agents';\nimport { STREAM_LEGACY_WORKFLOW_ROUTE, OBSERVE_STREAM_LEGACY_WORKFLOW_ROUTE } from '../../handlers/workflows';\n\nexport const LEGACY_ROUTES = [\n // ============================================================================\n // Legacy Agent Routes\n // ============================================================================\n GENERATE_LEGACY_ROUTE,\n STREAM_GENERATE_LEGACY_ROUTE,\n\n // ============================================================================\n // Legacy Workflow Routes\n // ============================================================================\n STREAM_LEGACY_WORKFLOW_ROUTE,\n OBSERVE_STREAM_LEGACY_WORKFLOW_ROUTE,\n] as const;\n","import { LIST_LOG_TRANSPORTS_ROUTE, LIST_LOGS_ROUTE, LIST_LOGS_BY_RUN_ID_ROUTE } from '../../handlers/logs';\n\nexport const LOGS_ROUTES = [LIST_LOG_TRANSPORTS_ROUTE, LIST_LOGS_ROUTE, LIST_LOGS_BY_RUN_ID_ROUTE] as const;\n","import {\n LIST_MCP_SERVERS_ROUTE,\n GET_MCP_SERVER_DETAIL_ROUTE,\n LIST_MCP_SERVER_TOOLS_ROUTE,\n GET_MCP_SERVER_TOOL_DETAIL_ROUTE,\n EXECUTE_MCP_SERVER_TOOL_ROUTE,\n LIST_MCP_SERVER_RESOURCES_ROUTE,\n READ_MCP_SERVER_RESOURCE_ROUTE,\n LIST_MCP_SERVER_EVENTS_ROUTE,\n POLL_MCP_SERVER_EVENT_ROUTE,\n STREAM_MCP_SERVER_EVENT_ROUTE,\n EMIT_MCP_SERVER_EVENT_ROUTE,\n MCP_HTTP_TRANSPORT_ROUTE,\n MCP_SSE_TRANSPORT_ROUTE,\n MCP_SSE_MESSAGES_ROUTE,\n} from '../../handlers/mcp';\n\n/**\n * MCP Routes\n *\n * Registry routes provide access to the MCP server registry and tools.\n * Transport routes handle the MCP protocol communication (HTTP and SSE).\n */\nexport const MCP_ROUTES = [\n // ============================================================================\n // MCP Server Registry Routes\n // ============================================================================\n LIST_MCP_SERVERS_ROUTE,\n GET_MCP_SERVER_DETAIL_ROUTE,\n\n // ============================================================================\n // MCP Server Tool Routes\n // ============================================================================\n LIST_MCP_SERVER_TOOLS_ROUTE,\n GET_MCP_SERVER_TOOL_DETAIL_ROUTE,\n EXECUTE_MCP_SERVER_TOOL_ROUTE,\n\n // ============================================================================\n // MCP Server Resource Routes\n // ============================================================================\n LIST_MCP_SERVER_RESOURCES_ROUTE,\n READ_MCP_SERVER_RESOURCE_ROUTE,\n\n // ============================================================================\n // MCP Server Event Routes (experimental; emit is served only under `mastra dev`)\n // ============================================================================\n LIST_MCP_SERVER_EVENTS_ROUTE,\n POLL_MCP_SERVER_EVENT_ROUTE,\n STREAM_MCP_SERVER_EVENT_ROUTE,\n EMIT_MCP_SERVER_EVENT_ROUTE,\n\n // ============================================================================\n // MCP Transport Routes (handled by adapters)\n // ============================================================================\n MCP_HTTP_TRANSPORT_ROUTE,\n MCP_SSE_TRANSPORT_ROUTE,\n MCP_SSE_MESSAGES_ROUTE,\n] as const;\n","import {\n GET_MEMORY_STATUS_ROUTE,\n GET_MEMORY_CONFIG_ROUTE,\n GET_OBSERVATIONAL_MEMORY_ROUTE,\n AWAIT_BUFFER_STATUS_ROUTE,\n LIST_THREADS_ROUTE,\n GET_THREAD_BY_ID_ROUTE,\n LIST_MESSAGES_ROUTE,\n GET_WORKING_MEMORY_ROUTE,\n SAVE_MESSAGES_ROUTE,\n CREATE_THREAD_ROUTE,\n UPDATE_THREAD_ROUTE,\n DELETE_THREAD_ROUTE,\n CLONE_THREAD_ROUTE,\n TRANSFER_THREAD_ROUTE,\n UPDATE_WORKING_MEMORY_ROUTE,\n DELETE_MESSAGES_ROUTE,\n SEARCH_MEMORY_ROUTE,\n GET_MEMORY_STATUS_NETWORK_ROUTE,\n LIST_THREADS_NETWORK_ROUTE,\n GET_THREAD_BY_ID_NETWORK_ROUTE,\n LIST_MESSAGES_NETWORK_ROUTE,\n SAVE_MESSAGES_NETWORK_ROUTE,\n CREATE_THREAD_NETWORK_ROUTE,\n UPDATE_THREAD_NETWORK_ROUTE,\n DELETE_THREAD_NETWORK_ROUTE,\n DELETE_MESSAGES_NETWORK_ROUTE,\n} from '../../handlers/memory';\n\nexport const MEMORY_ROUTES = [\n GET_MEMORY_STATUS_ROUTE,\n GET_MEMORY_CONFIG_ROUTE,\n GET_OBSERVATIONAL_MEMORY_ROUTE,\n AWAIT_BUFFER_STATUS_ROUTE,\n LIST_THREADS_ROUTE,\n GET_THREAD_BY_ID_ROUTE,\n LIST_MESSAGES_ROUTE,\n GET_WORKING_MEMORY_ROUTE,\n SAVE_MESSAGES_ROUTE,\n CREATE_THREAD_ROUTE,\n UPDATE_THREAD_ROUTE,\n DELETE_THREAD_ROUTE,\n CLONE_THREAD_ROUTE,\n TRANSFER_THREAD_ROUTE,\n UPDATE_WORKING_MEMORY_ROUTE,\n DELETE_MESSAGES_ROUTE,\n SEARCH_MEMORY_ROUTE,\n GET_MEMORY_STATUS_NETWORK_ROUTE,\n LIST_THREADS_NETWORK_ROUTE,\n GET_THREAD_BY_ID_NETWORK_ROUTE,\n LIST_MESSAGES_NETWORK_ROUTE,\n SAVE_MESSAGES_NETWORK_ROUTE,\n CREATE_THREAD_NETWORK_ROUTE,\n UPDATE_THREAD_NETWORK_ROUTE,\n DELETE_THREAD_NETWORK_ROUTE,\n DELETE_MESSAGES_NETWORK_ROUTE,\n] as const;\n","import {\n LIST_TRACES_ROUTE,\n LIST_TRACES_LIGHT_ROUTE,\n LIST_BRANCHES_ROUTE,\n GET_BRANCH_ROUTE,\n GET_TRACE_ROUTE,\n GET_TRACE_LIGHT_ROUTE,\n GET_SPAN_ROUTE,\n GET_TRACE_TRAJECTORY_ROUTE,\n DELETE_TRACES_ROUTE,\n SCORE_TRACES_ROUTE,\n LIST_SCORES_BY_SPAN_ROUTE,\n} from '../../handlers/observability';\nimport {\n QUERY_TRACES,\n AGGREGATE_TRACES,\n QUERY_THREADS,\n QUERY_SPANS,\n GET_TRACE_QUERY_FIELDS,\n GET_TRACE_QUERY_VALUES,\n LIST_METRICS,\n LIST_LOGS,\n LIST_SCORES,\n CREATE_SCORE,\n DELETE_SCORES,\n GET_SCORE,\n GET_SCORE_AGGREGATE,\n GET_SCORE_BREAKDOWN,\n GET_SCORE_TIME_SERIES,\n GET_SCORE_PERCENTILES,\n LIST_FEEDBACK,\n CREATE_FEEDBACK,\n DELETE_FEEDBACK,\n UPDATE_FEEDBACK_REVIEW_STATUS,\n GET_FEEDBACK_AGGREGATE,\n GET_FEEDBACK_BREAKDOWN,\n GET_FEEDBACK_TIME_SERIES,\n GET_FEEDBACK_PERCENTILES,\n GET_METRIC_AGGREGATE,\n GET_METRIC_BREAKDOWN,\n GET_METRIC_TIME_SERIES,\n GET_METRIC_PERCENTILES,\n GET_METRIC_NAMES,\n GET_METRIC_LABEL_KEYS,\n GET_METRIC_LABEL_VALUES,\n GET_ENTITY_TYPES,\n GET_ENTITY_NAMES,\n GET_SERVICE_NAMES,\n GET_ENVIRONMENTS,\n GET_TAGS,\n GET_CAPABILITIES,\n} from '../../handlers/observability-new-endpoints';\n\nexport const OBSERVABILITY_ROUTES = [\n // Legacy\n LIST_TRACES_ROUTE,\n LIST_TRACES_LIGHT_ROUTE,\n LIST_BRANCHES_ROUTE,\n GET_BRANCH_ROUTE,\n GET_TRACE_ROUTE,\n GET_TRACE_LIGHT_ROUTE,\n GET_SPAN_ROUTE,\n GET_TRACE_TRAJECTORY_ROUTE,\n DELETE_TRACES_ROUTE,\n SCORE_TRACES_ROUTE,\n LIST_SCORES_BY_SPAN_ROUTE,\n // New observability routes\n QUERY_TRACES,\n AGGREGATE_TRACES,\n QUERY_THREADS,\n QUERY_SPANS,\n GET_TRACE_QUERY_FIELDS,\n GET_TRACE_QUERY_VALUES,\n LIST_METRICS,\n LIST_LOGS,\n LIST_SCORES,\n CREATE_SCORE,\n DELETE_SCORES,\n GET_SCORE,\n GET_SCORE_AGGREGATE,\n GET_SCORE_BREAKDOWN,\n GET_SCORE_TIME_SERIES,\n GET_SCORE_PERCENTILES,\n LIST_FEEDBACK,\n CREATE_FEEDBACK,\n DELETE_FEEDBACK,\n UPDATE_FEEDBACK_REVIEW_STATUS,\n GET_FEEDBACK_AGGREGATE,\n GET_FEEDBACK_BREAKDOWN,\n GET_FEEDBACK_TIME_SERIES,\n GET_FEEDBACK_PERCENTILES,\n GET_METRIC_AGGREGATE,\n GET_METRIC_BREAKDOWN,\n GET_METRIC_TIME_SERIES,\n GET_METRIC_PERCENTILES,\n GET_METRIC_NAMES,\n GET_METRIC_LABEL_KEYS,\n GET_METRIC_LABEL_VALUES,\n GET_ENTITY_TYPES,\n GET_ENTITY_NAMES,\n GET_SERVICE_NAMES,\n GET_ENVIRONMENTS,\n GET_TAGS,\n GET_CAPABILITIES,\n] as const;\n","import { LIST_PROCESSOR_PROVIDERS_ROUTE, GET_PROCESSOR_PROVIDER_ROUTE } from '../../handlers/processor-providers';\n\nexport const PROCESSOR_PROVIDER_ROUTES = [LIST_PROCESSOR_PROVIDERS_ROUTE, GET_PROCESSOR_PROVIDER_ROUTE] as const;\n","import { LIST_PROCESSORS_ROUTE, GET_PROCESSOR_BY_ID_ROUTE, EXECUTE_PROCESSOR_ROUTE } from '../../handlers/processors';\n\nexport const PROCESSORS_ROUTES = [LIST_PROCESSORS_ROUTE, GET_PROCESSOR_BY_ID_ROUTE, EXECUTE_PROCESSOR_ROUTE] as const;\n","import { CREATE_RESPONSE_ROUTE, DELETE_RESPONSE_ROUTE, GET_RESPONSE_ROUTE } from '../../handlers/responses';\n\nexport const RESPONSES_ROUTES = [CREATE_RESPONSE_ROUTE, GET_RESPONSE_ROUTE, DELETE_RESPONSE_ROUTE] as const;\n","import {\n CREATE_SCHEDULE_ROUTE,\n DELETE_SCHEDULE_ROUTE,\n GET_SCHEDULE_ROUTE,\n LIST_SCHEDULES_ROUTE,\n LIST_SCHEDULE_TRIGGERS_ROUTE,\n PAUSE_SCHEDULE_ROUTE,\n RESUME_SCHEDULE_ROUTE,\n RUN_SCHEDULE_ROUTE,\n UPDATE_SCHEDULE_ROUTE,\n} from '../../handlers/schedules';\nimport type { ServerRoute } from '.';\n\nexport const SCHEDULES_ROUTES: ServerRoute<any, any, any>[] = [\n LIST_SCHEDULES_ROUTE,\n GET_SCHEDULE_ROUTE,\n CREATE_SCHEDULE_ROUTE,\n UPDATE_SCHEDULE_ROUTE,\n DELETE_SCHEDULE_ROUTE,\n LIST_SCHEDULE_TRIGGERS_ROUTE,\n PAUSE_SCHEDULE_ROUTE,\n RESUME_SCHEDULE_ROUTE,\n RUN_SCHEDULE_ROUTE,\n];\n","import {\n LIST_SCORERS_ROUTE,\n GET_SCORER_ROUTE,\n LIST_SCORES_BY_RUN_ID_ROUTE,\n LIST_SCORES_BY_SCORER_ID_ROUTE,\n LIST_SCORES_BY_ENTITY_ID_ROUTE,\n SAVE_SCORE_ROUTE,\n} from '../../handlers/scores';\n\nexport const SCORES_ROUTES = [\n LIST_SCORERS_ROUTE,\n GET_SCORER_ROUTE,\n LIST_SCORES_BY_RUN_ID_ROUTE,\n LIST_SCORES_BY_SCORER_ID_ROUTE,\n LIST_SCORES_BY_ENTITY_ID_ROUTE,\n SAVE_SCORE_ROUTE,\n] as const;\n","import {\n LIST_AGENT_VERSIONS_ROUTE,\n CREATE_AGENT_VERSION_ROUTE,\n GET_AGENT_VERSION_ROUTE,\n ACTIVATE_AGENT_VERSION_ROUTE,\n RESTORE_AGENT_VERSION_ROUTE,\n DELETE_AGENT_VERSION_ROUTE,\n COMPARE_AGENT_VERSIONS_ROUTE,\n} from '../../handlers/agent-versions';\nimport { FAVORITE_STORED_AGENT_ROUTE, UNFAVORITE_STORED_AGENT_ROUTE } from '../../handlers/stored-agent-favorites';\nimport {\n LIST_STORED_AGENTS_ROUTE,\n GET_STORED_AGENT_ROUTE,\n GET_STORED_AGENT_DEPENDENTS_ROUTE,\n CREATE_STORED_AGENT_ROUTE,\n UPDATE_STORED_AGENT_ROUTE,\n DELETE_STORED_AGENT_ROUTE,\n PREVIEW_INSTRUCTIONS_ROUTE,\n EXPORT_STORED_AGENT_ROUTE,\n OPEN_STORED_AGENT_CHANGE_REQUEST_ROUTE,\n} from '../../handlers/stored-agents';\nimport type { ServerRoute } from '.';\n\n/**\n * Routes for stored agents CRUD operations and version management.\n * These routes provide API access to agent configurations stored in the database,\n * enabling dynamic creation and management of agents via Mastra Studio.\n */\nexport const STORED_AGENTS_ROUTES: readonly ServerRoute[] = [\n // ============================================================================\n // Stored Agents CRUD Routes\n // IMPORTANT: Routes with literal paths (e.g., /preview-instructions) must come\n // BEFORE routes with path parameters (e.g., /:storedAgentId) to ensure correct matching.\n // ============================================================================\n LIST_STORED_AGENTS_ROUTE,\n PREVIEW_INSTRUCTIONS_ROUTE, // Must be before GET_STORED_AGENT_ROUTE\n GET_STORED_AGENT_DEPENDENTS_ROUTE, // Must be before GET_STORED_AGENT_ROUTE (longer literal)\n EXPORT_STORED_AGENT_ROUTE, // Must be before GET_STORED_AGENT_ROUTE\n OPEN_STORED_AGENT_CHANGE_REQUEST_ROUTE, // Must be before GET_STORED_AGENT_ROUTE\n GET_STORED_AGENT_ROUTE,\n CREATE_STORED_AGENT_ROUTE,\n UPDATE_STORED_AGENT_ROUTE,\n DELETE_STORED_AGENT_ROUTE,\n\n // ============================================================================\n // Agent Versions Routes\n // IMPORTANT: Routes with literal paths (e.g., /compare) must come BEFORE\n // routes with path parameters (e.g., /:versionId) to ensure correct matching.\n // ============================================================================\n LIST_AGENT_VERSIONS_ROUTE,\n CREATE_AGENT_VERSION_ROUTE,\n COMPARE_AGENT_VERSIONS_ROUTE, // Must be before GET_AGENT_VERSION_ROUTE\n GET_AGENT_VERSION_ROUTE,\n ACTIVATE_AGENT_VERSION_ROUTE,\n RESTORE_AGENT_VERSION_ROUTE,\n DELETE_AGENT_VERSION_ROUTE,\n\n // ============================================================================\n // Favorites (EE)\n // ============================================================================\n FAVORITE_STORED_AGENT_ROUTE,\n UNFAVORITE_STORED_AGENT_ROUTE,\n];\n\n/**\n * Type-level tuple preserving each stored agent route's specific schema types.\n * Used by ServerRoutes to build the type-level route map.\n */\nexport type StoredAgentRoutes = readonly [\n typeof LIST_STORED_AGENTS_ROUTE,\n typeof PREVIEW_INSTRUCTIONS_ROUTE,\n typeof GET_STORED_AGENT_DEPENDENTS_ROUTE,\n typeof EXPORT_STORED_AGENT_ROUTE,\n typeof OPEN_STORED_AGENT_CHANGE_REQUEST_ROUTE,\n typeof GET_STORED_AGENT_ROUTE,\n typeof CREATE_STORED_AGENT_ROUTE,\n typeof UPDATE_STORED_AGENT_ROUTE,\n typeof DELETE_STORED_AGENT_ROUTE,\n typeof LIST_AGENT_VERSIONS_ROUTE,\n typeof CREATE_AGENT_VERSION_ROUTE,\n typeof COMPARE_AGENT_VERSIONS_ROUTE,\n typeof GET_AGENT_VERSION_ROUTE,\n typeof ACTIVATE_AGENT_VERSION_ROUTE,\n typeof RESTORE_AGENT_VERSION_ROUTE,\n typeof DELETE_AGENT_VERSION_ROUTE,\n typeof FAVORITE_STORED_AGENT_ROUTE,\n typeof UNFAVORITE_STORED_AGENT_ROUTE,\n];\n","import {\n LIST_MCP_CLIENT_VERSIONS_ROUTE,\n CREATE_MCP_CLIENT_VERSION_ROUTE,\n GET_MCP_CLIENT_VERSION_ROUTE,\n ACTIVATE_MCP_CLIENT_VERSION_ROUTE,\n RESTORE_MCP_CLIENT_VERSION_ROUTE,\n DELETE_MCP_CLIENT_VERSION_ROUTE,\n COMPARE_MCP_CLIENT_VERSIONS_ROUTE,\n} from '../../handlers/mcp-client-versions';\nimport {\n LIST_STORED_MCP_CLIENTS_ROUTE,\n GET_STORED_MCP_CLIENT_ROUTE,\n CREATE_STORED_MCP_CLIENT_ROUTE,\n UPDATE_STORED_MCP_CLIENT_ROUTE,\n DELETE_STORED_MCP_CLIENT_ROUTE,\n} from '../../handlers/stored-mcp-clients';\n\nexport const STORED_MCP_CLIENTS_ROUTES = [\n // Stored MCP Clients CRUD Routes\n LIST_STORED_MCP_CLIENTS_ROUTE,\n GET_STORED_MCP_CLIENT_ROUTE,\n CREATE_STORED_MCP_CLIENT_ROUTE,\n UPDATE_STORED_MCP_CLIENT_ROUTE,\n DELETE_STORED_MCP_CLIENT_ROUTE,\n\n // MCP Client Versions Routes\n // IMPORTANT: Routes with literal paths (e.g., /compare) must come BEFORE\n // routes with path parameters (e.g., /:versionId) to ensure correct matching.\n LIST_MCP_CLIENT_VERSIONS_ROUTE,\n CREATE_MCP_CLIENT_VERSION_ROUTE,\n COMPARE_MCP_CLIENT_VERSIONS_ROUTE,\n GET_MCP_CLIENT_VERSION_ROUTE,\n ACTIVATE_MCP_CLIENT_VERSION_ROUTE,\n RESTORE_MCP_CLIENT_VERSION_ROUTE,\n DELETE_MCP_CLIENT_VERSION_ROUTE,\n] as const;\n","import {\n LIST_PROMPT_BLOCK_VERSIONS_ROUTE,\n CREATE_PROMPT_BLOCK_VERSION_ROUTE,\n GET_PROMPT_BLOCK_VERSION_ROUTE,\n ACTIVATE_PROMPT_BLOCK_VERSION_ROUTE,\n RESTORE_PROMPT_BLOCK_VERSION_ROUTE,\n DELETE_PROMPT_BLOCK_VERSION_ROUTE,\n COMPARE_PROMPT_BLOCK_VERSIONS_ROUTE,\n} from '../../handlers/prompt-block-versions';\nimport {\n LIST_STORED_PROMPT_BLOCKS_ROUTE,\n GET_STORED_PROMPT_BLOCK_ROUTE,\n CREATE_STORED_PROMPT_BLOCK_ROUTE,\n UPDATE_STORED_PROMPT_BLOCK_ROUTE,\n DELETE_STORED_PROMPT_BLOCK_ROUTE,\n} from '../../handlers/stored-prompt-blocks';\n\nexport const STORED_PROMPT_BLOCKS_ROUTES = [\n // Stored Prompt Blocks CRUD Routes\n LIST_STORED_PROMPT_BLOCKS_ROUTE,\n GET_STORED_PROMPT_BLOCK_ROUTE,\n CREATE_STORED_PROMPT_BLOCK_ROUTE,\n UPDATE_STORED_PROMPT_BLOCK_ROUTE,\n DELETE_STORED_PROMPT_BLOCK_ROUTE,\n\n // Prompt Block Versions Routes\n // IMPORTANT: Routes with literal paths (e.g., /compare) must come BEFORE\n // routes with path parameters (e.g., /:versionId) to ensure correct matching.\n LIST_PROMPT_BLOCK_VERSIONS_ROUTE,\n CREATE_PROMPT_BLOCK_VERSION_ROUTE,\n COMPARE_PROMPT_BLOCK_VERSIONS_ROUTE,\n GET_PROMPT_BLOCK_VERSION_ROUTE,\n ACTIVATE_PROMPT_BLOCK_VERSION_ROUTE,\n RESTORE_PROMPT_BLOCK_VERSION_ROUTE,\n DELETE_PROMPT_BLOCK_VERSION_ROUTE,\n] as const;\n","import {\n LIST_SCORER_VERSIONS_ROUTE,\n CREATE_SCORER_VERSION_ROUTE,\n GET_SCORER_VERSION_ROUTE,\n ACTIVATE_SCORER_VERSION_ROUTE,\n RESTORE_SCORER_VERSION_ROUTE,\n DELETE_SCORER_VERSION_ROUTE,\n COMPARE_SCORER_VERSIONS_ROUTE,\n} from '../../handlers/scorer-versions';\nimport {\n LIST_STORED_SCORERS_ROUTE,\n GET_STORED_SCORER_ROUTE,\n CREATE_STORED_SCORER_ROUTE,\n UPDATE_STORED_SCORER_ROUTE,\n DELETE_STORED_SCORER_ROUTE,\n} from '../../handlers/stored-scorers';\n\nexport const STORED_SCORERS_ROUTES = [\n // Stored Scorers CRUD Routes\n LIST_STORED_SCORERS_ROUTE,\n GET_STORED_SCORER_ROUTE,\n CREATE_STORED_SCORER_ROUTE,\n UPDATE_STORED_SCORER_ROUTE,\n DELETE_STORED_SCORER_ROUTE,\n\n // Scorer Versions Routes\n // IMPORTANT: Routes with literal paths (e.g., /compare) must come BEFORE\n // routes with path parameters (e.g., /:versionId) to ensure correct matching.\n LIST_SCORER_VERSIONS_ROUTE,\n CREATE_SCORER_VERSION_ROUTE,\n COMPARE_SCORER_VERSIONS_ROUTE,\n GET_SCORER_VERSION_ROUTE,\n ACTIVATE_SCORER_VERSION_ROUTE,\n RESTORE_SCORER_VERSION_ROUTE,\n DELETE_SCORER_VERSION_ROUTE,\n] as const;\n","import { FAVORITE_STORED_SKILL_ROUTE, UNFAVORITE_STORED_SKILL_ROUTE } from '../../handlers/stored-skill-favorites';\nimport {\n LIST_STORED_SKILLS_ROUTE,\n GET_STORED_SKILL_ROUTE,\n CREATE_STORED_SKILL_ROUTE,\n UPDATE_STORED_SKILL_ROUTE,\n DELETE_STORED_SKILL_ROUTE,\n PUBLISH_STORED_SKILL_ROUTE,\n} from '../../handlers/stored-skills';\n\nexport const STORED_SKILLS_ROUTES = [\n // Stored Skills CRUD Routes\n LIST_STORED_SKILLS_ROUTE,\n GET_STORED_SKILL_ROUTE,\n CREATE_STORED_SKILL_ROUTE,\n UPDATE_STORED_SKILL_ROUTE,\n DELETE_STORED_SKILL_ROUTE,\n // Publish\n PUBLISH_STORED_SKILL_ROUTE,\n // Favorites (EE)\n FAVORITE_STORED_SKILL_ROUTE,\n UNFAVORITE_STORED_SKILL_ROUTE,\n] as const;\n","import {\n LIST_STORED_WORKSPACES_ROUTE,\n GET_STORED_WORKSPACE_ROUTE,\n CREATE_STORED_WORKSPACE_ROUTE,\n UPDATE_STORED_WORKSPACE_ROUTE,\n DELETE_STORED_WORKSPACE_ROUTE,\n} from '../../handlers/stored-workspaces';\n\nexport const STORED_WORKSPACES_ROUTES = [\n // Stored Workspaces CRUD Routes\n LIST_STORED_WORKSPACES_ROUTE,\n GET_STORED_WORKSPACE_ROUTE,\n CREATE_STORED_WORKSPACE_ROUTE,\n UPDATE_STORED_WORKSPACE_ROUTE,\n DELETE_STORED_WORKSPACE_ROUTE,\n] as const;\n","import { GET_API_SCHEMA_ROUTE, GET_SYSTEM_PACKAGES_ROUTE } from '../../handlers/system';\n\n/**\n * System Routes\n *\n * Routes for system information and diagnostics.\n */\nexport const SYSTEM_ROUTES = [GET_SYSTEM_PACKAGES_ROUTE, GET_API_SCHEMA_ROUTE] as const;\n","import {\n AUTHORIZE_TOOL_PROVIDER_ROUTE,\n DISCONNECT_TOOL_PROVIDER_CONNECTION_ROUTE,\n GET_TOOL_PROVIDER_AUTH_STATUS_ROUTE,\n GET_TOOL_PROVIDER_CONNECTION_USAGE_ROUTE,\n GET_TOOL_PROVIDER_HEALTH_ROUTE,\n GET_TOOL_PROVIDER_TOOL_SCHEMA_ROUTE,\n LIST_TOOL_PROVIDERS_ROUTE,\n LIST_TOOL_PROVIDER_CONNECTIONS_ROUTE,\n LIST_TOOL_PROVIDER_CONNECTION_FIELDS_ROUTE,\n LIST_TOOL_PROVIDER_TOOLKITS_ROUTE,\n LIST_TOOL_PROVIDER_TOOLS_ROUTE,\n TOOL_PROVIDER_CONNECTION_STATUS_ROUTE,\n UPDATE_TOOL_PROVIDER_CONNECTION_ROUTE,\n} from '../../handlers/tool-providers';\n\nexport const TOOL_PROVIDER_ROUTES = [\n LIST_TOOL_PROVIDERS_ROUTE,\n LIST_TOOL_PROVIDER_TOOLKITS_ROUTE,\n LIST_TOOL_PROVIDER_TOOLS_ROUTE,\n GET_TOOL_PROVIDER_TOOL_SCHEMA_ROUTE,\n AUTHORIZE_TOOL_PROVIDER_ROUTE,\n GET_TOOL_PROVIDER_AUTH_STATUS_ROUTE,\n TOOL_PROVIDER_CONNECTION_STATUS_ROUTE,\n LIST_TOOL_PROVIDER_CONNECTIONS_ROUTE,\n LIST_TOOL_PROVIDER_CONNECTION_FIELDS_ROUTE,\n DISCONNECT_TOOL_PROVIDER_CONNECTION_ROUTE,\n UPDATE_TOOL_PROVIDER_CONNECTION_ROUTE,\n GET_TOOL_PROVIDER_CONNECTION_USAGE_ROUTE,\n GET_TOOL_PROVIDER_HEALTH_ROUTE,\n] as const;\n","import { LIST_TOOLS_ROUTE, GET_TOOL_BY_ID_ROUTE, EXECUTE_TOOL_ROUTE } from '../../handlers/tools';\n\nexport const TOOLS_ROUTES = [LIST_TOOLS_ROUTE, GET_TOOL_BY_ID_ROUTE, EXECUTE_TOOL_ROUTE] as const;\n","import {\n UPSERT_VECTORS_ROUTE,\n CREATE_INDEX_ROUTE,\n QUERY_VECTORS_ROUTE,\n LIST_INDEXES_ROUTE,\n DESCRIBE_INDEX_ROUTE,\n DELETE_INDEX_ROUTE,\n LIST_VECTORS_ROUTE,\n LIST_EMBEDDERS_ROUTE,\n} from '../../handlers/vector';\n\nexport const VECTORS_ROUTES = [\n UPSERT_VECTORS_ROUTE,\n CREATE_INDEX_ROUTE,\n QUERY_VECTORS_ROUTE,\n LIST_INDEXES_ROUTE,\n DESCRIBE_INDEX_ROUTE,\n DELETE_INDEX_ROUTE,\n LIST_VECTORS_ROUTE,\n LIST_EMBEDDERS_ROUTE,\n] as const;\n","import {\n LIST_WORKFLOWS_ROUTE,\n LIST_WORKFLOW_RUN_COUNTS_ROUTE,\n GET_WORKFLOW_BY_ID_ROUTE,\n LIST_WORKFLOW_RUNS_ROUTE,\n GET_WORKFLOW_RUN_BY_ID_ROUTE,\n CREATE_WORKFLOW_RUN_ROUTE,\n STREAM_WORKFLOW_ROUTE,\n RESUME_STREAM_WORKFLOW_ROUTE,\n START_ASYNC_WORKFLOW_ROUTE,\n START_WORKFLOW_RUN_ROUTE,\n OBSERVE_STREAM_WORKFLOW_ROUTE,\n RESUME_ASYNC_WORKFLOW_ROUTE,\n RESUME_NO_WAIT_WORKFLOW_ROUTE,\n RESUME_WORKFLOW_ROUTE,\n CANCEL_WORKFLOW_RUN_ROUTE,\n TIME_TRAVEL_WORKFLOW_ROUTE,\n TIME_TRAVEL_STREAM_WORKFLOW_ROUTE,\n RESTART_WORKFLOW_ROUTE,\n RESTART_ASYNC_WORKFLOW_ROUTE,\n RESTART_ALL_ACTIVE_WORKFLOW_RUNS_ROUTE,\n RESTART_ALL_ACTIVE_WORKFLOW_RUNS_ASYNC_ROUTE,\n TIME_TRAVEL_ASYNC_WORKFLOW_ROUTE,\n DELETE_WORKFLOW_RUN_BY_ID_ROUTE,\n EXECUTE_WORKFLOW_STEP_ROUTE,\n RECEIVE_WORKFLOW_EVENT_ROUTE,\n} from '../../handlers/workflows';\n\nexport const WORKFLOWS_ROUTES = [\n LIST_WORKFLOWS_ROUTE,\n // Static path must register before the parameterized /workflows/:workflowId\n // route below, or the router would capture \"run-counts\" as a workflowId.\n LIST_WORKFLOW_RUN_COUNTS_ROUTE,\n GET_WORKFLOW_BY_ID_ROUTE,\n LIST_WORKFLOW_RUNS_ROUTE,\n GET_WORKFLOW_RUN_BY_ID_ROUTE,\n DELETE_WORKFLOW_RUN_BY_ID_ROUTE,\n CREATE_WORKFLOW_RUN_ROUTE,\n STREAM_WORKFLOW_ROUTE,\n RESUME_STREAM_WORKFLOW_ROUTE,\n START_ASYNC_WORKFLOW_ROUTE,\n START_WORKFLOW_RUN_ROUTE,\n OBSERVE_STREAM_WORKFLOW_ROUTE,\n RESUME_ASYNC_WORKFLOW_ROUTE,\n RESUME_NO_WAIT_WORKFLOW_ROUTE,\n RESUME_WORKFLOW_ROUTE,\n CANCEL_WORKFLOW_RUN_ROUTE,\n TIME_TRAVEL_WORKFLOW_ROUTE,\n TIME_TRAVEL_ASYNC_WORKFLOW_ROUTE,\n TIME_TRAVEL_STREAM_WORKFLOW_ROUTE,\n RESTART_WORKFLOW_ROUTE,\n RESTART_ASYNC_WORKFLOW_ROUTE,\n RESTART_ALL_ACTIVE_WORKFLOW_RUNS_ROUTE,\n RESTART_ALL_ACTIVE_WORKFLOW_RUNS_ASYNC_ROUTE,\n EXECUTE_WORKFLOW_STEP_ROUTE,\n RECEIVE_WORKFLOW_EVENT_ROUTE,\n] as const;\n","/**\n * Workspace Routes\n *\n * All routes for workspace operations under /api/workspaces/*\n */\n\nimport {\n LIST_WORKSPACES_ROUTE,\n GET_WORKSPACE_ROUTE,\n WORKSPACE_FS_ROUTES,\n WORKSPACE_SEARCH_ROUTES,\n WORKSPACE_SKILLS_ROUTES,\n WORKSPACE_SKILLS_SH_ROUTES,\n} from '../../handlers/workspace';\n\nexport const WORKSPACE_ROUTES = [\n // List all workspaces route (at /api/workspaces)\n LIST_WORKSPACES_ROUTE,\n\n // Get workspace route (at /api/workspaces/:workspaceId)\n GET_WORKSPACE_ROUTE,\n\n // Filesystem routes (at /api/workspaces/:workspaceId/fs/*)\n ...WORKSPACE_FS_ROUTES,\n\n // Search routes (at /api/workspaces/:workspaceId/search, /api/workspaces/:workspaceId/index)\n ...WORKSPACE_SEARCH_ROUTES,\n\n // Skills routes (search must come before parameterized routes)\n ...WORKSPACE_SKILLS_ROUTES,\n\n // skills.sh proxy routes (at /api/workspaces/:workspaceId/skills-sh/*)\n ...WORKSPACE_SKILLS_SH_ROUTES,\n] as const;\n","import type { Mastra } from '@mastra/core';\nimport type { ToolsInput } from '@mastra/core/agent';\nimport type { FGARouteConfig, MastraFGAPermissionInput } from '@mastra/core/auth/ee';\nimport type { RequestContext } from '@mastra/core/request-context';\nimport type { ApiRoute, ValidationErrorHook } from '@mastra/core/server';\nimport type * as z from 'zod/v4';\nimport type { InMemoryTaskStore } from '../../a2a/store';\nimport type { OpenAPIRoute } from '../openapi-utils';\nimport { A2A_ROUTES } from './a2a';\nimport { AGENT_BUILDER_ROUTES } from './agent-builder';\nimport { AGENT_CONTROLLER_ROUTES } from './agent-controller';\nimport { AGENTS_ROUTES } from './agents';\nimport type { AgentRoutes } from './agents';\nimport { AUTH_ROUTES } from './auth';\nimport { BACKGROUND_TASK_ROUTES } from './background-tasks';\nimport { CHANNELS_ROUTES } from './channels';\nimport { CONVERSATIONS_ROUTES } from './conversations';\nimport { DATASETS_ROUTES } from './datasets';\nimport { DYNAMIC_WORKFLOWS_ROUTES } from './dynamic-workflows';\nimport { EDITOR_BUILDER_ROUTES } from './editor-builder';\nimport { LEGACY_ROUTES } from './legacy';\nimport { LOGS_ROUTES } from './logs';\nimport { MCP_ROUTES } from './mcp';\nimport { MEMORY_ROUTES } from './memory';\nimport { OBSERVABILITY_ROUTES } from './observability';\nimport { PROCESSOR_PROVIDER_ROUTES } from './processor-providers';\nimport { PROCESSORS_ROUTES } from './processors';\nimport { RESPONSES_ROUTES } from './responses';\nimport { SCHEDULES_ROUTES } from './schedules';\nimport { SCORES_ROUTES } from './scorers';\nimport { STORED_AGENTS_ROUTES } from './stored-agents';\nimport type { StoredAgentRoutes } from './stored-agents';\nimport { STORED_MCP_CLIENTS_ROUTES } from './stored-mcp-clients';\nimport { STORED_PROMPT_BLOCKS_ROUTES } from './stored-prompt-blocks';\nimport { STORED_SCORERS_ROUTES } from './stored-scorers';\nimport { STORED_SKILLS_ROUTES } from './stored-skills';\nimport { STORED_WORKSPACES_ROUTES } from './stored-workspaces';\nimport type { MastraStreamReturn } from './stream-types';\nimport { SYSTEM_ROUTES } from './system';\nimport { TOOL_PROVIDER_ROUTES } from './tool-providers';\nimport { TOOLS_ROUTES } from './tools';\nimport { VECTORS_ROUTES } from './vectors';\nimport { WORKFLOWS_ROUTES } from './workflows';\nimport { WORKSPACE_ROUTES } from './workspace';\n\n/**\n * Server context fields that are available to route handlers.\n * These are injected by the server adapters (Express, Hono, etc.)\n * Fields other than `mastra` are optional to allow direct handler testing.\n */\nexport type ServerContext = {\n mastra: Mastra;\n requestContext: RequestContext;\n registeredTools?: ToolsInput;\n taskStore?: InMemoryTaskStore;\n abortSignal: AbortSignal;\n /** The route prefix configured for the server (e.g., '/api') */\n routePrefix?: string;\n /** The web-standard Request object for accessing headers, cookies, etc. */\n request?: Request;\n};\n\n/**\n * Utility type to infer parameters from Zod schemas.\n * Merges path params, query params, and body params into a single type.\n */\nexport type InferParams<\n TPathSchema extends z.ZodTypeAny | undefined,\n TQuerySchema extends z.ZodTypeAny | undefined,\n TBodySchema extends z.ZodTypeAny | undefined,\n> = (TPathSchema extends z.ZodTypeAny ? z.infer<TPathSchema> : {}) &\n (TQuerySchema extends z.ZodTypeAny ? z.infer<TQuerySchema> : {}) &\n (TBodySchema extends z.ZodTypeAny ? z.infer<TBodySchema> : {});\n\n/**\n * All supported response types for server routes.\n * - 'json': Standard JSON response\n * - 'stream': Streaming response (SSE or raw stream)\n * - 'datastream-response': Pre-built Response object for data streams\n * - 'mcp-http': MCP Streamable HTTP transport (handled by adapter)\n * - 'mcp-sse': MCP SSE transport (handled by adapter)\n */\nexport type ResponseType = 'stream' | 'json' | 'datastream-response' | 'mcp-http' | 'mcp-sse';\n\nexport type ServerRouteHandler<\n TParams = Record<string, unknown>,\n TResponse = unknown,\n TResponseType extends ResponseType = 'json',\n> = (\n params: TParams & ServerContext,\n) => Promise<\n TResponseType extends 'stream'\n ? MastraStreamReturn\n : TResponseType extends 'datastream-response'\n ? Response\n : TResponse\n>;\n\n/**\n * Phantom type for preserving Zod schema types on routes.\n * Not present at runtime — used only for type-level inference via RouteMap.\n */\nexport interface RouteSchemas<\n TPathSchema = unknown,\n TQuerySchema = unknown,\n TBodySchema = unknown,\n TResponseSchema = unknown,\n> {\n readonly pathParams: TPathSchema;\n readonly queryParams: TQuerySchema;\n readonly body: TBodySchema;\n readonly response: TResponseSchema;\n}\n\nexport type ServerRoute<\n TParams = Record<string, unknown>,\n TResponse = unknown,\n TResponseType extends ResponseType = ResponseType,\n TSchemas extends RouteSchemas = RouteSchemas,\n TMethod extends string = string,\n TPath extends string = string,\n> = Omit<ApiRoute, 'handler' | 'createHandler' | 'method' | 'path' | 'openapi'> & {\n method: TMethod;\n path: TPath;\n responseType: TResponseType;\n streamFormat?: 'sse' | 'stream'; // Only used when responseType is 'stream', defaults to 'stream'\n sseFlushOnConnect?: boolean;\n // Method signature is bivariant in params, allowing heterogeneous route arrays\n // while still preserving specific param types on individual routes.\n handler(params: TParams & ServerContext): ReturnType<ServerRouteHandler<TParams, TResponse, TResponseType>>;\n pathParamSchema?: z.ZodSchema;\n queryParamSchema?: z.ZodSchema;\n bodySchema?: z.ZodSchema;\n responseSchema?: z.ZodSchema;\n openapi?: OpenAPIRoute; // Auto-generated OpenAPI spec for this route\n maxBodySize?: number; // Optional route-specific body size limit in bytes\n deprecated?: boolean; // Flag for deprecated routes (used for route parity, skipped in tests)\n /**\n * Permission required to access this route (EE feature).\n * If set, the user must have this permission to access the route.\n * Uses the format: `resource:action` or `resource:action:resourceId`\n *\n * When an array is provided, the user needs ANY ONE of the listed permissions\n * (logical OR). This is useful for routes that serve multiple resource types,\n * e.g. a streaming endpoint used by both runtime and stored agents.\n *\n * @example\n * requiresPermission: MastraFGAPermissions.AGENTS_READ\n * requiresPermission: MastraFGAPermissions.WORKFLOWS_EXECUTE\n */\n requiresPermission?: MastraFGAPermissionInput | MastraFGAPermissionInput[];\n /**\n * FGA authorization config for this route (EE feature).\n * If set, the user must have the specified permission on the resource.\n *\n * @example\n * fga: { resourceType: 'agent', resourceIdParam: 'agentId', permission: MastraFGAPermissions.AGENTS_EXECUTE }\n */\n fga?: FGARouteConfig;\n onValidationError?: ValidationErrorHook;\n /** @internal Phantom type — not present at runtime. Used for type-level schema inference. */\n readonly __schemas?: TSchemas;\n};\n\nexport const SERVER_ROUTES: readonly ServerRoute[] = [\n ...AGENTS_ROUTES,\n ...AUTH_ROUTES,\n ...WORKFLOWS_ROUTES,\n ...TOOLS_ROUTES,\n ...PROCESSORS_ROUTES,\n ...RESPONSES_ROUTES,\n ...CONVERSATIONS_ROUTES,\n ...MEMORY_ROUTES,\n ...SCORES_ROUTES,\n ...OBSERVABILITY_ROUTES,\n ...LOGS_ROUTES,\n ...VECTORS_ROUTES,\n ...A2A_ROUTES,\n ...WORKSPACE_ROUTES,\n ...LEGACY_ROUTES,\n ...MCP_ROUTES,\n ...STORED_AGENTS_ROUTES,\n ...DYNAMIC_WORKFLOWS_ROUTES,\n ...STORED_MCP_CLIENTS_ROUTES,\n ...STORED_PROMPT_BLOCKS_ROUTES,\n ...STORED_SCORERS_ROUTES,\n ...STORED_WORKSPACES_ROUTES,\n ...STORED_SKILLS_ROUTES,\n ...TOOL_PROVIDER_ROUTES,\n ...PROCESSOR_PROVIDER_ROUTES,\n ...SYSTEM_ROUTES,\n ...DATASETS_ROUTES,\n ...BACKGROUND_TASK_ROUTES,\n ...EDITOR_BUILDER_ROUTES,\n ...AGENT_BUILDER_ROUTES,\n ...SCHEDULES_ROUTES,\n ...CHANNELS_ROUTES,\n ...AGENT_CONTROLLER_ROUTES,\n];\n\n/**\n * Union type of all individual route arrays.\n * Built from the per-domain `as const` tuples to preserve each route's specific schema types.\n */\nexport type ServerRoutes = readonly [\n ...AgentRoutes,\n ...typeof AUTH_ROUTES,\n ...typeof WORKFLOWS_ROUTES,\n ...typeof TOOLS_ROUTES,\n ...typeof PROCESSORS_ROUTES,\n ...typeof RESPONSES_ROUTES,\n ...typeof CONVERSATIONS_ROUTES,\n ...typeof MEMORY_ROUTES,\n ...typeof SCORES_ROUTES,\n ...typeof OBSERVABILITY_ROUTES,\n ...typeof LOGS_ROUTES,\n ...typeof VECTORS_ROUTES,\n ...typeof A2A_ROUTES,\n ...typeof AGENT_BUILDER_ROUTES,\n ...typeof WORKSPACE_ROUTES,\n ...typeof LEGACY_ROUTES,\n ...typeof MCP_ROUTES,\n ...StoredAgentRoutes,\n ...typeof STORED_MCP_CLIENTS_ROUTES,\n ...typeof STORED_PROMPT_BLOCKS_ROUTES,\n ...typeof STORED_SCORERS_ROUTES,\n ...typeof STORED_WORKSPACES_ROUTES,\n ...typeof STORED_SKILLS_ROUTES,\n ...typeof TOOL_PROVIDER_ROUTES,\n ...typeof PROCESSOR_PROVIDER_ROUTES,\n ...typeof SYSTEM_ROUTES,\n ...typeof DATASETS_ROUTES,\n ...typeof EDITOR_BUILDER_ROUTES,\n ...typeof CHANNELS_ROUTES,\n];\n\n// Export route builder and OpenAPI utilities\nexport { createRoute, createPublicRoute, pickParams, jsonQueryParam, wrapSchemaForQueryParams } from './route-builder';\nexport { generateOpenAPIDocument } from '../openapi-utils';\n\n// Export permission utilities\nexport { derivePermission, extractResource, deriveAction, getEffectivePermission } from './permissions';\n"],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"system-BvpFMIJB.cjs","names":["z"],"sources":["../src/server/schemas/system.ts"],"sourcesContent":["import { z } from 'zod/v4';\n\nexport const mastraPackageSchema = z.object({\n name: z.string(),\n version: z.string(),\n});\n\nexport const observabilityRuntimeStrategySchema = z.enum([\n 'realtime',\n 'batch-with-updates',\n 'insert-only',\n 'event-sourced',\n]);\n\nexport const observabilityDiscoveryCapabilitiesSchema = z.object({\n entityTypes: z.boolean().describe('GET /observability/discovery/entity-types'),\n entityNames: z.boolean().describe('GET /observability/discovery/entity-names'),\n serviceNames: z.boolean().describe('GET /observability/discovery/service-names'),\n environments: z.boolean().describe('GET /observability/discovery/environments'),\n tags: z.boolean().describe('GET /observability/discovery/tags'),\n metrics: z.boolean().describe('GET /observability/discovery/metric-names, metric-label-keys and metric-label-values'),\n});\n\n/**\n * Optional observability APIs the configured observability store can serve.\n * Omitted when no observability store is configured.\n */\nexport const observabilityStorageCapabilitiesSchema = z.object({\n metrics: z.boolean().describe('Metrics endpoints (/observability/metrics and /observability/metrics/*)'),\n logs: z.boolean().describe('Logs endpoint (GET /observability/logs)'),\n discovery: observabilityDiscoveryCapabilitiesSchema.describe(\n 'Filter discovery endpoints. Unsupported discovery routes return empty results.',\n ),\n deltaPolling: z.boolean().describe(\"Cursor-based `mode: 'delta'` polling on observability list endpoints\"),\n traceQuery: z\n .boolean()\n .describe(\n 'Advanced trace queries (POST /observability/traces/query). When false, list traces with GET /observability/traces/light instead.',\n ),\n traceQueryRootDuration: z.boolean().describe('`durationMs` predicates in trace and thread queries'),\n traceQueryContextIds: z\n .boolean()\n .describe('`runId`, `sessionId`, `userId` and `organizationId` predicates in trace and thread queries'),\n traceQueryTimeToFirstChunk: z\n .boolean()\n .describe(\n '`timeToFirstChunkMs` in trace and span query results, and predicates on it in trace, thread and span queries',\n ),\n traceQueryRootSpanFields: z\n .boolean()\n .describe('Root span `name` and `spanType` in trace-scope predicates, aggregate `groupBy` and `countDistinct`'),\n traceQueryRootEntityId: z\n .boolean()\n .describe('Root span `entityId` in trace-scope predicates, aggregate `groupBy` and `countDistinct`'),\n traceQueryTimeToFirstChunkSort: z.boolean().describe('Sorting trace and span queries by `timeToFirstChunkMs`'),\n traceQueryDiscovery: z\n .boolean()\n .describe('Trace query field discovery (POST /observability/traces/query/fields and /values)'),\n traceQueryTenantScope: z.boolean().describe('Trusted tenant scoping of trace and thread queries'),\n traceAggregate: z\n .boolean()\n .describe(\n 'Trace aggregation (POST /observability/traces/aggregate). Unlike `traceQuery`, clients should treat a missing value as unavailable.',\n ),\n threadQuery: z.boolean().describe('Advanced thread queries (POST /observability/threads/query)'),\n threadQueryRows: z\n .boolean()\n .default(false)\n .describe(\n 'Full-history thread rows with activity windows, filters and sorting. Treat a missing value as unavailable.',\n ),\n spanQuery: z.boolean().describe('Span queries (POST /observability/spans/query)'),\n spanQueryContextFields: z\n .boolean()\n .default(false)\n .describe(\n 'Additional identity, context and parent/root entity predicates in span queries. Treat a missing value as unavailable.',\n ),\n traceRetentionDays: z\n .number()\n .int()\n .positive()\n .optional()\n .describe(\n 'Days of traces the store keeps. Older traces are gone, so clients can stop users from picking dates before them. Omitted when the store does not report a limit.',\n ),\n feedback: z\n .boolean()\n .describe(\n 'Feedback endpoints (/observability/feedback and /observability/feedback/*). Unsupported feedback routes return 501.',\n ),\n});\n\nexport const editorSourceSchema = z.enum(['code', 'db']);\n\nexport const editorSourceCapabilitiesSchema = z.object({\n source: editorSourceSchema,\n storage: z.enum(['database', 'filesystem', 'source-provider', 'unavailable']),\n provider: z\n .object({\n id: z.string(),\n displayName: z.string(),\n })\n .optional(),\n canSave: z.boolean(),\n canOpenChangeRequest: z.boolean(),\n unavailableReason: z.string().optional(),\n});\n\nexport const systemPackagesResponseSchema = z.object({\n packages: z.array(mastraPackageSchema),\n isDev: z.boolean(),\n cmsEnabled: z.boolean(),\n /** Whether the default LiveKit connection-details route is registered — not whether credentials or a worker exist. */\n liveKitConnectionRouteEnabled: z.boolean(),\n /** True when the default LiveKit trace recording review route is registered. */\n liveKitRecordingRouteEnabled: z.boolean().optional(),\n /**\n * The editor's configured source, when set. `'code'` swaps Studio's\n * Save/Publish UI for Download JSON + Open PR. `'db'` keeps the standard\n * Save/Publish flow. Omitted when the editor has no explicit source.\n */\n editorSource: editorSourceSchema.optional(),\n editorSourceCapabilities: editorSourceCapabilitiesSchema.optional(),\n observabilityEnabled: z.boolean(),\n storageType: z.string().optional(),\n observabilityStorageType: z.string().optional(),\n observabilityStorageCapabilities: observabilityStorageCapabilitiesSchema.optional(),\n observabilityRuntimeStrategy: observabilityRuntimeStrategySchema.optional(),\n});\n\nconst jsonSchemaRecordSchema = z.record(z.string(), z.unknown());\n\nexport const apiSchemaResponseShapeSchema = z.object({\n kind: z.enum(['array', 'record', 'object-property', 'single', 'unknown']),\n listProperty: z.string().optional(),\n paginationProperty: z.string().optional(),\n});\n\nexport const apiSchemaManifestRouteSchema = z.object({\n method: z.string(),\n path: z.string(),\n responseType: z.string(),\n pathParamSchema: jsonSchemaRecordSchema.optional(),\n queryParamSchema: jsonSchemaRecordSchema.optional(),\n bodySchema: jsonSchemaRecordSchema.optional(),\n responseSchema: jsonSchemaRecordSchema.optional(),\n responseShape: apiSchemaResponseShapeSchema,\n});\n\nexport const apiSchemaManifestResponseSchema = z.object({\n version: z.literal(1),\n routes: z.array(apiSchemaManifestRouteSchema),\n});\n\nexport type MastraPackage = z.infer<typeof mastraPackageSchema>;\nexport type SystemPackagesResponse = z.infer<typeof systemPackagesResponseSchema>;\n"],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"system-CpzPxRRq.js","names":[],"sources":["../src/server/schemas/system.ts"],"sourcesContent":["import { z } from 'zod/v4';\n\nexport const mastraPackageSchema = z.object({\n name: z.string(),\n version: z.string(),\n});\n\nexport const observabilityRuntimeStrategySchema = z.enum([\n 'realtime',\n 'batch-with-updates',\n 'insert-only',\n 'event-sourced',\n]);\n\nexport const observabilityDiscoveryCapabilitiesSchema = z.object({\n entityTypes: z.boolean().describe('GET /observability/discovery/entity-types'),\n entityNames: z.boolean().describe('GET /observability/discovery/entity-names'),\n serviceNames: z.boolean().describe('GET /observability/discovery/service-names'),\n environments: z.boolean().describe('GET /observability/discovery/environments'),\n tags: z.boolean().describe('GET /observability/discovery/tags'),\n metrics: z.boolean().describe('GET /observability/discovery/metric-names, metric-label-keys and metric-label-values'),\n});\n\n/**\n * Optional observability APIs the configured observability store can serve.\n * Omitted when no observability store is configured.\n */\nexport const observabilityStorageCapabilitiesSchema = z.object({\n metrics: z.boolean().describe('Metrics endpoints (/observability/metrics and /observability/metrics/*)'),\n logs: z.boolean().describe('Logs endpoint (GET /observability/logs)'),\n discovery: observabilityDiscoveryCapabilitiesSchema.describe(\n 'Filter discovery endpoints. Unsupported discovery routes return empty results.',\n ),\n deltaPolling: z.boolean().describe(\"Cursor-based `mode: 'delta'` polling on observability list endpoints\"),\n traceQuery: z\n .boolean()\n .describe(\n 'Advanced trace queries (POST /observability/traces/query). When false, list traces with GET /observability/traces/light instead.',\n ),\n traceQueryRootDuration: z.boolean().describe('`durationMs` predicates in trace and thread queries'),\n traceQueryContextIds: z\n .boolean()\n .describe('`runId`, `sessionId`, `userId` and `organizationId` predicates in trace and thread queries'),\n traceQueryTimeToFirstChunk: z\n .boolean()\n .describe(\n '`timeToFirstChunkMs` in trace and span query results, and predicates on it in trace, thread and span queries',\n ),\n traceQueryRootSpanFields: z\n .boolean()\n .describe('Root span `name` and `spanType` in trace-scope predicates, aggregate `groupBy` and `countDistinct`'),\n traceQueryRootEntityId: z\n .boolean()\n .describe('Root span `entityId` in trace-scope predicates, aggregate `groupBy` and `countDistinct`'),\n traceQueryTimeToFirstChunkSort: z.boolean().describe('Sorting trace and span queries by `timeToFirstChunkMs`'),\n traceQueryDiscovery: z\n .boolean()\n .describe('Trace query field discovery (POST /observability/traces/query/fields and /values)'),\n traceQueryTenantScope: z.boolean().describe('Trusted tenant scoping of trace and thread queries'),\n traceAggregate: z\n .boolean()\n .describe(\n 'Trace aggregation (POST /observability/traces/aggregate). Unlike `traceQuery`, clients should treat a missing value as unavailable.',\n ),\n threadQuery: z.boolean().describe('Advanced thread queries (POST /observability/threads/query)'),\n threadQueryRows: z\n .boolean()\n .default(false)\n .describe(\n 'Full-history thread rows with activity windows, filters and sorting. Treat a missing value as unavailable.',\n ),\n spanQuery: z.boolean().describe('Span queries (POST /observability/spans/query)'),\n spanQueryContextFields: z\n .boolean()\n .default(false)\n .describe(\n 'Additional identity, context and parent/root entity predicates in span queries. Treat a missing value as unavailable.',\n ),\n traceRetentionDays: z\n .number()\n .int()\n .positive()\n .optional()\n .describe(\n 'Days of traces the store keeps. Older traces are gone, so clients can stop users from picking dates before them. Omitted when the store does not report a limit.',\n ),\n feedback: z\n .boolean()\n .describe(\n 'Feedback endpoints (/observability/feedback and /observability/feedback/*). Unsupported feedback routes return 501.',\n ),\n});\n\nexport const editorSourceSchema = z.enum(['code', 'db']);\n\nexport const editorSourceCapabilitiesSchema = z.object({\n source: editorSourceSchema,\n storage: z.enum(['database', 'filesystem', 'source-provider', 'unavailable']),\n provider: z\n .object({\n id: z.string(),\n displayName: z.string(),\n })\n .optional(),\n canSave: z.boolean(),\n canOpenChangeRequest: z.boolean(),\n unavailableReason: z.string().optional(),\n});\n\nexport const systemPackagesResponseSchema = z.object({\n packages: z.array(mastraPackageSchema),\n isDev: z.boolean(),\n cmsEnabled: z.boolean(),\n /** Whether the default LiveKit connection-details route is registered — not whether credentials or a worker exist. */\n liveKitConnectionRouteEnabled: z.boolean(),\n /** True when the default LiveKit trace recording review route is registered. */\n liveKitRecordingRouteEnabled: z.boolean().optional(),\n /**\n * The editor's configured source, when set. `'code'` swaps Studio's\n * Save/Publish UI for Download JSON + Open PR. `'db'` keeps the standard\n * Save/Publish flow. Omitted when the editor has no explicit source.\n */\n editorSource: editorSourceSchema.optional(),\n editorSourceCapabilities: editorSourceCapabilitiesSchema.optional(),\n observabilityEnabled: z.boolean(),\n storageType: z.string().optional(),\n observabilityStorageType: z.string().optional(),\n observabilityStorageCapabilities: observabilityStorageCapabilitiesSchema.optional(),\n observabilityRuntimeStrategy: observabilityRuntimeStrategySchema.optional(),\n});\n\nconst jsonSchemaRecordSchema = z.record(z.string(), z.unknown());\n\nexport const apiSchemaResponseShapeSchema = z.object({\n kind: z.enum(['array', 'record', 'object-property', 'single', 'unknown']),\n listProperty: z.string().optional(),\n paginationProperty: z.string().optional(),\n});\n\nexport const apiSchemaManifestRouteSchema = z.object({\n method: z.string(),\n path: z.string(),\n responseType: z.string(),\n pathParamSchema: jsonSchemaRecordSchema.optional(),\n queryParamSchema: jsonSchemaRecordSchema.optional(),\n bodySchema: jsonSchemaRecordSchema.optional(),\n responseSchema: jsonSchemaRecordSchema.optional(),\n responseShape: apiSchemaResponseShapeSchema,\n});\n\nexport const apiSchemaManifestResponseSchema = z.object({\n version: z.literal(1),\n routes: z.array(apiSchemaManifestRouteSchema),\n});\n\nexport type MastraPackage = z.infer<typeof mastraPackageSchema>;\nexport type SystemPackagesResponse = z.infer<typeof systemPackagesResponseSchema>;\n"],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"tools-CmFSfDMn.js","names":[],"sources":["../src/server/handlers/tools.ts"],"sourcesContent":["import { isVercelTool, isProviderDefinedTool } from '@mastra/core/tools';\nimport { toStandardSchema, standardSchemaToJSONSchema } from '@mastra/schema-compat/schema';\nimport type { PublicSchema } from '@mastra/schema-compat/schema';\nimport { stringify } from 'superjson';\nimport { MastraFGAPermissions } from '../fga-permissions';\nimport { HTTPException } from '../http-exception';\nimport {\n executeToolContextBodySchema,\n executeToolResponseSchema,\n listToolsResponseSchema,\n serializedToolSchema,\n toolIdPathParams,\n agentToolPathParams,\n executeToolBodySchema,\n} from '../schemas/agents';\nimport { optionalRunIdSchema } from '../schemas/common';\nimport { createRoute } from '../server-adapter/routes/route-builder';\n\nimport { getAgentFromSystem } from './agents';\nimport { handleError } from './error';\nimport { stripInjectedToolOverrideFields } from './tool-schema-overrides';\nimport { validateBody } from './utils';\n\n/**\n * Resolves a schema that may be a lazy function (e.g. AI SDK provider tools).\n * Recursively resolves until a non-function value is returned.\n * Skips functions that are themselves valid schemas (e.g. ArkType types are\n * callable but also implement StandardSchema via ~standard).\n */\nfunction resolveLazySchema(schema: unknown): unknown {\n if (typeof schema === 'function' && !('~standard' in schema)) {\n return resolveLazySchema(schema());\n }\n return schema;\n}\n\nfunction schemaToJsonSchema(schema: PublicSchema<unknown> | undefined) {\n if (!schema) {\n return undefined;\n }\n\n return standardSchemaToJSONSchema(toStandardSchema(schema), { target: 'draft-2020-12' });\n}\n\nfunction serializeSchema(schema: unknown, options?: { stripInjectedOverrides?: boolean }): string | undefined {\n const jsonSchema = schemaToJsonSchema(resolveLazySchema(schema) as PublicSchema<unknown> | undefined);\n if (jsonSchema === undefined) return undefined;\n return stringify(options?.stripInjectedOverrides ? stripInjectedToolOverrideFields(jsonSchema) : jsonSchema);\n}\n\n/**\n * Searches dynamically-resolved agent tools (provided via `toolsResolver` /\n * function-based `tools`) for a tool with the given id. Used as a fallback\n * after the static tool registry (`registeredTools` + `mastra.getToolById`)\n * misses, so global tool routes can resolve tools that only exist on agents.\n *\n * Errors thrown by an individual agent's `listTools()` are logged and\n * skipped so a single broken resolver doesn't take down the whole lookup.\n */\nasync function findToolInAgents(mastra: any, toolId: string, requestContext: any): Promise<any | undefined> {\n const agents = mastra.listAgents() || {};\n for (const agent of Object.values(agents) as any[]) {\n try {\n const agentTools = await agent.listTools({ requestContext });\n const found = Object.values(agentTools || {}).find((t: any) => t.id === toolId);\n if (found) return found;\n } catch (error) {\n mastra.getLogger?.()?.warn?.('Failed to list tools for agent while resolving tool by id', {\n agentId: agent?.id,\n toolId,\n error: error instanceof Error ? error.message : String(error),\n });\n }\n }\n return undefined;\n}\n\n/**\n * Serializes a tool for API responses, handling both regular tools (with Zod schemas)\n * and provider-defined tools (with AI SDK lazy schemas).\n */\nfunction serializeTool(tool: any): any {\n // Provider-defined tools (e.g. google.tools.googleSearch(), openai.tools.webSearch())\n // have lazy inputSchema functions that return AI SDK Schema objects, not Zod schemas.\n // We resolve them and use the jsonSchema property directly.\n if (isProviderDefinedTool(tool)) {\n const resolvedInput = resolveLazySchema(tool.inputSchema);\n const resolvedOutput = resolveLazySchema(tool.outputSchema);\n return {\n ...tool,\n inputSchema:\n resolvedInput && typeof resolvedInput === 'object' && 'jsonSchema' in resolvedInput\n ? stringify(resolvedInput.jsonSchema)\n : undefined,\n outputSchema:\n resolvedOutput && typeof resolvedOutput === 'object' && 'jsonSchema' in resolvedOutput\n ? stringify(resolvedOutput.jsonSchema)\n : undefined,\n };\n }\n\n return {\n ...tool,\n inputSchema: serializeSchema(tool.inputSchema, { stripInjectedOverrides: true }),\n outputSchema: serializeSchema(tool.outputSchema),\n requestContextSchema: serializeSchema(tool.requestContextSchema),\n };\n}\n\n// ============================================================================\n// Route Definitions (new pattern - handlers defined inline with createRoute)\n// ============================================================================\n\nexport const LIST_TOOLS_ROUTE = createRoute({\n method: 'GET',\n path: '/tools',\n responseType: 'json',\n responseSchema: listToolsResponseSchema,\n summary: 'List all tools',\n description: 'Returns a list of all available tools in the system',\n tags: ['Tools'],\n requiresAuth: true,\n handler: async ({ mastra, registeredTools, requestContext }) => {\n try {\n // Merge tools from two sources: mastra.listTools() includes dynamically created tools\n // (e.g. MCP tools, or agent tools registered by their intrinsic id), while registeredTools\n // includes tools discovered by the CLI bundler (keyed by export name).\n //\n // The same tool instance can appear in both maps under different keys (e.g. an agent\n // registers it by `tool.id` while the bundler registers it by export name). Dedupe by\n // `tool.id`, preferring the registeredTools (bundler) key, so each tool appears once.\n const registered = registeredTools && Object.keys(registeredTools).length > 0 ? registeredTools : {};\n\n const allTools: Record<string, any> = {};\n const seenToolIds = new Map<string, string>();\n\n // registeredTools first so their key wins for a given tool.id.\n for (const [key, tool] of Object.entries(registered)) {\n const toolId = typeof (tool as any)?.id === 'string' ? (tool as any).id : undefined;\n if (toolId !== undefined) seenToolIds.set(toolId, key);\n allTools[key] = tool;\n }\n\n for (const [key, tool] of Object.entries(mastra.listTools() ?? {})) {\n const toolId = typeof (tool as any)?.id === 'string' ? (tool as any).id : undefined;\n // Skip if this exact tool.id was already registered (under any key) by registeredTools.\n if (toolId !== undefined && seenToolIds.has(toolId)) continue;\n if (toolId !== undefined) seenToolIds.set(toolId, key);\n allTools[key] = tool;\n }\n\n const serializedTools = Object.entries(allTools).reduce(\n (acc, [id, _tool]) => {\n acc[id] = serializeTool(_tool);\n return acc;\n },\n {} as Record<string, any>,\n );\n\n // Filter tools by FGA if configured\n const fgaProvider = mastra.getServer?.()?.fga;\n const user = requestContext?.get('user');\n if (fgaProvider && user) {\n const toolList = Object.entries(serializedTools).map(([id, t]) => ({ id, ...t }));\n const accessible = await fgaProvider.filterAccessible(user, toolList, 'tool', MastraFGAPermissions.TOOLS_READ);\n const accessibleSet = new Set(accessible.map((t: any) => t.id));\n for (const id of Object.keys(serializedTools)) {\n if (!accessibleSet.has(id)) {\n delete serializedTools[id];\n }\n }\n }\n\n return serializedTools;\n } catch (error) {\n return handleError(error, 'Error getting tools');\n }\n },\n});\n\nexport const GET_TOOL_BY_ID_ROUTE = createRoute({\n method: 'GET',\n path: '/tools/:toolId',\n responseType: 'json',\n pathParamSchema: toolIdPathParams,\n responseSchema: serializedToolSchema,\n summary: 'Get tool by ID',\n description: 'Returns details for a specific tool including its schema and configuration',\n tags: ['Tools'],\n requiresAuth: true,\n handler: async ({ mastra, registeredTools, toolId, requestContext }) => {\n try {\n let tool: any;\n\n // Try explicit registeredTools first, then fallback to mastra\n if (registeredTools && Object.keys(registeredTools).length > 0) {\n tool = Object.values(registeredTools).find((t: any) => t.id === toolId);\n }\n if (!tool) {\n try {\n tool = mastra.getToolById(toolId);\n } catch {\n // tool not found in global registry, continue to agent fallback\n }\n }\n\n // Fallback: search dynamically-resolved agent tools (toolsResolver)\n if (!tool) {\n tool = await findToolInAgents(mastra, toolId, requestContext);\n }\n\n if (!tool) {\n throw new HTTPException(404, { message: 'Tool not found' });\n }\n\n return serializeTool(tool);\n } catch (error) {\n return handleError(error, 'Error getting tool');\n }\n },\n});\n\nexport const EXECUTE_TOOL_ROUTE = createRoute({\n method: 'POST',\n path: '/tools/:toolId/execute',\n responseType: 'json',\n pathParamSchema: toolIdPathParams,\n queryParamSchema: optionalRunIdSchema,\n bodySchema: executeToolContextBodySchema,\n responseSchema: executeToolResponseSchema,\n summary: 'Execute tool',\n description: 'Executes a specific tool with the provided input data',\n tags: ['Tools'],\n requiresAuth: true,\n handler: async ({ mastra, runId, toolId, registeredTools, requestContext, ...bodyParams }) => {\n try {\n if (!toolId) {\n throw new HTTPException(400, { message: 'Tool ID is required' });\n }\n\n let tool: any;\n\n // Try explicit registeredTools first, then fallback to mastra\n if (registeredTools && Object.keys(registeredTools).length > 0) {\n tool = Object.values(registeredTools).find((t: any) => t.id === toolId);\n }\n if (!tool) {\n try {\n tool = mastra.getToolById(toolId);\n } catch {\n // tool not found in global registry, continue to agent fallback\n }\n }\n\n // Fallback: search dynamically-resolved agent tools (toolsResolver)\n if (!tool) {\n tool = await findToolInAgents(mastra, toolId, requestContext);\n }\n\n if (!tool) {\n throw new HTTPException(404, { message: 'Tool not found' });\n }\n\n if (!tool?.execute) {\n throw new HTTPException(400, { message: 'Tool is not executable' });\n }\n\n const { data } = bodyParams;\n\n validateBody({ data });\n\n let result;\n if (isVercelTool(tool)) {\n result = await (tool as any).execute(data);\n } else {\n result = await tool.execute(data!, {\n mastra,\n requestContext,\n // TODO: Pass proper tracing context when server API supports tracing\n tracingContext: { currentSpan: undefined },\n ...(runId\n ? {\n workflow: {\n runId,\n suspend: async () => {},\n },\n }\n : {}),\n });\n }\n\n return result;\n } catch (error) {\n return handleError(error, 'Error executing tool');\n }\n },\n});\n\n// ============================================================================\n// Agent Tool Routes\n// ============================================================================\n\nexport const GET_AGENT_TOOL_ROUTE = createRoute({\n method: 'GET',\n path: '/agents/:agentId/tools/:toolId',\n responseType: 'json',\n pathParamSchema: agentToolPathParams,\n responseSchema: serializedToolSchema,\n summary: 'Get agent tool',\n description: 'Returns details for a specific tool assigned to the agent',\n tags: ['Agents', 'Tools'],\n requiresAuth: true,\n handler: async ({ mastra, agentId, toolId, requestContext }) => {\n try {\n if (!agentId) {\n throw new HTTPException(400, { message: 'Agent ID is required' });\n }\n const agent = await getAgentFromSystem({ mastra, agentId });\n\n const agentTools = await agent.listTools({ requestContext });\n\n const tool = Object.values(agentTools || {}).find((tool: any) => tool.id === toolId) as any;\n\n if (!tool) {\n throw new HTTPException(404, { message: 'Tool not found' });\n }\n\n return serializeTool(tool);\n } catch (error) {\n return handleError(error, 'Error getting agent tool');\n }\n },\n});\n\nexport const EXECUTE_AGENT_TOOL_ROUTE = createRoute({\n method: 'POST',\n path: '/agents/:agentId/tools/:toolId/execute',\n responseType: 'json',\n pathParamSchema: agentToolPathParams,\n bodySchema: executeToolBodySchema,\n responseSchema: executeToolResponseSchema,\n summary: 'Execute agent tool',\n description: 'Executes a specific tool assigned to the agent with the provided input data',\n tags: ['Agents', 'Tools'],\n requiresAuth: true,\n handler: async ({ mastra, agentId, toolId, data, requestContext }) => {\n try {\n if (!agentId) {\n throw new HTTPException(400, { message: 'Agent ID is required' });\n }\n const agent = await getAgentFromSystem({ mastra, agentId });\n\n const agentTools = await agent.listTools({ requestContext });\n\n const tool = Object.values(agentTools || {}).find((tool: any) => tool.id === toolId) as any;\n\n if (!tool) {\n throw new HTTPException(404, { message: 'Tool not found' });\n }\n\n if (!tool?.execute) {\n throw new HTTPException(400, { message: 'Tool is not executable' });\n }\n\n const result = await tool.execute(data, {\n mastra,\n requestContext,\n // TODO: Pass proper tracing context when server API supports tracing\n tracingContext: { currentSpan: undefined },\n });\n\n return result;\n } catch (error) {\n return handleError(error, 'Error executing agent tool');\n }\n },\n});\n"],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"tools-SPJtxG9N.cjs","names":["standardSchemaToJSONSchema","toStandardSchema","stringify","stripInjectedToolOverrideFields","isProviderDefinedTool","createRoute","listToolsResponseSchema","MastraFGAPermissions","handleError","toolIdPathParams","serializedToolSchema","HTTPException","optionalRunIdSchema","executeToolContextBodySchema","executeToolResponseSchema","isVercelTool","agentToolPathParams","getAgentFromSystem","executeToolBodySchema"],"sources":["../src/server/handlers/tools.ts"],"sourcesContent":["import { isVercelTool, isProviderDefinedTool } from '@mastra/core/tools';\nimport { toStandardSchema, standardSchemaToJSONSchema } from '@mastra/schema-compat/schema';\nimport type { PublicSchema } from '@mastra/schema-compat/schema';\nimport { stringify } from 'superjson';\nimport { MastraFGAPermissions } from '../fga-permissions';\nimport { HTTPException } from '../http-exception';\nimport {\n executeToolContextBodySchema,\n executeToolResponseSchema,\n listToolsResponseSchema,\n serializedToolSchema,\n toolIdPathParams,\n agentToolPathParams,\n executeToolBodySchema,\n} from '../schemas/agents';\nimport { optionalRunIdSchema } from '../schemas/common';\nimport { createRoute } from '../server-adapter/routes/route-builder';\n\nimport { getAgentFromSystem } from './agents';\nimport { handleError } from './error';\nimport { stripInjectedToolOverrideFields } from './tool-schema-overrides';\nimport { validateBody } from './utils';\n\n/**\n * Resolves a schema that may be a lazy function (e.g. AI SDK provider tools).\n * Recursively resolves until a non-function value is returned.\n * Skips functions that are themselves valid schemas (e.g. ArkType types are\n * callable but also implement StandardSchema via ~standard).\n */\nfunction resolveLazySchema(schema: unknown): unknown {\n if (typeof schema === 'function' && !('~standard' in schema)) {\n return resolveLazySchema(schema());\n }\n return schema;\n}\n\nfunction schemaToJsonSchema(schema: PublicSchema<unknown> | undefined) {\n if (!schema) {\n return undefined;\n }\n\n return standardSchemaToJSONSchema(toStandardSchema(schema), { target: 'draft-2020-12' });\n}\n\nfunction serializeSchema(schema: unknown, options?: { stripInjectedOverrides?: boolean }): string | undefined {\n const jsonSchema = schemaToJsonSchema(resolveLazySchema(schema) as PublicSchema<unknown> | undefined);\n if (jsonSchema === undefined) return undefined;\n return stringify(options?.stripInjectedOverrides ? stripInjectedToolOverrideFields(jsonSchema) : jsonSchema);\n}\n\n/**\n * Searches dynamically-resolved agent tools (provided via `toolsResolver` /\n * function-based `tools`) for a tool with the given id. Used as a fallback\n * after the static tool registry (`registeredTools` + `mastra.getToolById`)\n * misses, so global tool routes can resolve tools that only exist on agents.\n *\n * Errors thrown by an individual agent's `listTools()` are logged and\n * skipped so a single broken resolver doesn't take down the whole lookup.\n */\nasync function findToolInAgents(mastra: any, toolId: string, requestContext: any): Promise<any | undefined> {\n const agents = mastra.listAgents() || {};\n for (const agent of Object.values(agents) as any[]) {\n try {\n const agentTools = await agent.listTools({ requestContext });\n const found = Object.values(agentTools || {}).find((t: any) => t.id === toolId);\n if (found) return found;\n } catch (error) {\n mastra.getLogger?.()?.warn?.('Failed to list tools for agent while resolving tool by id', {\n agentId: agent?.id,\n toolId,\n error: error instanceof Error ? error.message : String(error),\n });\n }\n }\n return undefined;\n}\n\n/**\n * Serializes a tool for API responses, handling both regular tools (with Zod schemas)\n * and provider-defined tools (with AI SDK lazy schemas).\n */\nfunction serializeTool(tool: any): any {\n // Provider-defined tools (e.g. google.tools.googleSearch(), openai.tools.webSearch())\n // have lazy inputSchema functions that return AI SDK Schema objects, not Zod schemas.\n // We resolve them and use the jsonSchema property directly.\n if (isProviderDefinedTool(tool)) {\n const resolvedInput = resolveLazySchema(tool.inputSchema);\n const resolvedOutput = resolveLazySchema(tool.outputSchema);\n return {\n ...tool,\n inputSchema:\n resolvedInput && typeof resolvedInput === 'object' && 'jsonSchema' in resolvedInput\n ? stringify(resolvedInput.jsonSchema)\n : undefined,\n outputSchema:\n resolvedOutput && typeof resolvedOutput === 'object' && 'jsonSchema' in resolvedOutput\n ? stringify(resolvedOutput.jsonSchema)\n : undefined,\n };\n }\n\n return {\n ...tool,\n inputSchema: serializeSchema(tool.inputSchema, { stripInjectedOverrides: true }),\n outputSchema: serializeSchema(tool.outputSchema),\n requestContextSchema: serializeSchema(tool.requestContextSchema),\n };\n}\n\n// ============================================================================\n// Route Definitions (new pattern - handlers defined inline with createRoute)\n// ============================================================================\n\nexport const LIST_TOOLS_ROUTE = createRoute({\n method: 'GET',\n path: '/tools',\n responseType: 'json',\n responseSchema: listToolsResponseSchema,\n summary: 'List all tools',\n description: 'Returns a list of all available tools in the system',\n tags: ['Tools'],\n requiresAuth: true,\n handler: async ({ mastra, registeredTools, requestContext }) => {\n try {\n // Merge tools from two sources: mastra.listTools() includes dynamically created tools\n // (e.g. MCP tools, or agent tools registered by their intrinsic id), while registeredTools\n // includes tools discovered by the CLI bundler (keyed by export name).\n //\n // The same tool instance can appear in both maps under different keys (e.g. an agent\n // registers it by `tool.id` while the bundler registers it by export name). Dedupe by\n // `tool.id`, preferring the registeredTools (bundler) key, so each tool appears once.\n const registered = registeredTools && Object.keys(registeredTools).length > 0 ? registeredTools : {};\n\n const allTools: Record<string, any> = {};\n const seenToolIds = new Map<string, string>();\n\n // registeredTools first so their key wins for a given tool.id.\n for (const [key, tool] of Object.entries(registered)) {\n const toolId = typeof (tool as any)?.id === 'string' ? (tool as any).id : undefined;\n if (toolId !== undefined) seenToolIds.set(toolId, key);\n allTools[key] = tool;\n }\n\n for (const [key, tool] of Object.entries(mastra.listTools() ?? {})) {\n const toolId = typeof (tool as any)?.id === 'string' ? (tool as any).id : undefined;\n // Skip if this exact tool.id was already registered (under any key) by registeredTools.\n if (toolId !== undefined && seenToolIds.has(toolId)) continue;\n if (toolId !== undefined) seenToolIds.set(toolId, key);\n allTools[key] = tool;\n }\n\n const serializedTools = Object.entries(allTools).reduce(\n (acc, [id, _tool]) => {\n acc[id] = serializeTool(_tool);\n return acc;\n },\n {} as Record<string, any>,\n );\n\n // Filter tools by FGA if configured\n const fgaProvider = mastra.getServer?.()?.fga;\n const user = requestContext?.get('user');\n if (fgaProvider && user) {\n const toolList = Object.entries(serializedTools).map(([id, t]) => ({ id, ...t }));\n const accessible = await fgaProvider.filterAccessible(user, toolList, 'tool', MastraFGAPermissions.TOOLS_READ);\n const accessibleSet = new Set(accessible.map((t: any) => t.id));\n for (const id of Object.keys(serializedTools)) {\n if (!accessibleSet.has(id)) {\n delete serializedTools[id];\n }\n }\n }\n\n return serializedTools;\n } catch (error) {\n return handleError(error, 'Error getting tools');\n }\n },\n});\n\nexport const GET_TOOL_BY_ID_ROUTE = createRoute({\n method: 'GET',\n path: '/tools/:toolId',\n responseType: 'json',\n pathParamSchema: toolIdPathParams,\n responseSchema: serializedToolSchema,\n summary: 'Get tool by ID',\n description: 'Returns details for a specific tool including its schema and configuration',\n tags: ['Tools'],\n requiresAuth: true,\n handler: async ({ mastra, registeredTools, toolId, requestContext }) => {\n try {\n let tool: any;\n\n // Try explicit registeredTools first, then fallback to mastra\n if (registeredTools && Object.keys(registeredTools).length > 0) {\n tool = Object.values(registeredTools).find((t: any) => t.id === toolId);\n }\n if (!tool) {\n try {\n tool = mastra.getToolById(toolId);\n } catch {\n // tool not found in global registry, continue to agent fallback\n }\n }\n\n // Fallback: search dynamically-resolved agent tools (toolsResolver)\n if (!tool) {\n tool = await findToolInAgents(mastra, toolId, requestContext);\n }\n\n if (!tool) {\n throw new HTTPException(404, { message: 'Tool not found' });\n }\n\n return serializeTool(tool);\n } catch (error) {\n return handleError(error, 'Error getting tool');\n }\n },\n});\n\nexport const EXECUTE_TOOL_ROUTE = createRoute({\n method: 'POST',\n path: '/tools/:toolId/execute',\n responseType: 'json',\n pathParamSchema: toolIdPathParams,\n queryParamSchema: optionalRunIdSchema,\n bodySchema: executeToolContextBodySchema,\n responseSchema: executeToolResponseSchema,\n summary: 'Execute tool',\n description: 'Executes a specific tool with the provided input data',\n tags: ['Tools'],\n requiresAuth: true,\n handler: async ({ mastra, runId, toolId, registeredTools, requestContext, ...bodyParams }) => {\n try {\n if (!toolId) {\n throw new HTTPException(400, { message: 'Tool ID is required' });\n }\n\n let tool: any;\n\n // Try explicit registeredTools first, then fallback to mastra\n if (registeredTools && Object.keys(registeredTools).length > 0) {\n tool = Object.values(registeredTools).find((t: any) => t.id === toolId);\n }\n if (!tool) {\n try {\n tool = mastra.getToolById(toolId);\n } catch {\n // tool not found in global registry, continue to agent fallback\n }\n }\n\n // Fallback: search dynamically-resolved agent tools (toolsResolver)\n if (!tool) {\n tool = await findToolInAgents(mastra, toolId, requestContext);\n }\n\n if (!tool) {\n throw new HTTPException(404, { message: 'Tool not found' });\n }\n\n if (!tool?.execute) {\n throw new HTTPException(400, { message: 'Tool is not executable' });\n }\n\n const { data } = bodyParams;\n\n validateBody({ data });\n\n let result;\n if (isVercelTool(tool)) {\n result = await (tool as any).execute(data);\n } else {\n result = await tool.execute(data!, {\n mastra,\n requestContext,\n // TODO: Pass proper tracing context when server API supports tracing\n tracingContext: { currentSpan: undefined },\n ...(runId\n ? {\n workflow: {\n runId,\n suspend: async () => {},\n },\n }\n : {}),\n });\n }\n\n return result;\n } catch (error) {\n return handleError(error, 'Error executing tool');\n }\n },\n});\n\n// ============================================================================\n// Agent Tool Routes\n// ============================================================================\n\nexport const GET_AGENT_TOOL_ROUTE = createRoute({\n method: 'GET',\n path: '/agents/:agentId/tools/:toolId',\n responseType: 'json',\n pathParamSchema: agentToolPathParams,\n responseSchema: serializedToolSchema,\n summary: 'Get agent tool',\n description: 'Returns details for a specific tool assigned to the agent',\n tags: ['Agents', 'Tools'],\n requiresAuth: true,\n handler: async ({ mastra, agentId, toolId, requestContext }) => {\n try {\n if (!agentId) {\n throw new HTTPException(400, { message: 'Agent ID is required' });\n }\n const agent = await getAgentFromSystem({ mastra, agentId });\n\n const agentTools = await agent.listTools({ requestContext });\n\n const tool = Object.values(agentTools || {}).find((tool: any) => tool.id === toolId) as any;\n\n if (!tool) {\n throw new HTTPException(404, { message: 'Tool not found' });\n }\n\n return serializeTool(tool);\n } catch (error) {\n return handleError(error, 'Error getting agent tool');\n }\n },\n});\n\nexport const EXECUTE_AGENT_TOOL_ROUTE = createRoute({\n method: 'POST',\n path: '/agents/:agentId/tools/:toolId/execute',\n responseType: 'json',\n pathParamSchema: agentToolPathParams,\n bodySchema: executeToolBodySchema,\n responseSchema: executeToolResponseSchema,\n summary: 'Execute agent tool',\n description: 'Executes a specific tool assigned to the agent with the provided input data',\n tags: ['Agents', 'Tools'],\n requiresAuth: true,\n handler: async ({ mastra, agentId, toolId, data, requestContext }) => {\n try {\n if (!agentId) {\n throw new HTTPException(400, { message: 'Agent ID is required' });\n }\n const agent = await getAgentFromSystem({ mastra, agentId });\n\n const agentTools = await agent.listTools({ requestContext });\n\n const tool = Object.values(agentTools || {}).find((tool: any) => tool.id === toolId) as any;\n\n if (!tool) {\n throw new HTTPException(404, { message: 'Tool not found' });\n }\n\n if (!tool?.execute) {\n throw new HTTPException(400, { message: 'Tool is not executable' });\n }\n\n const result = await tool.execute(data, {\n mastra,\n requestContext,\n // TODO: Pass proper tracing context when server API supports tracing\n tracingContext: { currentSpan: undefined },\n });\n\n return result;\n } catch (error) {\n return handleError(error, 'Error executing agent tool');\n }\n },\n});\n"],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"workspace-B6kzp-bo.js","names":[],"sources":["../src/server/handlers/workspace.ts"],"sourcesContent":["/**\n * Workspace Handlers\n *\n * Unified handlers for workspace operations including:\n * - Filesystem operations (read, write, list, delete, mkdir, stat)\n * - Search operations (search, index)\n * - Skills operations (list, get, search, references)\n */\n\nimport { coreFeatures } from '@mastra/core/features';\nimport type { Workspace, WorkspaceSkills, WorkspaceFilesystem, CompositeFilesystem } from '@mastra/core/workspace';\n\nimport { HTTPException } from '../http-exception';\nimport {\n // Workspace info\n workspaceInfoResponseSchema,\n listWorkspacesResponseSchema,\n workspaceIdPathParams,\n // Filesystem schemas\n fsReadQuerySchema,\n fsListQuerySchema,\n fsStatQuerySchema,\n fsDeleteQuerySchema,\n fsWriteBodySchema,\n fsMkdirBodySchema,\n fsReadResponseSchema,\n fsWriteResponseSchema,\n fsListResponseSchema,\n fsDeleteResponseSchema,\n fsMkdirResponseSchema,\n fsStatResponseSchema,\n // Search schemas\n searchQuerySchema,\n searchResponseSchema,\n indexBodySchema,\n indexResponseSchema,\n // Skills schemas\n skillNamePathParams,\n skillDisambiguationQuerySchema,\n skillReferencePathParams,\n searchSkillsQuerySchema,\n listSkillsResponseSchema,\n getSkillResponseSchema,\n skillReferenceResponseSchema,\n listReferencesResponseSchema,\n searchSkillsResponseSchema,\n // skills.sh proxy schemas\n skillsShSearchQuerySchema,\n skillsShPopularQuerySchema,\n skillsShSearchResponseSchema,\n skillsShListResponseSchema,\n skillsShPreviewQuerySchema,\n skillsShInstallBodySchema,\n skillsShInstallResponseSchema,\n skillsShPreviewResponseSchema,\n skillsShRemoveBodySchema,\n skillsShRemoveResponseSchema,\n skillsShUpdateBodySchema,\n skillsShUpdateResponseSchema,\n} from '../schemas/workspace';\nimport { createRoute } from '../server-adapter/routes/route-builder';\nimport { handleError } from './error';\n\n// =============================================================================\n// Constants\n// =============================================================================\n\n/** Directory path for skills installed via skills.sh */\nconst SKILLS_SH_DIR = '.agents/skills';\n\n// =============================================================================\n// Helper Functions\n// =============================================================================\n\n/**\n * Runtime check for CompositeFilesystem using duck typing.\n * Uses a type-only import so older @mastra/core versions (< 1.3.0) work fine.\n */\nfunction isCompositeFilesystem(fs: unknown): fs is CompositeFilesystem {\n return !!fs && typeof fs === 'object' && 'mounts' in fs && fs.mounts instanceof Map;\n}\n\n/**\n * Check if an error is a workspace filesystem not-found error.\n * Handles Node.js ENOENT and workspace FileNotFoundError/DirectoryNotFoundError.\n */\nfunction isFilesystemNotFoundError(error: unknown): boolean {\n if (!error || typeof error !== 'object') return false;\n\n // Check for Node.js native ENOENT\n if ('code' in error && error.code === 'ENOENT') return true;\n\n // Check for workspace FileNotFoundError / DirectoryNotFoundError\n if ('name' in error) {\n const name = error.name;\n if (name === 'FileNotFoundError' || name === 'DirectoryNotFoundError') return true;\n }\n\n return false;\n}\n\n/**\n * Check if an error is a workspace filesystem permission error.\n * Handles Node.js EACCES and workspace PermissionError.\n */\nfunction isFilesystemPermissionError(error: unknown): boolean {\n if (!error || typeof error !== 'object') return false;\n\n if ('code' in error && error.code === 'EACCES') return true;\n\n if ('name' in error && error.name === 'PermissionError') return true;\n\n return false;\n}\n\n/**\n * Workspace-specific error handler.\n * Converts filesystem errors to appropriate HTTP status codes,\n * then falls back to generic handler.\n */\nfunction handleWorkspaceError(error: unknown, defaultMessage: string): never {\n if (isFilesystemNotFoundError(error)) {\n const message = error instanceof Error ? error.message : 'Not found';\n throw new HTTPException(404, { message });\n }\n if (isFilesystemPermissionError(error)) {\n const message = error instanceof Error ? error.message : 'Permission denied';\n throw new HTTPException(403, { message });\n }\n return handleError(error, defaultMessage);\n}\n\n/**\n * Throws if workspace v1 is not supported by the current version of @mastra/core.\n */\nfunction requireWorkspaceV1Support(): void {\n if (!coreFeatures.has('workspaces-v1')) {\n throw new HTTPException(501, {\n message: 'Workspace v1 not supported by this version of @mastra/core. Please upgrade to a newer version.',\n });\n }\n}\n\n/**\n * Get a workspace by ID from Mastra's workspace registry.\n *\n * Backwards compatible: Falls back to searching through agents if\n * mastra.getWorkspaceById() is not available (older @mastra/core versions).\n */\nasync function getWorkspaceById(mastra: any, workspaceId: string): Promise<Workspace | undefined> {\n requireWorkspaceV1Support();\n\n // Check if the global workspace matches\n const globalWorkspace = mastra.getWorkspace?.();\n if (globalWorkspace?.id === workspaceId) {\n return globalWorkspace;\n }\n\n // Try direct registry lookup if available (newer @mastra/core versions)\n if (typeof mastra.getWorkspaceById === 'function') {\n try {\n return mastra.getWorkspaceById(workspaceId);\n } catch {\n // Workspace not found in registry\n return undefined;\n }\n }\n\n // Fallback: Search through agents for the workspace (older @mastra/core versions)\n const agents = mastra.listAgents?.() ?? {};\n for (const agent of Object.values(agents)) {\n if ((agent as any).hasOwnWorkspace?.()) {\n const agentWorkspace = await (agent as any).getWorkspace?.();\n if (agentWorkspace?.id === workspaceId) {\n return agentWorkspace;\n }\n }\n }\n\n return undefined;\n}\n\n/**\n * Get skills from a specific workspace by ID.\n * Note: getWorkspaceById already checks for workspace v1 support.\n */\nasync function getSkillsById(mastra: any, workspaceId: string): Promise<WorkspaceSkills | undefined> {\n const workspace = await getWorkspaceById(mastra, workspaceId);\n return workspace?.skills;\n}\n\n/**\n * Build the install path for a skill from skills.sh.\n *\n * For CompositeFilesystem: resolves the requested mount (or first writable),\n * validates it is writable, and returns `<mount>/.agents/skills/<skillId>`.\n * For non-composite: returns `.agents/skills/<skillId>` (unchanged behavior).\n */\n/** Strip a single trailing slash (leaves `/` alone). */\nfunction stripTrailingSlash(p: string): string {\n return p.length > 1 && p.endsWith('/') ? p.slice(0, -1) : p;\n}\n\nfunction buildSkillInstallPath(filesystem: WorkspaceFilesystem, safeSkillId: string, requestedMount?: string): string {\n if (isCompositeFilesystem(filesystem)) {\n if (requestedMount) {\n // Validate the requested mount exists\n const mountFs = filesystem.mounts.get(requestedMount);\n if (!mountFs) {\n throw new HTTPException(400, {\n message: `Mount \"${requestedMount}\" not found. Available mounts: ${filesystem.mountPaths.join(', ')}`,\n });\n }\n if (mountFs.readOnly) {\n throw new HTTPException(403, { message: `Mount \"${requestedMount}\" is read-only` });\n }\n return `${stripTrailingSlash(requestedMount)}/${SKILLS_SH_DIR}/${safeSkillId}`;\n }\n\n // Default: use first writable mount\n for (const [mountPath, mountFs] of filesystem.mounts) {\n if (!mountFs.readOnly) {\n return `${stripTrailingSlash(mountPath)}/${SKILLS_SH_DIR}/${safeSkillId}`;\n }\n }\n\n throw new HTTPException(403, { message: 'No writable mount available for skill installation' });\n }\n\n // Non-composite: standard path\n return `${SKILLS_SH_DIR}/${safeSkillId}`;\n}\n\n// =============================================================================\n// List All Workspaces Route\n// =============================================================================\n\nexport const LIST_WORKSPACES_ROUTE = createRoute({\n method: 'GET',\n path: '/workspaces',\n responseType: 'json',\n responseSchema: listWorkspacesResponseSchema,\n summary: 'List all workspaces',\n description: 'Returns all workspaces from both Mastra instance and agents',\n tags: ['Workspace'],\n handler: async ({ mastra }) => {\n try {\n requireWorkspaceV1Support();\n\n const workspaces: Array<{\n id: string;\n name: string;\n status: string;\n source: 'mastra' | 'agent';\n agentId?: string;\n agentName?: string;\n capabilities: {\n hasFilesystem: boolean;\n hasSandbox: boolean;\n canBM25: boolean;\n canVector: boolean;\n canHybrid: boolean;\n hasSkills: boolean;\n };\n safety: {\n readOnly: boolean;\n };\n }> = [];\n\n // Prefer the workspace registry if available (duck-type check for newer @mastra/core).\n // This avoids calling dynamic workspace functions without proper request context.\n // Dynamic workspaces get lazily registered during agent execution (stream/generate).\n if (typeof mastra.listWorkspaces === 'function') {\n const registeredWorkspaces = mastra.listWorkspaces();\n\n for (const [, entry] of Object.entries(registeredWorkspaces)) {\n // Newer @mastra/core returns { workspace, source, agentId?, agentName? }.\n // Older versions return a bare Workspace object — detect via duck-typing.\n const ws: Workspace = (entry as any).workspace ?? entry;\n const source: 'mastra' | 'agent' = (entry as any).source ?? 'mastra';\n const agentId: string | undefined = (entry as any).agentId;\n const agentName: string | undefined = (entry as any).agentName;\n\n workspaces.push({\n id: ws.id,\n name: ws.name,\n status: ws.status,\n source,\n ...(source === 'agent' && agentId ? { agentId, ...(agentName != null ? { agentName } : {}) } : {}),\n capabilities: {\n hasFilesystem: !!ws.filesystem,\n hasSandbox: !!ws.sandbox,\n canBM25: ws.canBM25,\n canVector: ws.canVector,\n canHybrid: ws.canHybrid,\n hasSkills: !!ws.skills,\n },\n safety: {\n readOnly: ws.filesystem?.readOnly ?? false,\n },\n });\n }\n } else {\n // Fallback for older @mastra/core without workspace registry:\n // Check global workspace and loop through agents\n const seenIds = new Set<string>();\n const globalWorkspace = mastra.getWorkspace?.();\n if (globalWorkspace) {\n seenIds.add(globalWorkspace.id);\n workspaces.push({\n id: globalWorkspace.id,\n name: globalWorkspace.name,\n status: globalWorkspace.status,\n source: 'mastra',\n capabilities: {\n hasFilesystem: !!globalWorkspace.filesystem,\n hasSandbox: !!globalWorkspace.sandbox,\n canBM25: globalWorkspace.canBM25,\n canVector: globalWorkspace.canVector,\n canHybrid: globalWorkspace.canHybrid,\n hasSkills: !!globalWorkspace.skills,\n },\n safety: {\n readOnly: globalWorkspace.filesystem?.readOnly ?? false,\n },\n });\n }\n\n const agents = mastra.listAgents?.() ?? {};\n for (const [agentId, agent] of Object.entries(agents)) {\n if ((agent as any).hasOwnWorkspace?.()) {\n try {\n const agentWorkspace = await (agent as any).getWorkspace?.();\n if (agentWorkspace && !seenIds.has(agentWorkspace.id)) {\n seenIds.add(agentWorkspace.id);\n workspaces.push({\n id: agentWorkspace.id,\n name: agentWorkspace.name,\n status: agentWorkspace.status,\n source: 'agent',\n agentId,\n agentName: (agent as any).name,\n capabilities: {\n hasFilesystem: !!agentWorkspace.filesystem,\n hasSandbox: !!agentWorkspace.sandbox,\n canBM25: agentWorkspace.canBM25,\n canVector: agentWorkspace.canVector,\n canHybrid: agentWorkspace.canHybrid,\n hasSkills: !!agentWorkspace.skills,\n },\n safety: {\n readOnly: agentWorkspace.filesystem?.readOnly ?? false,\n },\n });\n }\n } catch {\n continue;\n }\n }\n }\n }\n\n return { workspaces };\n } catch (error) {\n return handleWorkspaceError(error, 'Error listing workspaces');\n }\n },\n});\n\n// =============================================================================\n// Get Workspace Route\n// =============================================================================\n\nexport const GET_WORKSPACE_ROUTE = createRoute({\n method: 'GET',\n path: '/workspaces/:workspaceId',\n responseType: 'json',\n pathParamSchema: workspaceIdPathParams,\n responseSchema: workspaceInfoResponseSchema,\n summary: 'Get workspace info',\n description: 'Returns information about a specific workspace and its capabilities',\n tags: ['Workspace'],\n handler: async ({ mastra, workspaceId }) => {\n try {\n const workspace = await getWorkspaceById(mastra, workspaceId);\n\n if (!workspace) {\n return {\n isWorkspaceConfigured: false,\n };\n }\n\n const fsInfo = await workspace.filesystem?.getInfo?.();\n\n // Build mounts array for CompositeFilesystem\n let mounts:\n | Array<{\n path: string;\n provider: string;\n readOnly: boolean;\n displayName?: string;\n icon?: string;\n name?: string;\n }>\n | undefined;\n\n if (isCompositeFilesystem(workspace.filesystem)) {\n mounts = [];\n for (const [mountPath, mountFs] of workspace.filesystem.mounts) {\n try {\n const info = await mountFs.getInfo?.();\n mounts.push({\n path: mountPath,\n provider: info?.provider ?? mountFs.provider ?? 'unknown',\n readOnly: mountFs.readOnly ?? false,\n displayName: info?.name ?? mountFs.name,\n icon: info?.icon,\n name: mountFs.name,\n });\n } catch {\n mounts.push({\n path: mountPath,\n provider: mountFs.provider ?? 'unknown',\n readOnly: mountFs.readOnly ?? true,\n name: mountFs.name,\n });\n }\n }\n }\n\n return {\n isWorkspaceConfigured: true,\n id: workspace.id,\n name: workspace.name,\n status: workspace.status,\n capabilities: {\n hasFilesystem: !!workspace.filesystem,\n hasSandbox: !!workspace.sandbox,\n canBM25: workspace.canBM25,\n canVector: workspace.canVector,\n canHybrid: workspace.canHybrid,\n hasSkills: !!workspace.skills,\n },\n safety: {\n readOnly: workspace.filesystem?.readOnly ?? false,\n },\n filesystem: fsInfo\n ? {\n id: fsInfo.id,\n name: fsInfo.name,\n provider: fsInfo.provider,\n status: fsInfo.status,\n error: fsInfo.error,\n readOnly: fsInfo.readOnly,\n icon: fsInfo.icon,\n metadata: fsInfo.metadata,\n }\n : undefined,\n mounts,\n };\n } catch (error) {\n return handleWorkspaceError(error, 'Error getting workspace info');\n }\n },\n});\n\n// =============================================================================\n// Filesystem Routes\n// =============================================================================\n\nexport const WORKSPACE_FS_READ_ROUTE = createRoute({\n method: 'GET',\n path: '/workspaces/:workspaceId/fs/read',\n responseType: 'json',\n pathParamSchema: workspaceIdPathParams,\n queryParamSchema: fsReadQuerySchema,\n responseSchema: fsReadResponseSchema,\n summary: 'Read file content',\n description: 'Returns the content of a file at the specified path',\n tags: ['Workspace'],\n handler: async ({ mastra, path, encoding, workspaceId }) => {\n try {\n requireWorkspaceV1Support();\n\n if (!path) {\n throw new HTTPException(400, { message: 'Path is required' });\n }\n\n const workspace = await getWorkspaceById(mastra, workspaceId);\n if (!workspace?.filesystem) {\n throw new HTTPException(404, { message: 'No workspace filesystem configured' });\n }\n\n const decodedPath = path;\n\n // Check if path exists\n if (!(await workspace.filesystem.exists(decodedPath))) {\n throw new HTTPException(404, { message: `Path \"${decodedPath}\" not found` });\n }\n\n // Read file content\n const content = await workspace.filesystem.readFile(decodedPath, {\n encoding: (encoding as BufferEncoding) || 'utf-8',\n });\n\n return {\n path: decodedPath,\n content: typeof content === 'string' ? content : content.toString('utf-8'),\n type: 'file' as const,\n };\n } catch (error) {\n return handleWorkspaceError(error, 'Error reading file');\n }\n },\n});\n\nexport const WORKSPACE_FS_WRITE_ROUTE = createRoute({\n method: 'POST',\n path: '/workspaces/:workspaceId/fs/write',\n responseType: 'json',\n pathParamSchema: workspaceIdPathParams,\n bodySchema: fsWriteBodySchema,\n responseSchema: fsWriteResponseSchema,\n summary: 'Write file content',\n description: 'Writes content to a file at the specified path. Supports base64 encoding for binary files.',\n tags: ['Workspace'],\n handler: async ({ mastra, path, content, encoding, recursive, workspaceId }) => {\n try {\n requireWorkspaceV1Support();\n\n if (!path || content === undefined) {\n throw new HTTPException(400, { message: 'Path and content are required' });\n }\n\n const workspace = await getWorkspaceById(mastra, workspaceId);\n if (!workspace?.filesystem) {\n throw new HTTPException(404, { message: 'No workspace filesystem configured' });\n }\n\n if (workspace.filesystem?.readOnly) {\n throw new HTTPException(403, { message: 'Workspace is in read-only mode' });\n }\n\n const decodedPath = path;\n\n // Handle base64-encoded content for binary files\n let fileContent: string | Buffer = content;\n if (encoding === 'base64') {\n fileContent = Buffer.from(content, 'base64');\n }\n\n await workspace.filesystem.writeFile(decodedPath, fileContent, { recursive: recursive ?? true });\n\n return {\n success: true,\n path: decodedPath,\n };\n } catch (error) {\n return handleWorkspaceError(error, 'Error writing file');\n }\n },\n});\n\nexport const WORKSPACE_FS_LIST_ROUTE = createRoute({\n method: 'GET',\n path: '/workspaces/:workspaceId/fs/list',\n responseType: 'json',\n pathParamSchema: workspaceIdPathParams,\n queryParamSchema: fsListQuerySchema,\n responseSchema: fsListResponseSchema,\n summary: 'List directory contents',\n description: 'Returns a list of files and directories at the specified path',\n tags: ['Workspace'],\n handler: async ({ mastra, path, recursive, workspaceId }) => {\n try {\n requireWorkspaceV1Support();\n\n if (!path) {\n throw new HTTPException(400, { message: 'Path is required' });\n }\n\n const workspace = await getWorkspaceById(mastra, workspaceId);\n if (!workspace?.filesystem) {\n return {\n path,\n entries: [],\n error: 'No workspace filesystem configured',\n };\n }\n\n const decodedPath = path;\n\n // Check if path exists\n if (!(await workspace.filesystem.exists(decodedPath))) {\n throw new HTTPException(404, { message: `Path \"${decodedPath}\" not found` });\n }\n\n const entries = await workspace.filesystem.readdir(decodedPath, { recursive });\n\n return {\n path: decodedPath,\n entries,\n };\n } catch (error) {\n return handleWorkspaceError(error, 'Error listing directory');\n }\n },\n});\n\nexport const WORKSPACE_FS_DELETE_ROUTE = createRoute({\n method: 'DELETE',\n path: '/workspaces/:workspaceId/fs/delete',\n responseType: 'json',\n pathParamSchema: workspaceIdPathParams,\n queryParamSchema: fsDeleteQuerySchema,\n responseSchema: fsDeleteResponseSchema,\n summary: 'Delete file or directory',\n description: 'Deletes a file or directory at the specified path',\n tags: ['Workspace'],\n handler: async ({ mastra, path, recursive, force, workspaceId }) => {\n try {\n requireWorkspaceV1Support();\n\n if (!path) {\n throw new HTTPException(400, { message: 'Path is required' });\n }\n\n const workspace = await getWorkspaceById(mastra, workspaceId);\n if (!workspace?.filesystem) {\n throw new HTTPException(404, { message: 'No workspace filesystem configured' });\n }\n\n if (workspace.filesystem?.readOnly) {\n throw new HTTPException(403, { message: 'Workspace is in read-only mode' });\n }\n\n const decodedPath = path;\n\n // Check if path exists (unless force is true)\n const exists = await workspace.filesystem.exists(decodedPath);\n if (!exists && !force) {\n throw new HTTPException(404, { message: `Path \"${decodedPath}\" not found` });\n }\n\n if (exists) {\n // Try to delete as file first, then as directory\n try {\n await workspace.filesystem.deleteFile(decodedPath, { force });\n } catch {\n await workspace.filesystem.rmdir(decodedPath, { recursive, force });\n }\n }\n\n return {\n success: true,\n path: decodedPath,\n };\n } catch (error) {\n return handleWorkspaceError(error, 'Error deleting path');\n }\n },\n});\n\nexport const WORKSPACE_FS_MKDIR_ROUTE = createRoute({\n method: 'POST',\n path: '/workspaces/:workspaceId/fs/mkdir',\n responseType: 'json',\n pathParamSchema: workspaceIdPathParams,\n bodySchema: fsMkdirBodySchema,\n responseSchema: fsMkdirResponseSchema,\n summary: 'Create directory',\n description: 'Creates a directory at the specified path',\n tags: ['Workspace'],\n handler: async ({ mastra, path, recursive, workspaceId }) => {\n try {\n requireWorkspaceV1Support();\n\n if (!path) {\n throw new HTTPException(400, { message: 'Path is required' });\n }\n\n const workspace = await getWorkspaceById(mastra, workspaceId);\n if (!workspace?.filesystem) {\n throw new HTTPException(404, { message: 'No workspace filesystem configured' });\n }\n\n if (workspace.filesystem?.readOnly) {\n throw new HTTPException(403, { message: 'Workspace is in read-only mode' });\n }\n\n const decodedPath = path;\n\n await workspace.filesystem.mkdir(decodedPath, { recursive: recursive ?? true });\n\n return {\n success: true,\n path: decodedPath,\n };\n } catch (error) {\n return handleWorkspaceError(error, 'Error creating directory');\n }\n },\n});\n\nexport const WORKSPACE_FS_STAT_ROUTE = createRoute({\n method: 'GET',\n path: '/workspaces/:workspaceId/fs/stat',\n responseType: 'json',\n pathParamSchema: workspaceIdPathParams,\n queryParamSchema: fsStatQuerySchema,\n responseSchema: fsStatResponseSchema,\n summary: 'Get file/directory info',\n description: 'Returns metadata about a file or directory',\n tags: ['Workspace'],\n handler: async ({ mastra, path, workspaceId }) => {\n try {\n requireWorkspaceV1Support();\n\n if (!path) {\n throw new HTTPException(400, { message: 'Path is required' });\n }\n\n const workspace = await getWorkspaceById(mastra, workspaceId);\n if (!workspace?.filesystem) {\n throw new HTTPException(404, { message: 'No workspace filesystem configured' });\n }\n\n const decodedPath = path;\n\n // Check if path exists\n if (!(await workspace.filesystem.exists(decodedPath))) {\n throw new HTTPException(404, { message: `Path \"${decodedPath}\" not found` });\n }\n\n const stat = await workspace.filesystem.stat(decodedPath);\n\n return {\n path: stat.path,\n type: stat.type,\n size: stat.size,\n createdAt: stat.createdAt?.toISOString(),\n modifiedAt: stat.modifiedAt?.toISOString(),\n mimeType: stat.mimeType,\n };\n } catch (error) {\n return handleWorkspaceError(error, 'Error getting file info');\n }\n },\n});\n\n// =============================================================================\n// Search Routes\n// =============================================================================\n\nexport const WORKSPACE_SEARCH_ROUTE = createRoute({\n method: 'GET',\n path: '/workspaces/:workspaceId/search',\n responseType: 'json',\n pathParamSchema: workspaceIdPathParams,\n queryParamSchema: searchQuerySchema,\n responseSchema: searchResponseSchema,\n summary: 'Search workspace content',\n description: 'Searches across indexed workspace content using BM25, vector, or hybrid search',\n tags: ['Workspace'],\n handler: async ({ mastra, query, topK, mode, minScore, workspaceId }) => {\n try {\n requireWorkspaceV1Support();\n\n if (!query) {\n throw new HTTPException(400, { message: 'Search query is required' });\n }\n\n const workspace = await getWorkspaceById(mastra, workspaceId);\n if (!workspace) {\n return {\n results: [],\n query,\n mode: mode || 'bm25',\n };\n }\n\n // Check search capabilities\n const canSearch = workspace.canBM25 || workspace.canVector;\n if (!canSearch) {\n return {\n results: [],\n query,\n mode: mode || 'bm25',\n };\n }\n\n // Determine search mode based on capabilities\n let searchMode = mode;\n if (!searchMode) {\n if (workspace.canHybrid) {\n searchMode = 'hybrid';\n } else if (workspace.canVector) {\n searchMode = 'vector';\n } else {\n searchMode = 'bm25';\n }\n }\n\n const results = await workspace.search(query, {\n topK: topK || 5,\n mode: searchMode,\n minScore,\n });\n\n return {\n results: results.map(r => ({\n id: r.id,\n content: r.content,\n score: r.score,\n lineRange: r.lineRange,\n scoreDetails: r.scoreDetails,\n })),\n query,\n mode: searchMode,\n };\n } catch (error) {\n return handleWorkspaceError(error, 'Error searching workspace');\n }\n },\n});\n\nexport const WORKSPACE_INDEX_ROUTE = createRoute({\n method: 'POST',\n path: '/workspaces/:workspaceId/index',\n responseType: 'json',\n pathParamSchema: workspaceIdPathParams,\n bodySchema: indexBodySchema,\n responseSchema: indexResponseSchema,\n summary: 'Index content for search',\n description: 'Indexes content for later search operations',\n tags: ['Workspace'],\n handler: async ({ mastra, path, content, metadata, workspaceId }) => {\n try {\n requireWorkspaceV1Support();\n\n if (!path || content === undefined) {\n throw new HTTPException(400, { message: 'Path and content are required' });\n }\n\n const workspace = await getWorkspaceById(mastra, workspaceId);\n if (!workspace) {\n throw new HTTPException(404, { message: 'No workspace configured' });\n }\n\n const canSearch = workspace.canBM25 || workspace.canVector;\n if (!canSearch) {\n throw new HTTPException(400, { message: 'Workspace does not have search configured' });\n }\n\n await workspace.index(path, content, { metadata });\n\n return {\n success: true,\n path,\n };\n } catch (error) {\n return handleWorkspaceError(error, 'Error indexing content');\n }\n },\n});\n\n// =============================================================================\n// Skills Routes (under /workspaces/:workspaceId/skills)\n// =============================================================================\n\n/** Path prefix for skills installed via skills.sh (with trailing slash for prefix matching) */\nconst SKILLS_SH_PATH_PREFIX = `${SKILLS_SH_DIR}/`;\n\nexport const WORKSPACE_LIST_SKILLS_ROUTE = createRoute({\n method: 'GET',\n path: '/workspaces/:workspaceId/skills',\n responseType: 'json',\n pathParamSchema: workspaceIdPathParams,\n responseSchema: listSkillsResponseSchema,\n summary: 'List all skills',\n description: 'Returns a list of all discovered skills with their metadata',\n tags: ['Workspace', 'Skills'],\n handler: async ({ mastra, workspaceId, requestContext }) => {\n try {\n requireWorkspaceV1Support();\n\n const workspace = await getWorkspaceById(mastra, workspaceId);\n const skills = workspace?.skills;\n if (!skills) {\n return { skills: [], isSkillsConfigured: false };\n }\n\n // Refresh skills with request context (handles dynamic skill resolvers)\n await skills.maybeRefresh({ requestContext });\n\n const skillsList = await skills.list();\n\n // Enrich skills with skills.sh source info where applicable\n const enrichedSkills = await Promise.all(\n skillsList.map(async skillMeta => {\n let skillsShSource: { owner: string; repo: string } | undefined;\n\n // For skills installed via skills.sh, read source info from .meta.json.\n // Uses includes() because glob-discovered paths may have a leading slash\n // or be nested (e.g., '/.agents/skills/foo', '/src/.agents/skills/foo').\n if (skillMeta.path.includes(SKILLS_SH_PATH_PREFIX) && workspace.filesystem) {\n try {\n const metaPath = `${skillMeta.path}/.meta.json`;\n const metaContent = await workspace.filesystem.readFile(metaPath);\n const metaText = typeof metaContent === 'string' ? metaContent : metaContent.toString('utf-8');\n const meta = JSON.parse(metaText) as { owner?: string; repo?: string };\n if (meta.owner && meta.repo) {\n skillsShSource = { owner: meta.owner, repo: meta.repo };\n }\n } catch {\n // .meta.json might not exist or be invalid - that's ok\n }\n }\n\n return {\n name: skillMeta.name,\n description: skillMeta.description,\n license: skillMeta.license,\n compatibility: skillMeta.compatibility,\n metadata: skillMeta.metadata,\n path: skillMeta.path,\n skillsShSource,\n };\n }),\n );\n\n return {\n skills: enrichedSkills,\n isSkillsConfigured: true,\n };\n } catch (error) {\n return handleWorkspaceError(error, 'Error listing skills');\n }\n },\n});\n\nexport const WORKSPACE_GET_SKILL_ROUTE = createRoute({\n method: 'GET',\n path: '/workspaces/:workspaceId/skills/:skillName',\n responseType: 'json',\n pathParamSchema: skillNamePathParams,\n queryParamSchema: skillDisambiguationQuerySchema,\n responseSchema: getSkillResponseSchema,\n summary: 'Get skill details',\n description: 'Returns the full details of a specific skill including instructions and file lists',\n tags: ['Workspace', 'Skills'],\n handler: async ({ mastra, skillName, path, workspaceId, requestContext }) => {\n try {\n requireWorkspaceV1Support();\n\n if (!skillName) {\n throw new HTTPException(400, { message: 'Skill name is required' });\n }\n\n // Use the optional ?path= query param for disambiguation, otherwise fall back to name\n const identifier = path ?? skillName;\n\n const skills = await getSkillsById(mastra, workspaceId);\n if (!skills) {\n throw new HTTPException(404, { message: 'No workspace with skills configured' });\n }\n\n // Refresh skills with request context (handles dynamic skill resolvers)\n await skills.maybeRefresh({ requestContext });\n\n const skill = await skills.get(identifier);\n if (!skill) {\n throw new HTTPException(404, { message: `Skill \"${identifier}\" not found` });\n }\n\n return {\n name: skill.name,\n description: skill.description,\n license: skill.license,\n compatibility: skill.compatibility,\n metadata: skill.metadata,\n path: skill.path,\n instructions: skill.instructions,\n source: skill.source,\n references: skill.references,\n scripts: skill.scripts,\n assets: skill.assets,\n };\n } catch (error) {\n return handleWorkspaceError(error, 'Error getting skill');\n }\n },\n});\n\nexport const WORKSPACE_LIST_SKILL_REFERENCES_ROUTE = createRoute({\n method: 'GET',\n path: '/workspaces/:workspaceId/skills/:skillName/references',\n responseType: 'json',\n pathParamSchema: skillNamePathParams,\n queryParamSchema: skillDisambiguationQuerySchema,\n responseSchema: listReferencesResponseSchema,\n summary: 'List skill references',\n description: 'Returns a list of all reference file paths for a skill',\n tags: ['Workspace', 'Skills'],\n handler: async ({ mastra, skillName, path, workspaceId, requestContext }) => {\n try {\n requireWorkspaceV1Support();\n\n if (!skillName) {\n throw new HTTPException(400, { message: 'Skill name is required' });\n }\n\n // Use the optional ?path= query param for disambiguation, otherwise fall back to name\n const identifier = path ?? skillName;\n\n const skills = await getSkillsById(mastra, workspaceId);\n if (!skills) {\n throw new HTTPException(404, { message: 'No workspace with skills configured' });\n }\n\n // Refresh skills with request context (handles dynamic skill resolvers)\n await skills.maybeRefresh({ requestContext });\n\n const skill = await skills.get(identifier);\n if (!skill) {\n throw new HTTPException(404, { message: `Skill \"${identifier}\" not found` });\n }\n\n const references = await skills.listReferences(identifier);\n\n return {\n skillName: skill.name,\n references,\n };\n } catch (error) {\n return handleWorkspaceError(error, 'Error listing skill references');\n }\n },\n});\n\nexport const WORKSPACE_GET_SKILL_REFERENCE_ROUTE = createRoute({\n method: 'GET',\n path: '/workspaces/:workspaceId/skills/:skillName/references/:referencePath',\n responseType: 'json',\n pathParamSchema: skillReferencePathParams,\n queryParamSchema: skillDisambiguationQuerySchema,\n responseSchema: skillReferenceResponseSchema,\n summary: 'Get skill reference content',\n description: 'Returns the content of a specific reference file from a skill',\n tags: ['Workspace', 'Skills'],\n handler: async ({ mastra, skillName, path: skillPath, referencePath, workspaceId, requestContext }) => {\n try {\n requireWorkspaceV1Support();\n\n // Use the optional ?path= query param for disambiguation, otherwise fall back to name\n const identifier = skillPath ?? skillName;\n\n const skills = await getSkillsById(mastra, workspaceId);\n if (!skills) {\n throw new HTTPException(404, { message: 'No workspace with skills configured' });\n }\n\n // Refresh skills with request context (handles dynamic skill resolvers)\n await skills.maybeRefresh({ requestContext });\n\n // Resolve skill to get its name for the response\n const skill = await skills.get(identifier);\n if (!skill) {\n throw new HTTPException(404, { message: `Skill \"${identifier}\" not found` });\n }\n\n const decodedPath = referencePath;\n\n // Prevent path traversal via the reference path parameter\n assertSafeFilePath(decodedPath);\n\n // getReference expects a path relative to skill.path, so prepend 'references/'\n // since the URL path already contains the literal /references/ segment\n const content = await skills.getReference(identifier, `references/${decodedPath}`);\n if (content === null) {\n throw new HTTPException(404, {\n message: `Reference \"${decodedPath}\" not found in skill \"${identifier}\"`,\n });\n }\n\n return {\n skillName: skill.name,\n referencePath: decodedPath,\n content,\n };\n } catch (error) {\n return handleWorkspaceError(error, 'Error getting skill reference');\n }\n },\n});\n\nexport const WORKSPACE_SEARCH_SKILLS_ROUTE = createRoute({\n method: 'GET',\n path: '/workspaces/:workspaceId/skills/search',\n responseType: 'json',\n pathParamSchema: workspaceIdPathParams,\n queryParamSchema: searchSkillsQuerySchema,\n responseSchema: searchSkillsResponseSchema,\n summary: 'Search skills',\n description: 'Searches across all skills content using BM25 keyword search',\n tags: ['Workspace', 'Skills'],\n handler: async ({ mastra, query, topK, minScore, skillNames, includeReferences, workspaceId, requestContext }) => {\n try {\n requireWorkspaceV1Support();\n\n if (!query) {\n throw new HTTPException(400, { message: 'Search query is required' });\n }\n\n const skills = await getSkillsById(mastra, workspaceId);\n if (!skills) {\n return {\n results: [],\n query,\n };\n }\n\n // Refresh skills with request context (handles dynamic skill resolvers)\n await skills.maybeRefresh({ requestContext });\n\n // Parse comma-separated skill names if provided\n const skillNamesList = skillNames ? skillNames.split(',').map((s: string) => s.trim()) : undefined;\n\n const results = await skills.search(query, {\n topK: topK || 5,\n minScore,\n skillNames: skillNamesList,\n includeReferences: includeReferences ?? true,\n });\n\n return {\n results: results.map(r => ({\n skillName: r.skillName,\n skillPath: r.skillPath,\n source: r.source,\n content: r.content,\n score: r.score,\n lineRange: r.lineRange,\n scoreDetails: r.scoreDetails,\n })),\n query,\n };\n } catch (error) {\n return handleWorkspaceError(error, 'Error searching skills');\n }\n },\n});\n\n// =============================================================================\n// skills.sh Proxy Routes\n// =============================================================================\n\nconst SKILLS_SH_API_URL = 'https://skills-api-production.up.railway.app';\n\nexport const WORKSPACE_SKILLS_SH_SEARCH_ROUTE = createRoute({\n method: 'GET',\n path: '/workspaces/:workspaceId/skills-sh/search',\n responseType: 'json',\n pathParamSchema: workspaceIdPathParams,\n queryParamSchema: skillsShSearchQuerySchema,\n responseSchema: skillsShSearchResponseSchema,\n summary: 'Search skills on skills.sh',\n description: 'Proxies search requests to skills.sh API to avoid CORS issues',\n tags: ['Workspace', 'Skills'],\n handler: async ({ q, limit }) => {\n try {\n const controller = new AbortController();\n const timeoutId = setTimeout(() => controller.abort(), 10000);\n\n const url = `${SKILLS_SH_API_URL}/api/skills?query=${encodeURIComponent(q)}&pageSize=${limit}`;\n const response = await fetch(url, { signal: controller.signal });\n clearTimeout(timeoutId);\n\n if (!response.ok) {\n throw new HTTPException(502, {\n message: `Skills API error: ${response.status} ${response.statusText}`,\n });\n }\n\n const data = (await response.json()) as {\n skills: Array<{\n skillId: string;\n name: string;\n installs: number;\n source: string;\n owner: string;\n repo: string;\n githubUrl: string;\n displayName: string;\n }>;\n total: number;\n page: number;\n pageSize: number;\n totalPages: number;\n };\n return {\n query: q,\n searchType: 'query',\n skills: data.skills.map(s => ({ id: s.skillId, name: s.name, installs: s.installs, topSource: s.source })),\n count: data.total,\n };\n } catch (error) {\n if (error instanceof HTTPException) {\n throw error;\n }\n return handleError(error, 'Error searching skills');\n }\n },\n});\n\nexport const WORKSPACE_SKILLS_SH_POPULAR_ROUTE = createRoute({\n method: 'GET',\n path: '/workspaces/:workspaceId/skills-sh/popular',\n responseType: 'json',\n pathParamSchema: workspaceIdPathParams,\n queryParamSchema: skillsShPopularQuerySchema,\n responseSchema: skillsShListResponseSchema,\n summary: 'Get popular skills from skills.sh',\n description: 'Proxies popular skills requests to skills.sh API to avoid CORS issues',\n tags: ['Workspace', 'Skills'],\n handler: async ({ limit, offset }) => {\n try {\n const controller = new AbortController();\n const timeoutId = setTimeout(() => controller.abort(), 10000);\n\n const page = offset > 0 ? Math.floor(offset / limit) + 1 : 1;\n const url = `${SKILLS_SH_API_URL}/api/skills/top?pageSize=${limit}&page=${page}`;\n const response = await fetch(url, { signal: controller.signal });\n clearTimeout(timeoutId);\n\n if (!response.ok) {\n throw new HTTPException(502, {\n message: `Skills API error: ${response.status} ${response.statusText}`,\n });\n }\n\n const data = (await response.json()) as {\n skills: Array<{\n skillId: string;\n name: string;\n installs: number;\n source: string;\n owner: string;\n repo: string;\n githubUrl: string;\n displayName: string;\n }>;\n total: number;\n };\n return {\n skills: data.skills.map(s => ({ id: s.skillId, name: s.name, installs: s.installs, topSource: s.source })),\n count: data.total,\n limit,\n offset,\n };\n } catch (error) {\n if (error instanceof HTTPException) {\n throw error;\n }\n return handleError(error, 'Error fetching popular skills');\n }\n },\n});\n\n// =============================================================================\n// Skills API helpers\n// =============================================================================\n\n/**\n * Validate skill name to prevent path traversal attacks.\n * Only allows alphanumeric characters, hyphens, and underscores.\n */\nconst SKILL_NAME_REGEX = /^[a-z0-9][a-z0-9-_]*$/i;\n\nfunction assertSafeSkillName(name: string): string {\n if (!SKILL_NAME_REGEX.test(name)) {\n throw new HTTPException(400, {\n message: `Invalid skill name \"${name}\". Names must start with alphanumeric and contain only letters, numbers, hyphens, and underscores.`,\n });\n }\n return name;\n}\n\n/**\n * Validate that a file path is safe (no traversal, no absolute paths).\n * Prevents malicious API responses from writing files outside the skill directory.\n */\nfunction assertSafeFilePath(filePath: string): string {\n // Reject absolute paths\n if (filePath.startsWith('/') || /^[a-zA-Z]:/.test(filePath)) {\n throw new HTTPException(400, {\n message: `Invalid file path \"${filePath}\". Absolute paths are not allowed.`,\n });\n }\n // Reject path traversal attempts\n const segments = filePath.split('/');\n for (const segment of segments) {\n if (segment === '..' || segment === '.') {\n throw new HTTPException(400, {\n message: `Invalid file path \"${filePath}\". Path traversal is not allowed.`,\n });\n }\n }\n return filePath;\n}\n\ninterface SkillFileEntry {\n path: string;\n content: string;\n encoding: 'utf-8' | 'base64';\n}\n\ninterface SkillFilesResponse {\n skillId: string;\n owner: string;\n repo: string;\n branch: string;\n files: SkillFileEntry[];\n}\n\n/**\n * Fetch skill files from the Skills API.\n * Returns all files for a skill with their content.\n */\nasync function fetchSkillFiles(owner: string, repo: string, skillName: string): Promise<SkillFilesResponse | null> {\n const controller = new AbortController();\n const timeoutId = setTimeout(() => controller.abort(), 30000); // 30s for file downloads\n\n const url = `${SKILLS_SH_API_URL}/api/skills/${encodeURIComponent(owner)}/${encodeURIComponent(repo)}/${encodeURIComponent(skillName)}/files`;\n const response = await fetch(url, { signal: controller.signal });\n clearTimeout(timeoutId);\n\n if (!response.ok) {\n if (response.status === 404) {\n return null;\n }\n throw new Error(`Skills API error: ${response.status} ${response.statusText}`);\n }\n\n return (await response.json()) as SkillFilesResponse;\n}\n\n// =============================================================================\n// skills.sh Preview Route\n// =============================================================================\n\nexport const WORKSPACE_SKILLS_SH_PREVIEW_ROUTE = createRoute({\n method: 'GET',\n path: '/workspaces/:workspaceId/skills-sh/preview',\n responseType: 'json',\n pathParamSchema: workspaceIdPathParams,\n queryParamSchema: skillsShPreviewQuerySchema,\n responseSchema: skillsShPreviewResponseSchema,\n summary: 'Preview skill content',\n description: 'Fetches the skill content from the Skills API.',\n tags: ['Workspace', 'Skills'],\n handler: async ({ owner, repo, path: skillName }) => {\n try {\n const controller = new AbortController();\n const timeoutId = setTimeout(() => controller.abort(), 10000);\n\n const url = `${SKILLS_SH_API_URL}/api/skills/${encodeURIComponent(owner)}/${encodeURIComponent(repo)}/${encodeURIComponent(skillName)}/content`;\n const response = await fetch(url, { signal: controller.signal });\n clearTimeout(timeoutId);\n\n if (!response.ok) {\n throw new HTTPException(404, {\n message: `Could not find skill \"${skillName}\" for ${owner}/${repo}`,\n });\n }\n\n const data = (await response.json()) as { instructions: string; raw: string };\n const content = data.instructions || data.raw || '';\n\n if (!content) {\n throw new HTTPException(404, {\n message: `No content available for skill \"${skillName}\"`,\n });\n }\n\n return { content };\n } catch (error) {\n if (error instanceof HTTPException) {\n throw error;\n }\n return handleError(error, 'Error fetching skill preview');\n }\n },\n});\n\n// =============================================================================\n// skills.sh Install Route\n// =============================================================================\n\nexport const WORKSPACE_SKILLS_SH_INSTALL_ROUTE = createRoute({\n method: 'POST',\n path: '/workspaces/:workspaceId/skills-sh/install',\n responseType: 'json',\n pathParamSchema: workspaceIdPathParams,\n bodySchema: skillsShInstallBodySchema,\n responseSchema: skillsShInstallResponseSchema,\n summary: 'Install skill from Skills API',\n description: 'Installs a skill by fetching files from the Skills API and writing to workspace filesystem.',\n tags: ['Workspace', 'Skills'],\n handler: async ({ mastra, workspaceId, owner, repo, skillName, mount }) => {\n try {\n requireWorkspaceV1Support();\n\n const workspace = await getWorkspaceById(mastra, workspaceId);\n if (!workspace) {\n throw new HTTPException(404, { message: 'Workspace not found' });\n }\n\n if (!workspace.filesystem) {\n throw new HTTPException(400, { message: 'Workspace filesystem not available' });\n }\n\n if (workspace.filesystem.readOnly) {\n throw new HTTPException(403, { message: 'Workspace is read-only' });\n }\n\n // Fetch skill files from the Skills API\n const result = await fetchSkillFiles(owner, repo, skillName);\n if (!result || result.files.length === 0) {\n throw new HTTPException(404, {\n message: `Could not find skill \"${skillName}\" in ${owner}/${repo}.`,\n });\n }\n\n // Validate skill name to prevent path traversal\n const safeSkillId = assertSafeSkillName(result.skillId);\n const installPath = buildSkillInstallPath(workspace.filesystem, safeSkillId, mount);\n\n // Ensure the skills directory exists\n try {\n await workspace.filesystem.mkdir(installPath, { recursive: true });\n } catch {\n // Directory might already exist\n }\n\n // Write all files to the workspace\n let filesWritten = 0;\n for (const file of result.files) {\n // Validate file path to prevent path traversal from API response\n const safePath = assertSafeFilePath(file.path);\n const filePath = `${installPath}/${safePath}`;\n\n // Create subdirectory if needed\n if (safePath.includes('/')) {\n const dirPath = filePath.substring(0, filePath.lastIndexOf('/'));\n try {\n await workspace.filesystem.mkdir(dirPath, { recursive: true });\n } catch {\n // Directory might already exist\n }\n }\n\n const content = file.encoding === 'base64' ? Buffer.from(file.content, 'base64') : file.content;\n await workspace.filesystem.writeFile(filePath, content);\n filesWritten++;\n }\n\n // Write metadata file for update support\n const metadata = {\n skillName: result.skillId,\n owner: result.owner,\n repo: result.repo,\n branch: result.branch,\n installedAt: new Date().toISOString(),\n };\n await workspace.filesystem.writeFile(`${installPath}/.meta.json`, JSON.stringify(metadata, null, 2));\n filesWritten++;\n\n // Surgically update the skills cache for the newly installed skill\n if (workspace.skills?.addSkill) {\n try {\n await workspace.skills.addSkill(installPath);\n } catch (cacheError) {\n console.warn(\n `[skills-sh] Failed to update cache after install: ${cacheError instanceof Error ? cacheError.message : String(cacheError)}`,\n );\n }\n }\n\n return {\n success: true,\n skillName: result.skillId,\n installedPath: installPath,\n filesWritten,\n };\n } catch (error) {\n if (error instanceof HTTPException) {\n throw error;\n }\n return handleError(error, 'Error installing skill');\n }\n },\n});\n\n/**\n * Interface for skill metadata stored in .meta.json\n */\ninterface SkillMetaFile {\n skillName: string;\n owner: string;\n repo: string;\n branch: string;\n installedAt: string;\n}\n\nexport const WORKSPACE_SKILLS_SH_REMOVE_ROUTE = createRoute({\n method: 'POST',\n path: '/workspaces/:workspaceId/skills-sh/remove',\n responseType: 'json',\n pathParamSchema: workspaceIdPathParams,\n bodySchema: skillsShRemoveBodySchema,\n responseSchema: skillsShRemoveResponseSchema,\n summary: 'Remove an installed skill',\n description: 'Removes an installed skill by deleting its directory. Does not require sandbox.',\n tags: ['Workspace', 'Skills'],\n handler: async ({ mastra, workspaceId, skillName }) => {\n try {\n requireWorkspaceV1Support();\n\n const workspace = await getWorkspaceById(mastra, workspaceId);\n if (!workspace) {\n throw new HTTPException(404, { message: 'Workspace not found' });\n }\n\n if (!workspace.filesystem) {\n throw new HTTPException(400, { message: 'Workspace filesystem not available' });\n }\n\n if (workspace.filesystem.readOnly) {\n throw new HTTPException(403, { message: 'Workspace is read-only' });\n }\n\n // Validate skill name to prevent path traversal\n const safeSkillName = assertSafeSkillName(skillName);\n\n // Look up the skill's actual path from the cache (supports glob-discovered skills).\n // Only use the discovered path if it's under the skills.sh directory to avoid\n // accidentally deleting a locally-authored skill with the same name.\n const allSkills = await workspace.skills?.list();\n const matchingSkill = allSkills?.find(s => s.name === safeSkillName && s.path.includes(SKILLS_SH_PATH_PREFIX));\n const skillPath = matchingSkill?.path ?? buildSkillInstallPath(workspace.filesystem, safeSkillName);\n\n // Check if skill exists on filesystem\n try {\n await workspace.filesystem.stat(skillPath);\n } catch {\n throw new HTTPException(404, { message: `Skill \"${skillName}\" not found at ${skillPath}` });\n }\n\n // Delete the skill directory\n await workspace.filesystem.rmdir(skillPath, { recursive: true });\n\n // Surgically remove the skill from the cache\n if (workspace.skills?.removeSkill) {\n try {\n await workspace.skills.removeSkill(skillPath);\n } catch (cacheError) {\n console.warn(\n `[skills-sh] Failed to update cache after remove: ${cacheError instanceof Error ? cacheError.message : String(cacheError)}`,\n );\n }\n }\n\n return {\n success: true,\n skillName,\n removedPath: skillPath,\n };\n } catch (error) {\n if (error instanceof HTTPException) {\n throw error;\n }\n return handleError(error, 'Error removing skill');\n }\n },\n});\n\nexport const WORKSPACE_SKILLS_SH_UPDATE_ROUTE = createRoute({\n method: 'POST',\n path: '/workspaces/:workspaceId/skills-sh/update',\n responseType: 'json',\n pathParamSchema: workspaceIdPathParams,\n bodySchema: skillsShUpdateBodySchema,\n responseSchema: skillsShUpdateResponseSchema,\n summary: 'Update installed skills',\n description:\n 'Updates installed skills by re-fetching from GitHub. Specify skillName to update one, or omit to update all.',\n tags: ['Workspace', 'Skills'],\n handler: async ({ mastra, workspaceId, skillName }) => {\n try {\n requireWorkspaceV1Support();\n\n const workspace = await getWorkspaceById(mastra, workspaceId);\n if (!workspace) {\n throw new HTTPException(404, { message: 'Workspace not found' });\n }\n\n if (!workspace.filesystem) {\n throw new HTTPException(400, { message: 'Workspace filesystem not available' });\n }\n\n if (workspace.filesystem.readOnly) {\n throw new HTTPException(403, { message: 'Workspace is read-only' });\n }\n\n const results: Array<{\n skillName: string;\n success: boolean;\n filesWritten?: number;\n error?: string;\n }> = [];\n\n // Build list of { skillName, basePath } entries to update.\n // basePath is the parent of the skill directory (e.g., `.agents/skills`).\n let skillsToUpdate: Array<{ name: string; basePath: string }>;\n\n if (skillName) {\n const safeName = assertSafeSkillName(skillName);\n\n // Try to find the installed path via discovery first\n const allSkills = await workspace.skills?.list();\n const discoveredSkill = allSkills?.find(s => s.name === safeName && s.path.includes(SKILLS_SH_PATH_PREFIX));\n let basePath: string;\n if (discoveredSkill?.path) {\n // Derive basePath by removing the skill name suffix from the discovered path\n basePath = discoveredSkill.path.substring(0, discoveredSkill.path.lastIndexOf('/'));\n } else {\n basePath = SKILLS_SH_DIR;\n }\n skillsToUpdate = [{ name: safeName, basePath }];\n } else {\n // Update all: scan `.agents/skills` under each writable mount (or just SKILLS_SH_DIR)\n skillsToUpdate = [];\n const dirsToScan: string[] = [];\n\n if (isCompositeFilesystem(workspace.filesystem)) {\n for (const [mountPath, mountFs] of workspace.filesystem.mounts) {\n if (!mountFs.readOnly) {\n dirsToScan.push(`${stripTrailingSlash(mountPath)}/${SKILLS_SH_DIR}`);\n }\n }\n } else {\n dirsToScan.push(SKILLS_SH_DIR);\n }\n\n for (const dir of dirsToScan) {\n try {\n const entries = await workspace.filesystem.readdir(dir);\n for (const e of entries) {\n if (e.type === 'directory') {\n skillsToUpdate.push({ name: e.name, basePath: dir });\n }\n }\n } catch {\n // Directory doesn't exist or isn't readable - skip\n }\n }\n\n if (skillsToUpdate.length === 0) {\n return { updated: [] };\n }\n }\n\n for (const { name: skill, basePath } of skillsToUpdate) {\n // Validate each skill name for safety\n try {\n assertSafeSkillName(skill);\n } catch {\n results.push({\n skillName: skill,\n success: false,\n error: 'Invalid skill name',\n });\n continue;\n }\n const installPath = `${basePath}/${skill}`;\n const metaPath = `${installPath}/.meta.json`;\n try {\n const metaContent = await workspace.filesystem.readFile(metaPath, { encoding: 'utf-8' });\n const meta: SkillMetaFile = JSON.parse(metaContent as string);\n\n // Re-fetch skill files from the Skills API\n const fetchResult = await fetchSkillFiles(meta.owner, meta.repo, meta.skillName);\n\n if (!fetchResult || fetchResult.files.length === 0) {\n results.push({\n skillName: skill,\n success: false,\n error: 'No files found in skill directory',\n });\n continue;\n }\n\n let filesWritten = 0;\n\n for (const file of fetchResult.files) {\n // Validate file path to prevent path traversal from API response\n const safePath = assertSafeFilePath(file.path);\n const filePath = `${installPath}/${safePath}`;\n\n if (safePath.includes('/')) {\n const dirPath = filePath.substring(0, filePath.lastIndexOf('/'));\n try {\n await workspace.filesystem.mkdir(dirPath, { recursive: true });\n } catch {\n // Directory might already exist\n }\n }\n\n const content = file.encoding === 'base64' ? Buffer.from(file.content, 'base64') : file.content;\n await workspace.filesystem.writeFile(filePath, content);\n filesWritten++;\n }\n\n // Update metadata with new install time and branch\n const updatedMeta: SkillMetaFile = {\n ...meta,\n branch: fetchResult.branch,\n installedAt: new Date().toISOString(),\n };\n await workspace.filesystem.writeFile(metaPath, JSON.stringify(updatedMeta, null, 2));\n filesWritten++;\n\n // Surgically update the skills cache for the updated skill\n if (workspace.skills?.addSkill) {\n try {\n await workspace.skills.addSkill(installPath);\n } catch (cacheError) {\n console.warn(\n `[skills-sh] Failed to update cache after update: ${cacheError instanceof Error ? cacheError.message : String(cacheError)}`,\n );\n }\n }\n\n results.push({\n skillName: skill,\n success: true,\n filesWritten,\n });\n } catch (error) {\n results.push({\n skillName: skill,\n success: false,\n error: error instanceof Error ? error.message : 'Unknown error',\n });\n }\n }\n\n return { updated: results };\n } catch (error) {\n if (error instanceof HTTPException) {\n throw error;\n }\n return handleError(error, 'Error updating skills');\n }\n },\n});\n\nexport const WORKSPACE_SKILLS_SH_ROUTES = [\n WORKSPACE_SKILLS_SH_SEARCH_ROUTE,\n WORKSPACE_SKILLS_SH_POPULAR_ROUTE,\n WORKSPACE_SKILLS_SH_PREVIEW_ROUTE,\n WORKSPACE_SKILLS_SH_INSTALL_ROUTE,\n WORKSPACE_SKILLS_SH_REMOVE_ROUTE,\n WORKSPACE_SKILLS_SH_UPDATE_ROUTE,\n];\n\n// =============================================================================\n// Route Collections\n// =============================================================================\n\nexport const WORKSPACE_FS_ROUTES = [\n WORKSPACE_FS_READ_ROUTE,\n WORKSPACE_FS_WRITE_ROUTE,\n WORKSPACE_FS_LIST_ROUTE,\n WORKSPACE_FS_DELETE_ROUTE,\n WORKSPACE_FS_MKDIR_ROUTE,\n WORKSPACE_FS_STAT_ROUTE,\n];\n\nexport const WORKSPACE_SEARCH_ROUTES = [WORKSPACE_SEARCH_ROUTE, WORKSPACE_INDEX_ROUTE];\n\n// IMPORTANT: Search route must come before the parameterized routes\n// to avoid /api/workspace/skills/search being matched as /api/workspace/skills/:skillName\nexport const WORKSPACE_SKILLS_ROUTES = [\n WORKSPACE_SEARCH_SKILLS_ROUTE,\n WORKSPACE_LIST_SKILLS_ROUTE,\n WORKSPACE_GET_SKILL_ROUTE,\n WORKSPACE_LIST_SKILL_REFERENCES_ROUTE,\n WORKSPACE_GET_SKILL_REFERENCE_ROUTE,\n];\n"],"mappings":"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"}