@mastra/server 1.20.0 → 1.21.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 (164) hide show
  1. package/CHANGELOG.md +96 -0
  2. package/dist/_types/@internal_core/dist/index.d.ts +12 -2
  3. package/dist/{chunk-NCCK5NVX.cjs → chunk-22YG2467.cjs} +3 -3
  4. package/dist/{chunk-NCCK5NVX.cjs.map → chunk-22YG2467.cjs.map} +1 -1
  5. package/dist/{chunk-3W54ZNYP.cjs → chunk-5IKQNFW5.cjs} +3 -3
  6. package/dist/{chunk-3W54ZNYP.cjs.map → chunk-5IKQNFW5.cjs.map} +1 -1
  7. package/dist/chunk-6MFKRF4K.cjs +176 -0
  8. package/dist/chunk-6MFKRF4K.cjs.map +1 -0
  9. package/dist/{chunk-G726SOOJ.cjs → chunk-7G44ZSFS.cjs} +3 -3
  10. package/dist/{chunk-G726SOOJ.cjs.map → chunk-7G44ZSFS.cjs.map} +1 -1
  11. package/dist/{chunk-TYYGY4H4.cjs → chunk-7HOYCW7S.cjs} +3 -3
  12. package/dist/{chunk-TYYGY4H4.cjs.map → chunk-7HOYCW7S.cjs.map} +1 -1
  13. package/dist/{chunk-MH2WUZWZ.js → chunk-7KJ4NUEH.js} +3 -3
  14. package/dist/{chunk-MH2WUZWZ.js.map → chunk-7KJ4NUEH.js.map} +1 -1
  15. package/dist/chunk-AJYJ4H7P.js +438 -0
  16. package/dist/chunk-AJYJ4H7P.js.map +1 -0
  17. package/dist/{chunk-ULLR3RN3.cjs → chunk-AYD7DM5U.cjs} +3 -3
  18. package/dist/{chunk-ULLR3RN3.cjs.map → chunk-AYD7DM5U.cjs.map} +1 -1
  19. package/dist/chunk-B6HNPO67.cjs +195 -0
  20. package/dist/chunk-B6HNPO67.cjs.map +1 -0
  21. package/dist/chunk-BQXQZPYZ.js +189 -0
  22. package/dist/chunk-BQXQZPYZ.js.map +1 -0
  23. package/dist/{chunk-DAEHQAZC.cjs → chunk-DNYJSPA5.cjs} +27 -6
  24. package/dist/chunk-DNYJSPA5.cjs.map +1 -0
  25. package/dist/{chunk-UE4FGLA3.cjs → chunk-DWXE75AZ.cjs} +38 -38
  26. package/dist/{chunk-UE4FGLA3.cjs.map → chunk-DWXE75AZ.cjs.map} +1 -1
  27. package/dist/chunk-FCCXLAOT.js +153 -0
  28. package/dist/chunk-FCCXLAOT.js.map +1 -0
  29. package/dist/{chunk-5CDCKTHB.js → chunk-FCLPA23B.js} +27 -6
  30. package/dist/chunk-FCLPA23B.js.map +1 -0
  31. package/dist/{chunk-XINNAPVH.cjs → chunk-FGXFUFWK.cjs} +29 -29
  32. package/dist/{chunk-XINNAPVH.cjs.map → chunk-FGXFUFWK.cjs.map} +1 -1
  33. package/dist/chunk-FURWD3DL.cjs +180 -0
  34. package/dist/chunk-FURWD3DL.cjs.map +1 -0
  35. package/dist/{chunk-23U24RPR.cjs → chunk-G5IQN5ZG.cjs} +3 -3
  36. package/dist/{chunk-23U24RPR.cjs.map → chunk-G5IQN5ZG.cjs.map} +1 -1
  37. package/dist/{chunk-UFK5THVP.cjs → chunk-GANMD6GP.cjs} +3 -3
  38. package/dist/{chunk-UFK5THVP.cjs.map → chunk-GANMD6GP.cjs.map} +1 -1
  39. package/dist/{chunk-OSMI5XLT.cjs → chunk-GLB2TK6A.cjs} +12 -7
  40. package/dist/chunk-GLB2TK6A.cjs.map +1 -0
  41. package/dist/chunk-GWPNQNXF.cjs +45 -0
  42. package/dist/chunk-GWPNQNXF.cjs.map +1 -0
  43. package/dist/chunk-IRRJW5EA.cjs +695 -0
  44. package/dist/chunk-IRRJW5EA.cjs.map +1 -0
  45. package/dist/{chunk-G2ZZKKQI.js → chunk-L7PDVJZD.js} +3 -3
  46. package/dist/{chunk-G2ZZKKQI.js.map → chunk-L7PDVJZD.js.map} +1 -1
  47. package/dist/{chunk-K6RNBFGH.js → chunk-M4BZ2B7D.js} +3 -3
  48. package/dist/{chunk-K6RNBFGH.js.map → chunk-M4BZ2B7D.js.map} +1 -1
  49. package/dist/{chunk-4D7KSU4X.js → chunk-MWRVCCZE.js} +3 -3
  50. package/dist/{chunk-4D7KSU4X.js.map → chunk-MWRVCCZE.js.map} +1 -1
  51. package/dist/chunk-NCW7IFFR.js +690 -0
  52. package/dist/chunk-NCW7IFFR.js.map +1 -0
  53. package/dist/{chunk-MKW43AJ3.js → chunk-NL7Y763D.js} +3 -3
  54. package/dist/{chunk-MKW43AJ3.js.map → chunk-NL7Y763D.js.map} +1 -1
  55. package/dist/{chunk-MYFV2L3T.js → chunk-OBR4SMSZ.js} +3 -3
  56. package/dist/{chunk-MYFV2L3T.js.map → chunk-OBR4SMSZ.js.map} +1 -1
  57. package/dist/chunk-OJ72T77G.cjs +452 -0
  58. package/dist/chunk-OJ72T77G.cjs.map +1 -0
  59. package/dist/{chunk-5YMAXL54.js → chunk-QSA443WV.js} +3 -3
  60. package/dist/{chunk-5YMAXL54.js.map → chunk-QSA443WV.js.map} +1 -1
  61. package/dist/{chunk-4NRXB7VI.js → chunk-SNGR4M5I.js} +3 -3
  62. package/dist/{chunk-4NRXB7VI.js.map → chunk-SNGR4M5I.js.map} +1 -1
  63. package/dist/{chunk-XDFOXO76.js → chunk-SW6IJZFQ.js} +9 -9
  64. package/dist/{chunk-XDFOXO76.js.map → chunk-SW6IJZFQ.js.map} +1 -1
  65. package/dist/{chunk-WPBRQTMO.js → chunk-VCA6BSYU.js} +3 -3
  66. package/dist/{chunk-WPBRQTMO.js.map → chunk-VCA6BSYU.js.map} +1 -1
  67. package/dist/{chunk-HHF4VF75.js → chunk-VHUB2TYN.js} +3 -3
  68. package/dist/{chunk-HHF4VF75.js.map → chunk-VHUB2TYN.js.map} +1 -1
  69. package/dist/chunk-VKIIGA2F.js +35 -0
  70. package/dist/chunk-VKIIGA2F.js.map +1 -0
  71. package/dist/{chunk-2QCTUEHS.cjs → chunk-VVWHCAF2.cjs} +3 -3
  72. package/dist/{chunk-2QCTUEHS.cjs.map → chunk-VVWHCAF2.cjs.map} +1 -1
  73. package/dist/{chunk-YFQ5JIUD.js → chunk-WO7BJJIB.js} +12 -7
  74. package/dist/chunk-WO7BJJIB.js.map +1 -0
  75. package/dist/{chunk-A5J2TY2W.cjs → chunk-XKKTZVZX.cjs} +3 -3
  76. package/dist/{chunk-A5J2TY2W.cjs.map → chunk-XKKTZVZX.cjs.map} +1 -1
  77. package/dist/chunk-ZA3NGM3L.js +174 -0
  78. package/dist/chunk-ZA3NGM3L.js.map +1 -0
  79. package/dist/docs/SKILL.md +1 -1
  80. package/dist/docs/assets/SOURCE_MAP.json +1 -1
  81. package/dist/docs/references/reference-server-routes.md +22 -1
  82. package/dist/{observational-memory-B25SASRW-T76NSRNU.cjs → observational-memory-WOEVNCG4-5THJIIQE.cjs} +26 -26
  83. package/dist/{observational-memory-B25SASRW-T76NSRNU.cjs.map → observational-memory-WOEVNCG4-5THJIIQE.cjs.map} +1 -1
  84. package/dist/{observational-memory-B25SASRW-L4GYD2ZN.js → observational-memory-WOEVNCG4-DT36JHO2.js} +3 -3
  85. package/dist/{observational-memory-B25SASRW-L4GYD2ZN.js.map → observational-memory-WOEVNCG4-DT36JHO2.js.map} +1 -1
  86. package/dist/server/handlers/agent-builder.cjs +16 -16
  87. package/dist/server/handlers/agent-builder.js +1 -1
  88. package/dist/server/handlers/conversations.cjs +24 -0
  89. package/dist/server/handlers/conversations.cjs.map +1 -0
  90. package/dist/server/handlers/conversations.d.ts +153 -0
  91. package/dist/server/handlers/conversations.d.ts.map +1 -0
  92. package/dist/server/handlers/conversations.js +3 -0
  93. package/dist/server/handlers/conversations.js.map +1 -0
  94. package/dist/server/handlers/datasets.cjs +26 -26
  95. package/dist/server/handlers/datasets.js +1 -1
  96. package/dist/server/handlers/logs.cjs +4 -4
  97. package/dist/server/handlers/logs.js +1 -1
  98. package/dist/server/handlers/observability-new-endpoints.cjs +27 -27
  99. package/dist/server/handlers/observability-new-endpoints.d.ts +8 -0
  100. package/dist/server/handlers/observability-new-endpoints.d.ts.map +1 -1
  101. package/dist/server/handlers/observability-new-endpoints.js +1 -1
  102. package/dist/server/handlers/observability.cjs +32 -32
  103. package/dist/server/handlers/observability.js +2 -2
  104. package/dist/server/handlers/responses.adapter.cjs +60 -0
  105. package/dist/server/handlers/responses.adapter.cjs.map +1 -0
  106. package/dist/server/handlers/responses.adapter.d.ts +98 -0
  107. package/dist/server/handlers/responses.adapter.d.ts.map +1 -0
  108. package/dist/server/handlers/responses.adapter.js +3 -0
  109. package/dist/server/handlers/responses.adapter.js.map +1 -0
  110. package/dist/server/handlers/responses.cjs +20 -0
  111. package/dist/server/handlers/responses.cjs.map +1 -0
  112. package/dist/server/handlers/responses.d.ts +387 -0
  113. package/dist/server/handlers/responses.d.ts.map +1 -0
  114. package/dist/server/handlers/responses.js +3 -0
  115. package/dist/server/handlers/responses.js.map +1 -0
  116. package/dist/server/handlers/responses.storage.cjs +28 -0
  117. package/dist/server/handlers/responses.storage.cjs.map +1 -0
  118. package/dist/server/handlers/responses.storage.d.ts +97 -0
  119. package/dist/server/handlers/responses.storage.d.ts.map +1 -0
  120. package/dist/server/handlers/responses.storage.js +3 -0
  121. package/dist/server/handlers/responses.storage.js.map +1 -0
  122. package/dist/server/handlers/scores.cjs +7 -7
  123. package/dist/server/handlers/scores.js +1 -1
  124. package/dist/server/handlers/stored-agents.cjs +7 -7
  125. package/dist/server/handlers/stored-agents.js +1 -1
  126. package/dist/server/handlers/stored-mcp-clients.cjs +6 -6
  127. package/dist/server/handlers/stored-mcp-clients.js +1 -1
  128. package/dist/server/handlers/stored-prompt-blocks.cjs +6 -6
  129. package/dist/server/handlers/stored-prompt-blocks.js +1 -1
  130. package/dist/server/handlers/stored-scorers.cjs +6 -6
  131. package/dist/server/handlers/stored-scorers.js +1 -1
  132. package/dist/server/handlers/tools.cjs +6 -6
  133. package/dist/server/handlers/tools.js +1 -1
  134. package/dist/server/handlers/workflows.cjs +24 -24
  135. package/dist/server/handlers/workflows.js +1 -1
  136. package/dist/server/handlers.cjs +28 -18
  137. package/dist/server/handlers.d.ts +2 -0
  138. package/dist/server/handlers.d.ts.map +1 -1
  139. package/dist/server/handlers.js +9 -7
  140. package/dist/server/schemas/conversations.d.ts +74 -0
  141. package/dist/server/schemas/conversations.d.ts.map +1 -0
  142. package/dist/server/schemas/index.cjs +185 -91
  143. package/dist/server/schemas/index.d.ts +2 -0
  144. package/dist/server/schemas/index.d.ts.map +1 -1
  145. package/dist/server/schemas/index.js +5 -3
  146. package/dist/server/schemas/responses.d.ts +341 -0
  147. package/dist/server/schemas/responses.d.ts.map +1 -0
  148. package/dist/server/server-adapter/index.cjs +153 -138
  149. package/dist/server/server-adapter/index.cjs.map +1 -1
  150. package/dist/server/server-adapter/index.js +30 -15
  151. package/dist/server/server-adapter/index.js.map +1 -1
  152. package/dist/server/server-adapter/routes/conversations.d.ts +150 -0
  153. package/dist/server/server-adapter/routes/conversations.d.ts.map +1 -0
  154. package/dist/server/server-adapter/routes/index.d.ts +4 -0
  155. package/dist/server/server-adapter/routes/index.d.ts.map +1 -1
  156. package/dist/server/server-adapter/routes/observability.d.ts +4 -0
  157. package/dist/server/server-adapter/routes/observability.d.ts.map +1 -1
  158. package/dist/server/server-adapter/routes/responses.d.ts +385 -0
  159. package/dist/server/server-adapter/routes/responses.d.ts.map +1 -0
  160. package/package.json +4 -4
  161. package/dist/chunk-5CDCKTHB.js.map +0 -1
  162. package/dist/chunk-DAEHQAZC.cjs.map +0 -1
  163. package/dist/chunk-OSMI5XLT.cjs.map +0 -1
  164. package/dist/chunk-YFQ5JIUD.js.map +0 -1
@@ -0,0 +1,690 @@
1
+ import { responseObjectSchema, createResponseBodySchema, responseIdPathParams, deleteResponseSchema } from './chunk-FCCXLAOT.js';
2
+ import { mapResponseTurnRecordToResponse, mapResponseInputToExecutionMessages, mapMastraToolsToResponseTools, createMessageId, buildCompletedResponse, buildInProgressResponse, createOutputTextPart, extractTextDelta, toResponseUsage, toResponseStatus, formatSseEvent } from './chunk-AJYJ4H7P.js';
3
+ import { findResponseTurnRecord, deleteResponseTurnRecord, resolveResponseTurnMessagesForStorage, persistResponseTurnRecord } from './chunk-BQXQZPYZ.js';
4
+ import { getAgentFromSystem } from './chunk-JQMV7UUI.js';
5
+ import { getEffectiveThreadId, getEffectiveResourceId, validateThreadOwnership } from './chunk-USR6JK77.js';
6
+ import { handleError } from './chunk-P23KBWKB.js';
7
+ import { createRoute } from './chunk-NMS2SC2B.js';
8
+ import { HTTPException } from './chunk-6QWQZI4Q.js';
9
+ import { __export } from './chunk-PR4QN5HX.js';
10
+ import { randomUUID } from 'crypto';
11
+
12
+ // src/server/handlers/responses.ts
13
+ var responses_exports = {};
14
+ __export(responses_exports, {
15
+ CREATE_RESPONSE_ROUTE: () => CREATE_RESPONSE_ROUTE,
16
+ DELETE_RESPONSE_ROUTE: () => DELETE_RESPONSE_ROUTE,
17
+ GET_RESPONSE_ROUTE: () => GET_RESPONSE_ROUTE
18
+ });
19
+ var JSON_OBJECT_RESPONSE_SCHEMA = {
20
+ type: "object",
21
+ additionalProperties: true
22
+ };
23
+ function jsonResponse(data, status = 200) {
24
+ return new Response(JSON.stringify(data), {
25
+ status,
26
+ headers: {
27
+ "Content-Type": "application/json"
28
+ }
29
+ });
30
+ }
31
+ function createStructuredOutput(text) {
32
+ if (!text) {
33
+ return void 0;
34
+ }
35
+ switch (text.format.type) {
36
+ case "json_object":
37
+ return {
38
+ schema: JSON_OBJECT_RESPONSE_SCHEMA,
39
+ jsonPromptInjection: true
40
+ };
41
+ case "json_schema":
42
+ return {
43
+ schema: text.format.schema
44
+ };
45
+ default:
46
+ return void 0;
47
+ }
48
+ }
49
+ function getStreamedMessageOutputItem(response, responseId) {
50
+ return response.output.find(
51
+ (item) => item.type === "message" && item.id === responseId
52
+ ) ?? response.output.find(
53
+ (item) => item.type === "message"
54
+ ) ?? null;
55
+ }
56
+ async function resolveThreadExecutionContext({
57
+ agent,
58
+ store,
59
+ conversationId,
60
+ previousResponseTurnRecord,
61
+ requestContext
62
+ }) {
63
+ if (conversationId && previousResponseTurnRecord && previousResponseTurnRecord.thread.id !== conversationId) {
64
+ throw new HTTPException(400, {
65
+ message: "conversation_id and previous_response_id must reference the same conversation thread when both are provided"
66
+ });
67
+ }
68
+ if (previousResponseTurnRecord) {
69
+ return {
70
+ threadId: previousResponseTurnRecord.thread.id,
71
+ resourceId: previousResponseTurnRecord.thread.resourceId
72
+ };
73
+ }
74
+ const effectiveThreadId = getEffectiveThreadId(requestContext, void 0);
75
+ const effectiveResourceId = getEffectiveResourceId(requestContext, void 0);
76
+ if (!store && !conversationId && !effectiveThreadId) {
77
+ return null;
78
+ }
79
+ const memory = await agent.getMemory({ requestContext });
80
+ if (!memory) {
81
+ if (conversationId) {
82
+ throw new HTTPException(400, {
83
+ message: "conversation_id requires the target agent to have memory configured"
84
+ });
85
+ }
86
+ return null;
87
+ }
88
+ if (conversationId) {
89
+ const existingThread2 = await memory.getThreadById({ threadId: conversationId });
90
+ if (!existingThread2) {
91
+ throw new HTTPException(404, { message: `Conversation ${conversationId} was not found` });
92
+ }
93
+ await validateThreadOwnership(existingThread2, effectiveResourceId);
94
+ return {
95
+ threadId: existingThread2.id,
96
+ resourceId: effectiveResourceId ?? existingThread2.resourceId
97
+ };
98
+ }
99
+ if (!effectiveThreadId) {
100
+ if (!store) {
101
+ return null;
102
+ }
103
+ const threadId2 = randomUUID();
104
+ const createdThread2 = await memory.createThread({
105
+ threadId: threadId2,
106
+ resourceId: effectiveResourceId ?? threadId2
107
+ });
108
+ return {
109
+ threadId: createdThread2.id,
110
+ resourceId: createdThread2.resourceId
111
+ };
112
+ }
113
+ const threadId = effectiveThreadId;
114
+ const existingThread = await memory.getThreadById({ threadId });
115
+ if (existingThread) {
116
+ await validateThreadOwnership(existingThread, effectiveResourceId);
117
+ return {
118
+ threadId: existingThread.id,
119
+ resourceId: effectiveResourceId ?? existingThread.resourceId
120
+ };
121
+ }
122
+ if (!store) {
123
+ return null;
124
+ }
125
+ const resourceId = effectiveResourceId ?? threadId;
126
+ const createdThread = await memory.createThread({
127
+ threadId,
128
+ resourceId
129
+ });
130
+ return {
131
+ threadId: createdThread.id,
132
+ resourceId: createdThread.resourceId
133
+ };
134
+ }
135
+ function createExecutionMemory(threadContext) {
136
+ if (!threadContext) {
137
+ return void 0;
138
+ }
139
+ return {
140
+ memory: {
141
+ thread: threadContext.threadId,
142
+ resource: threadContext.resourceId
143
+ }
144
+ };
145
+ }
146
+ async function resolveResponseAgent({
147
+ mastra,
148
+ agentId,
149
+ previousResponseTurnRecord
150
+ }) {
151
+ const resolvedAgentId = agentId ?? previousResponseTurnRecord?.metadata.agentId;
152
+ if (!resolvedAgentId) {
153
+ throw new HTTPException(400, {
154
+ message: "Responses requests require an agent_id, or a previous_response_id from a stored agent-backed response"
155
+ });
156
+ }
157
+ if (!mastra) {
158
+ throw new HTTPException(500, { message: "Mastra instance is required for agent-backed responses" });
159
+ }
160
+ return getAgentFromSystem({ mastra, agentId: resolvedAgentId });
161
+ }
162
+ async function executeGenerate({
163
+ agent,
164
+ model,
165
+ instructions,
166
+ text,
167
+ providerOptions,
168
+ input,
169
+ requestContext,
170
+ abortSignal,
171
+ threadContext
172
+ }) {
173
+ const executionMemory = createExecutionMemory(threadContext);
174
+ const structuredOutput = createStructuredOutput(text);
175
+ const commonOptions = {
176
+ instructions,
177
+ requestContext,
178
+ abortSignal,
179
+ model,
180
+ structuredOutput,
181
+ providerOptions,
182
+ ...executionMemory ?? {}
183
+ };
184
+ const resolvedModel = await agent.getModel({ requestContext, modelConfig: model });
185
+ if (resolvedModel.specificationVersion === "v1") {
186
+ if (threadContext) {
187
+ return await agent.generateLegacy(input, {
188
+ instructions,
189
+ requestContext,
190
+ abortSignal,
191
+ model,
192
+ output: structuredOutput?.schema,
193
+ providerOptions,
194
+ resourceId: threadContext.resourceId,
195
+ threadId: threadContext.threadId
196
+ });
197
+ }
198
+ return await agent.generateLegacy(input, {
199
+ instructions,
200
+ requestContext,
201
+ abortSignal,
202
+ model,
203
+ output: structuredOutput?.schema,
204
+ providerOptions
205
+ });
206
+ }
207
+ return await agent.generate(input, commonOptions);
208
+ }
209
+ async function executeStream({
210
+ agent,
211
+ model,
212
+ instructions,
213
+ text,
214
+ providerOptions,
215
+ input,
216
+ requestContext,
217
+ abortSignal,
218
+ threadContext
219
+ }) {
220
+ const executionMemory = createExecutionMemory(threadContext);
221
+ const structuredOutput = createStructuredOutput(text);
222
+ const commonOptions = {
223
+ instructions,
224
+ requestContext,
225
+ abortSignal,
226
+ model,
227
+ structuredOutput,
228
+ providerOptions,
229
+ ...executionMemory ?? {}
230
+ };
231
+ const resolvedModel = await agent.getModel({ requestContext, modelConfig: model });
232
+ if (resolvedModel.specificationVersion === "v1") {
233
+ if (threadContext) {
234
+ return await agent.streamLegacy(input, {
235
+ instructions,
236
+ requestContext,
237
+ abortSignal,
238
+ model,
239
+ output: structuredOutput?.schema,
240
+ providerOptions,
241
+ resourceId: threadContext.resourceId,
242
+ threadId: threadContext.threadId
243
+ });
244
+ }
245
+ return await agent.streamLegacy(input, {
246
+ instructions,
247
+ requestContext,
248
+ abortSignal,
249
+ model,
250
+ output: structuredOutput?.schema,
251
+ providerOptions
252
+ });
253
+ }
254
+ return await agent.stream(input, commonOptions);
255
+ }
256
+ async function resolveUsage(result) {
257
+ return await (result.totalUsage ?? result.usage ?? null);
258
+ }
259
+ async function resolveProviderMetadata(result) {
260
+ return await (result.providerMetadata ?? void 0);
261
+ }
262
+ async function resolveFinishReason(result) {
263
+ return await result.finishReason ?? void 0;
264
+ }
265
+ async function resolveText(result) {
266
+ return await result.text ?? "";
267
+ }
268
+ async function resolveCompletedResponseState(result, fallbackText) {
269
+ const usage = await resolveUsage(result);
270
+ return {
271
+ completedAt: Math.floor(Date.now() / 1e3),
272
+ status: toResponseStatus(await resolveFinishReason(result)),
273
+ text: await resolveText(result) || fallbackText,
274
+ usage,
275
+ usageDetails: toResponseUsage(usage),
276
+ providerOptions: await resolveProviderMetadata(result)
277
+ };
278
+ }
279
+ async function storeCompletedResponse({
280
+ mastra,
281
+ didStore,
282
+ threadContext,
283
+ responseId,
284
+ metadata,
285
+ completedState,
286
+ messages
287
+ }) {
288
+ if (!didStore || !threadContext) {
289
+ return;
290
+ }
291
+ await persistResponseTurnRecord({
292
+ mastra,
293
+ responseId,
294
+ metadata: {
295
+ ...metadata,
296
+ completedAt: completedState.completedAt,
297
+ status: completedState.status,
298
+ usage: completedState.usageDetails,
299
+ providerOptions: completedState.providerOptions,
300
+ messageIds: []
301
+ },
302
+ threadContext,
303
+ messages
304
+ });
305
+ }
306
+ async function finalizeResponse({
307
+ mastra,
308
+ didStore,
309
+ threadContext,
310
+ result,
311
+ responseId,
312
+ createdAt,
313
+ model,
314
+ instructions,
315
+ previousResponseId,
316
+ conversationId,
317
+ configuredTools,
318
+ responseMetadata,
319
+ fallbackText
320
+ }) {
321
+ const completedState = await resolveCompletedResponseState(result, fallbackText);
322
+ const responseMessages = await resolveResponseTurnMessagesForStorage({
323
+ result,
324
+ responseId,
325
+ text: completedState.text,
326
+ threadContext
327
+ });
328
+ const response = buildCompletedResponse({
329
+ responseId,
330
+ outputMessageId: responseId,
331
+ model,
332
+ createdAt,
333
+ completedAt: completedState.completedAt,
334
+ status: completedState.status,
335
+ text: completedState.text,
336
+ usage: completedState.usage,
337
+ instructions,
338
+ textConfig: responseMetadata.text,
339
+ previousResponseId,
340
+ conversationId,
341
+ providerOptions: completedState.providerOptions,
342
+ tools: configuredTools,
343
+ messages: responseMessages,
344
+ store: didStore
345
+ });
346
+ await storeCompletedResponse({
347
+ mastra,
348
+ didStore,
349
+ threadContext,
350
+ responseId,
351
+ metadata: responseMetadata,
352
+ completedState,
353
+ messages: responseMessages
354
+ });
355
+ return { completedState, response, responseMessages };
356
+ }
357
+ async function prepareCreateResponseRequest({
358
+ body,
359
+ mastra,
360
+ requestContext
361
+ }) {
362
+ const previousResponseTurnRecord = body.previous_response_id ? await findResponseTurnRecord({ mastra, responseId: body.previous_response_id, requestContext }) : null;
363
+ if (body.previous_response_id && !previousResponseTurnRecord) {
364
+ throw new HTTPException(404, { message: `Stored response ${body.previous_response_id} was not found` });
365
+ }
366
+ const executionInput = mapResponseInputToExecutionMessages(body.input);
367
+ const agent = await resolveResponseAgent({
368
+ mastra,
369
+ agentId: body.agent_id,
370
+ previousResponseTurnRecord
371
+ });
372
+ const configuredTools = mapMastraToolsToResponseTools(
373
+ await Promise.resolve(agent.listTools({ requestContext }))
374
+ );
375
+ const responseId = createMessageId();
376
+ const createdAt = Math.floor(Date.now() / 1e3);
377
+ const shouldStore = body.store ?? false;
378
+ const threadContext = await resolveThreadExecutionContext({
379
+ agent,
380
+ store: shouldStore,
381
+ conversationId: body.conversation_id,
382
+ previousResponseTurnRecord,
383
+ requestContext
384
+ });
385
+ if (shouldStore && !threadContext) {
386
+ throw new HTTPException(400, {
387
+ message: "Stored responses require the target agent to have memory configured"
388
+ });
389
+ }
390
+ const didStore = shouldStore && Boolean(threadContext);
391
+ return {
392
+ agent,
393
+ configuredTools,
394
+ createdAt,
395
+ didStore,
396
+ executionInput,
397
+ previousResponseTurnRecord,
398
+ responseId,
399
+ responseMetadata: {
400
+ agentId: agent.id,
401
+ model: body.model,
402
+ createdAt,
403
+ instructions: body.instructions,
404
+ text: body.text,
405
+ previousResponseId: previousResponseTurnRecord?.message.id ?? body.previous_response_id,
406
+ tools: configuredTools,
407
+ store: didStore
408
+ },
409
+ threadContext
410
+ };
411
+ }
412
+ function createResponseEventStream({
413
+ body,
414
+ configuredTools,
415
+ createdAt,
416
+ didStore,
417
+ mastra,
418
+ previousResponseTurnRecord,
419
+ responseId,
420
+ responseMetadata,
421
+ streamResult,
422
+ threadContext
423
+ }) {
424
+ const createdResponse = buildInProgressResponse({
425
+ responseId,
426
+ model: body.model,
427
+ createdAt,
428
+ instructions: body.instructions,
429
+ textConfig: body.text,
430
+ previousResponseId: body.previous_response_id,
431
+ conversationId: threadContext?.threadId ?? body.conversation_id,
432
+ tools: configuredTools,
433
+ store: didStore
434
+ });
435
+ return new ReadableStream({
436
+ async start(controller) {
437
+ let sequenceNumber = 1;
438
+ const enqueueEvent = (eventName, payload) => {
439
+ controller.enqueue(
440
+ formatSseEvent(eventName, {
441
+ ...payload,
442
+ sequence_number: sequenceNumber++
443
+ })
444
+ );
445
+ };
446
+ enqueueEvent("response.created", {
447
+ type: "response.created",
448
+ response: createdResponse
449
+ });
450
+ enqueueEvent("response.in_progress", {
451
+ type: "response.in_progress",
452
+ response: createdResponse
453
+ });
454
+ enqueueEvent("response.output_item.added", {
455
+ type: "response.output_item.added",
456
+ output_index: 0,
457
+ item: {
458
+ id: responseId,
459
+ type: "message",
460
+ role: "assistant",
461
+ status: "in_progress",
462
+ content: []
463
+ }
464
+ });
465
+ enqueueEvent("response.content_part.added", {
466
+ type: "response.content_part.added",
467
+ output_index: 0,
468
+ content_index: 0,
469
+ item_id: responseId,
470
+ part: createOutputTextPart("")
471
+ });
472
+ let text = "";
473
+ const fullStream = await streamResult.fullStream;
474
+ const reader = fullStream.getReader();
475
+ try {
476
+ while (true) {
477
+ const { done, value } = await reader.read();
478
+ if (done) {
479
+ break;
480
+ }
481
+ const delta = extractTextDelta(value);
482
+ if (delta) {
483
+ text += delta;
484
+ enqueueEvent("response.output_text.delta", {
485
+ type: "response.output_text.delta",
486
+ output_index: 0,
487
+ content_index: 0,
488
+ item_id: responseId,
489
+ delta
490
+ });
491
+ }
492
+ }
493
+ const { completedState, response } = await finalizeResponse({
494
+ mastra,
495
+ didStore,
496
+ threadContext,
497
+ result: streamResult,
498
+ responseId,
499
+ createdAt,
500
+ model: body.model,
501
+ instructions: body.instructions,
502
+ previousResponseId: previousResponseTurnRecord?.message.id ?? body.previous_response_id,
503
+ conversationId: threadContext?.threadId ?? body.conversation_id,
504
+ configuredTools,
505
+ responseMetadata,
506
+ fallbackText: text
507
+ });
508
+ enqueueEvent("response.output_text.done", {
509
+ type: "response.output_text.done",
510
+ output_index: 0,
511
+ content_index: 0,
512
+ item_id: responseId,
513
+ text: completedState.text
514
+ });
515
+ const completedItem = getStreamedMessageOutputItem(response, responseId) ?? {
516
+ id: responseId,
517
+ type: "message",
518
+ role: "assistant",
519
+ status: "completed",
520
+ content: [createOutputTextPart(completedState.text)]
521
+ };
522
+ enqueueEvent("response.content_part.done", {
523
+ type: "response.content_part.done",
524
+ output_index: 0,
525
+ content_index: 0,
526
+ item_id: responseId,
527
+ part: createOutputTextPart(completedState.text)
528
+ });
529
+ enqueueEvent("response.output_item.done", {
530
+ type: "response.output_item.done",
531
+ output_index: 0,
532
+ item: completedItem
533
+ });
534
+ enqueueEvent("response.completed", {
535
+ type: "response.completed",
536
+ response
537
+ });
538
+ controller.close();
539
+ } catch (error) {
540
+ controller.error(error);
541
+ } finally {
542
+ reader.releaseLock();
543
+ }
544
+ }
545
+ });
546
+ }
547
+ var CREATE_RESPONSE_ROUTE = createRoute({
548
+ method: "POST",
549
+ path: "/v1/responses",
550
+ responseType: "datastream-response",
551
+ bodySchema: createResponseBodySchema,
552
+ responseSchema: responseObjectSchema,
553
+ summary: "Create a response",
554
+ description: "Creates a response through a Mastra-hosted Responses API-compatible route",
555
+ tags: ["Responses"],
556
+ requiresAuth: true,
557
+ requiresPermission: "agents:execute",
558
+ handler: async ({ mastra, requestContext, abortSignal, ...body }) => {
559
+ try {
560
+ const {
561
+ agent,
562
+ configuredTools,
563
+ createdAt,
564
+ didStore,
565
+ executionInput,
566
+ previousResponseTurnRecord,
567
+ responseId,
568
+ responseMetadata,
569
+ threadContext
570
+ } = await prepareCreateResponseRequest({ body, mastra, requestContext });
571
+ if (!body.stream) {
572
+ const result = await executeGenerate({
573
+ agent,
574
+ model: body.model,
575
+ instructions: body.instructions,
576
+ text: body.text,
577
+ providerOptions: body.providerOptions,
578
+ input: executionInput,
579
+ requestContext,
580
+ abortSignal,
581
+ threadContext
582
+ });
583
+ const { response } = await finalizeResponse({
584
+ mastra,
585
+ didStore,
586
+ threadContext,
587
+ result,
588
+ responseId,
589
+ createdAt,
590
+ model: body.model,
591
+ instructions: body.instructions,
592
+ previousResponseId: previousResponseTurnRecord?.message.id ?? body.previous_response_id,
593
+ conversationId: threadContext?.threadId ?? body.conversation_id,
594
+ configuredTools,
595
+ responseMetadata,
596
+ fallbackText: ""
597
+ });
598
+ return jsonResponse(response);
599
+ }
600
+ const streamResult = await executeStream({
601
+ agent,
602
+ model: body.model,
603
+ instructions: body.instructions,
604
+ text: body.text,
605
+ providerOptions: body.providerOptions,
606
+ input: executionInput,
607
+ requestContext,
608
+ abortSignal,
609
+ threadContext
610
+ });
611
+ const stream = createResponseEventStream({
612
+ body,
613
+ configuredTools,
614
+ createdAt,
615
+ didStore,
616
+ mastra,
617
+ previousResponseTurnRecord,
618
+ responseId,
619
+ responseMetadata,
620
+ streamResult,
621
+ threadContext
622
+ });
623
+ return new Response(stream, {
624
+ headers: {
625
+ "Content-Type": "text/event-stream; charset=utf-8",
626
+ "Cache-Control": "no-cache",
627
+ Connection: "keep-alive",
628
+ "X-Accel-Buffering": "no"
629
+ }
630
+ });
631
+ } catch (error) {
632
+ return handleError(error, "Error creating response");
633
+ }
634
+ }
635
+ });
636
+ var GET_RESPONSE_ROUTE = createRoute({
637
+ method: "GET",
638
+ path: "/v1/responses/:responseId",
639
+ responseType: "json",
640
+ pathParamSchema: responseIdPathParams,
641
+ responseSchema: responseObjectSchema,
642
+ summary: "Retrieve a stored response",
643
+ description: "Returns a previously stored response object",
644
+ tags: ["Responses"],
645
+ requiresAuth: true,
646
+ requiresPermission: "agents:read",
647
+ handler: async ({ mastra, requestContext, responseId }) => {
648
+ try {
649
+ const responseTurnRecord = await findResponseTurnRecord({ mastra, responseId, requestContext });
650
+ if (!responseTurnRecord) {
651
+ throw new HTTPException(404, { message: `Stored response ${responseId} was not found` });
652
+ }
653
+ return mapResponseTurnRecordToResponse(responseTurnRecord);
654
+ } catch (error) {
655
+ return handleError(error, "Error retrieving response");
656
+ }
657
+ }
658
+ });
659
+ var DELETE_RESPONSE_ROUTE = createRoute({
660
+ method: "DELETE",
661
+ path: "/v1/responses/:responseId",
662
+ responseType: "json",
663
+ pathParamSchema: responseIdPathParams,
664
+ responseSchema: deleteResponseSchema,
665
+ summary: "Delete a stored response",
666
+ description: "Deletes a stored response so it can no longer be retrieved or chained",
667
+ tags: ["Responses"],
668
+ requiresAuth: true,
669
+ requiresPermission: "agents:delete",
670
+ handler: async ({ mastra, requestContext, responseId }) => {
671
+ try {
672
+ const deleted = await deleteResponseTurnRecord({ mastra, responseId, requestContext });
673
+ if (!deleted) {
674
+ throw new HTTPException(404, { message: `Stored response ${responseId} was not found` });
675
+ }
676
+ const response = {
677
+ id: responseId,
678
+ object: "response",
679
+ deleted: true
680
+ };
681
+ return response;
682
+ } catch (error) {
683
+ return handleError(error, "Error deleting response");
684
+ }
685
+ }
686
+ });
687
+
688
+ export { CREATE_RESPONSE_ROUTE, DELETE_RESPONSE_ROUTE, GET_RESPONSE_ROUTE, responses_exports };
689
+ //# sourceMappingURL=chunk-NCW7IFFR.js.map
690
+ //# sourceMappingURL=chunk-NCW7IFFR.js.map