@mastra/client-js 0.0.0-transpile-packages-20250730132657 → 0.0.0-transpile-packages-20250731152758

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 (67) hide show
  1. package/.turbo/turbo-build.log +4 -0
  2. package/CHANGELOG.md +141 -3
  3. package/dist/adapters/agui.d.ts +23 -0
  4. package/dist/adapters/agui.d.ts.map +1 -0
  5. package/dist/client.d.ts +265 -0
  6. package/dist/client.d.ts.map +1 -0
  7. package/dist/example.d.ts +2 -0
  8. package/dist/example.d.ts.map +1 -0
  9. package/dist/index.cjs +44 -3
  10. package/dist/index.cjs.map +1 -0
  11. package/dist/index.d.ts +4 -1299
  12. package/dist/index.d.ts.map +1 -0
  13. package/dist/index.js +44 -3
  14. package/dist/index.js.map +1 -0
  15. package/dist/resources/a2a.d.ts +44 -0
  16. package/dist/resources/a2a.d.ts.map +1 -0
  17. package/dist/resources/agent.d.ts +112 -0
  18. package/dist/resources/agent.d.ts.map +1 -0
  19. package/dist/resources/base.d.ts +13 -0
  20. package/dist/resources/base.d.ts.map +1 -0
  21. package/dist/resources/index.d.ts +11 -0
  22. package/dist/resources/index.d.ts.map +1 -0
  23. package/dist/resources/legacy-workflow.d.ts +87 -0
  24. package/dist/resources/legacy-workflow.d.ts.map +1 -0
  25. package/dist/resources/mcp-tool.d.ts +27 -0
  26. package/dist/resources/mcp-tool.d.ts.map +1 -0
  27. package/dist/resources/memory-thread.d.ts +53 -0
  28. package/dist/resources/memory-thread.d.ts.map +1 -0
  29. package/dist/resources/network-memory-thread.d.ts +47 -0
  30. package/dist/resources/network-memory-thread.d.ts.map +1 -0
  31. package/dist/resources/network.d.ts +30 -0
  32. package/dist/resources/network.d.ts.map +1 -0
  33. package/dist/resources/tool.d.ts +23 -0
  34. package/dist/resources/tool.d.ts.map +1 -0
  35. package/dist/resources/vNextNetwork.d.ts +42 -0
  36. package/dist/resources/vNextNetwork.d.ts.map +1 -0
  37. package/dist/resources/vector.d.ts +48 -0
  38. package/dist/resources/vector.d.ts.map +1 -0
  39. package/dist/resources/workflow.d.ts +154 -0
  40. package/dist/resources/workflow.d.ts.map +1 -0
  41. package/dist/types.d.ts +422 -0
  42. package/dist/types.d.ts.map +1 -0
  43. package/dist/utils/index.d.ts +3 -0
  44. package/dist/utils/index.d.ts.map +1 -0
  45. package/dist/utils/process-client-tools.d.ts +3 -0
  46. package/dist/utils/process-client-tools.d.ts.map +1 -0
  47. package/dist/utils/zod-to-json-schema.d.ts +105 -0
  48. package/dist/utils/zod-to-json-schema.d.ts.map +1 -0
  49. package/integration-tests/agui-adapter.test.ts +122 -0
  50. package/integration-tests/package.json +18 -0
  51. package/integration-tests/src/mastra/index.ts +35 -0
  52. package/integration-tests/vitest.config.ts +9 -0
  53. package/package.json +10 -7
  54. package/src/adapters/agui.test.ts +145 -3
  55. package/src/index.test.ts +108 -0
  56. package/src/index.ts +1 -0
  57. package/src/resources/agent.ts +13 -3
  58. package/src/resources/memory-thread.test.ts +285 -0
  59. package/src/resources/memory-thread.ts +18 -0
  60. package/src/resources/network-memory-thread.test.ts +269 -0
  61. package/src/resources/network-memory-thread.ts +18 -0
  62. package/src/types.ts +7 -7
  63. package/src/v2-messages.test.ts +180 -0
  64. package/tsconfig.build.json +9 -0
  65. package/tsconfig.json +1 -1
  66. package/tsup.config.ts +22 -0
  67. package/dist/index.d.cts +0 -1299
@@ -0,0 +1,285 @@
1
+ import { describe, expect, beforeEach, it, vi } from 'vitest';
2
+ import { MemoryThread } from './memory-thread';
3
+ import type { ClientOptions } from '../types';
4
+
5
+ // Mock fetch globally
6
+ global.fetch = vi.fn();
7
+
8
+ describe('MemoryThread', () => {
9
+ let thread: MemoryThread;
10
+ const clientOptions: ClientOptions = {
11
+ baseUrl: 'http://localhost:4111',
12
+ headers: {
13
+ Authorization: 'Bearer test-key',
14
+ },
15
+ };
16
+ const threadId = 'test-thread-id';
17
+ const agentId = 'test-agent-id';
18
+
19
+ beforeEach(() => {
20
+ vi.clearAllMocks();
21
+ thread = new MemoryThread(clientOptions, threadId, agentId);
22
+ });
23
+
24
+ const mockFetchResponse = (data: any) => {
25
+ (global.fetch as any).mockResolvedValueOnce({
26
+ ok: true,
27
+ status: 200,
28
+ json: async () => data,
29
+ headers: new Headers({
30
+ 'content-type': 'application/json',
31
+ }),
32
+ });
33
+ };
34
+
35
+ describe('get', () => {
36
+ it('should retrieve thread details', async () => {
37
+ const mockThread = {
38
+ id: threadId,
39
+ title: 'Test Thread',
40
+ metadata: { test: true },
41
+ createdAt: new Date().toISOString(),
42
+ updatedAt: new Date().toISOString(),
43
+ };
44
+
45
+ mockFetchResponse(mockThread);
46
+
47
+ const result = await thread.get();
48
+
49
+ expect(global.fetch).toHaveBeenCalledWith(
50
+ `http://localhost:4111/api/memory/threads/${threadId}?agentId=${agentId}`,
51
+ expect.objectContaining({
52
+ headers: expect.objectContaining({
53
+ Authorization: 'Bearer test-key',
54
+ }),
55
+ }),
56
+ );
57
+ expect(result).toEqual(mockThread);
58
+ });
59
+ });
60
+
61
+ describe('update', () => {
62
+ it('should update thread properties', async () => {
63
+ const updateParams = {
64
+ title: 'Updated Title',
65
+ metadata: { updated: true },
66
+ resourceid: 'resource-1',
67
+ };
68
+
69
+ const mockUpdatedThread = {
70
+ id: threadId,
71
+ ...updateParams,
72
+ createdAt: new Date().toISOString(),
73
+ updatedAt: new Date().toISOString(),
74
+ };
75
+
76
+ mockFetchResponse(mockUpdatedThread);
77
+
78
+ const result = await thread.update(updateParams);
79
+
80
+ expect(global.fetch).toHaveBeenCalledWith(
81
+ `http://localhost:4111/api/memory/threads/${threadId}?agentId=${agentId}`,
82
+ expect.objectContaining({
83
+ method: 'PATCH',
84
+ headers: expect.objectContaining({
85
+ Authorization: 'Bearer test-key',
86
+ }),
87
+ body: JSON.stringify(updateParams),
88
+ }),
89
+ );
90
+ expect(result).toEqual(mockUpdatedThread);
91
+ });
92
+ });
93
+
94
+ describe('delete', () => {
95
+ it('should delete the thread', async () => {
96
+ const mockResponse = { result: 'Thread deleted' };
97
+ mockFetchResponse(mockResponse);
98
+
99
+ const result = await thread.delete();
100
+
101
+ expect(global.fetch).toHaveBeenCalledWith(
102
+ `http://localhost:4111/api/memory/threads/${threadId}?agentId=${agentId}`,
103
+ expect.objectContaining({
104
+ method: 'DELETE',
105
+ headers: expect.objectContaining({
106
+ Authorization: 'Bearer test-key',
107
+ }),
108
+ }),
109
+ );
110
+ expect(result).toEqual(mockResponse);
111
+ });
112
+ });
113
+
114
+ describe('getMessages', () => {
115
+ it('should retrieve thread messages', async () => {
116
+ const mockMessages = {
117
+ messages: [
118
+ { id: 'msg-1', content: 'Hello', role: 'user' },
119
+ { id: 'msg-2', content: 'Hi there', role: 'assistant' },
120
+ ],
121
+ uiMessages: [
122
+ { id: 'msg-1', content: 'Hello', role: 'user' },
123
+ { id: 'msg-2', content: 'Hi there', role: 'assistant' },
124
+ ],
125
+ };
126
+
127
+ mockFetchResponse(mockMessages);
128
+
129
+ const result = await thread.getMessages();
130
+
131
+ expect(global.fetch).toHaveBeenCalledWith(
132
+ `http://localhost:4111/api/memory/threads/${threadId}/messages?agentId=${agentId}`,
133
+ expect.objectContaining({
134
+ headers: expect.objectContaining({
135
+ Authorization: 'Bearer test-key',
136
+ }),
137
+ }),
138
+ );
139
+ expect(result).toEqual(mockMessages);
140
+ });
141
+
142
+ it('should retrieve thread messages with limit', async () => {
143
+ const mockMessages = {
144
+ messages: [{ id: 'msg-1', content: 'Hello', role: 'user' }],
145
+ uiMessages: [{ id: 'msg-1', content: 'Hello', role: 'user' }],
146
+ };
147
+
148
+ mockFetchResponse(mockMessages);
149
+
150
+ const result = await thread.getMessages({ limit: 5 });
151
+
152
+ expect(global.fetch).toHaveBeenCalledWith(
153
+ `http://localhost:4111/api/memory/threads/${threadId}/messages?agentId=${agentId}&limit=5`,
154
+ expect.objectContaining({
155
+ headers: expect.objectContaining({
156
+ Authorization: 'Bearer test-key',
157
+ }),
158
+ }),
159
+ );
160
+ expect(result).toEqual(mockMessages);
161
+ });
162
+ });
163
+
164
+ describe('deleteMessages', () => {
165
+ it('should delete a single message by string ID', async () => {
166
+ const messageId = 'test-message-id';
167
+ const mockResponse = { success: true, message: '1 message deleted successfully' };
168
+
169
+ mockFetchResponse(mockResponse);
170
+
171
+ const result = await thread.deleteMessages(messageId);
172
+
173
+ expect(global.fetch).toHaveBeenCalledWith(
174
+ `http://localhost:4111/api/memory/messages/delete?agentId=${agentId}`,
175
+ expect.objectContaining({
176
+ method: 'POST',
177
+ headers: expect.objectContaining({
178
+ 'content-type': 'application/json',
179
+ Authorization: 'Bearer test-key',
180
+ }),
181
+ body: JSON.stringify({ messageIds: messageId }),
182
+ }),
183
+ );
184
+ expect(result).toEqual(mockResponse);
185
+ });
186
+
187
+ it('should delete multiple messages by array of string IDs', async () => {
188
+ const messageIds = ['msg-1', 'msg-2', 'msg-3'];
189
+ const mockResponse = { success: true, message: '3 messages deleted successfully' };
190
+
191
+ mockFetchResponse(mockResponse);
192
+
193
+ const result = await thread.deleteMessages(messageIds);
194
+
195
+ expect(global.fetch).toHaveBeenCalledWith(
196
+ `http://localhost:4111/api/memory/messages/delete?agentId=${agentId}`,
197
+ expect.objectContaining({
198
+ method: 'POST',
199
+ headers: expect.objectContaining({
200
+ 'content-type': 'application/json',
201
+ Authorization: 'Bearer test-key',
202
+ }),
203
+ body: JSON.stringify({ messageIds }),
204
+ }),
205
+ );
206
+ expect(result).toEqual(mockResponse);
207
+ });
208
+
209
+ it('should delete a message by object with id property', async () => {
210
+ const messageObj = { id: 'test-message-id' };
211
+ const mockResponse = { success: true, message: '1 message deleted successfully' };
212
+
213
+ mockFetchResponse(mockResponse);
214
+
215
+ const result = await thread.deleteMessages(messageObj);
216
+
217
+ expect(global.fetch).toHaveBeenCalledWith(
218
+ `http://localhost:4111/api/memory/messages/delete?agentId=${agentId}`,
219
+ expect.objectContaining({
220
+ method: 'POST',
221
+ headers: expect.objectContaining({
222
+ 'content-type': 'application/json',
223
+ Authorization: 'Bearer test-key',
224
+ }),
225
+ body: JSON.stringify({ messageIds: messageObj }),
226
+ }),
227
+ );
228
+ expect(result).toEqual(mockResponse);
229
+ });
230
+
231
+ it('should delete messages by array of objects', async () => {
232
+ const messageObjs = [{ id: 'msg-1' }, { id: 'msg-2' }];
233
+ const mockResponse = { success: true, message: '2 messages deleted successfully' };
234
+
235
+ mockFetchResponse(mockResponse);
236
+
237
+ const result = await thread.deleteMessages(messageObjs);
238
+
239
+ expect(global.fetch).toHaveBeenCalledWith(
240
+ `http://localhost:4111/api/memory/messages/delete?agentId=${agentId}`,
241
+ expect.objectContaining({
242
+ method: 'POST',
243
+ headers: expect.objectContaining({
244
+ 'content-type': 'application/json',
245
+ Authorization: 'Bearer test-key',
246
+ }),
247
+ body: JSON.stringify({ messageIds: messageObjs }),
248
+ }),
249
+ );
250
+ expect(result).toEqual(mockResponse);
251
+ });
252
+
253
+ it('should handle empty array', async () => {
254
+ const messageIds: string[] = [];
255
+
256
+ (global.fetch as any).mockResolvedValueOnce({
257
+ ok: false,
258
+ status: 400,
259
+ statusText: 'Bad Request',
260
+ json: async () => ({ error: 'messageIds array cannot be empty' }),
261
+ headers: new Headers({
262
+ 'content-type': 'application/json',
263
+ }),
264
+ });
265
+
266
+ await expect(thread.deleteMessages(messageIds)).rejects.toThrow();
267
+ });
268
+
269
+ it('should handle bulk delete errors', async () => {
270
+ const messageIds = ['msg-1', 'msg-2'];
271
+
272
+ (global.fetch as any).mockResolvedValueOnce({
273
+ ok: false,
274
+ status: 500,
275
+ statusText: 'Internal Server Error',
276
+ json: async () => ({ error: 'Database error' }),
277
+ headers: new Headers({
278
+ 'content-type': 'application/json',
279
+ }),
280
+ });
281
+
282
+ await expect(thread.deleteMessages(messageIds)).rejects.toThrow();
283
+ });
284
+ });
285
+ });
@@ -78,4 +78,22 @@ export class MemoryThread extends BaseResource {
78
78
  });
79
79
  return this.request(`/api/memory/threads/${this.threadId}/messages/paginated?${query.toString()}`);
80
80
  }
81
+
82
+ /**
83
+ * Deletes one or more messages from the thread
84
+ * @param messageIds - Can be a single message ID (string), array of message IDs,
85
+ * message object with id property, or array of message objects
86
+ * @returns Promise containing deletion result
87
+ */
88
+ deleteMessages(
89
+ messageIds: string | string[] | { id: string } | { id: string }[],
90
+ ): Promise<{ success: boolean; message: string }> {
91
+ const query = new URLSearchParams({
92
+ agentId: this.agentId,
93
+ });
94
+ return this.request(`/api/memory/messages/delete?${query.toString()}`, {
95
+ method: 'POST',
96
+ body: { messageIds },
97
+ });
98
+ }
81
99
  }
@@ -0,0 +1,269 @@
1
+ import { describe, expect, beforeEach, it, vi } from 'vitest';
2
+ import { NetworkMemoryThread } from './network-memory-thread';
3
+ import type { ClientOptions } from '../types';
4
+
5
+ // Mock fetch globally
6
+ global.fetch = vi.fn();
7
+
8
+ describe('NetworkMemoryThread', () => {
9
+ let thread: NetworkMemoryThread;
10
+ const clientOptions: ClientOptions = {
11
+ baseUrl: 'http://localhost:4111',
12
+ headers: {
13
+ Authorization: 'Bearer test-key',
14
+ },
15
+ };
16
+ const threadId = 'test-thread-id';
17
+ const networkId = 'test-network-id';
18
+
19
+ beforeEach(() => {
20
+ vi.clearAllMocks();
21
+ thread = new NetworkMemoryThread(clientOptions, threadId, networkId);
22
+ });
23
+
24
+ const mockFetchResponse = (data: any) => {
25
+ (global.fetch as any).mockResolvedValueOnce({
26
+ ok: true,
27
+ status: 200,
28
+ json: async () => data,
29
+ headers: new Headers({
30
+ 'content-type': 'application/json',
31
+ }),
32
+ });
33
+ };
34
+
35
+ describe('get', () => {
36
+ it('should retrieve thread details', async () => {
37
+ const mockThread = {
38
+ id: threadId,
39
+ title: 'Test Thread',
40
+ metadata: { test: true },
41
+ createdAt: new Date().toISOString(),
42
+ updatedAt: new Date().toISOString(),
43
+ };
44
+
45
+ mockFetchResponse(mockThread);
46
+
47
+ const result = await thread.get();
48
+
49
+ expect(global.fetch).toHaveBeenCalledWith(
50
+ `http://localhost:4111/api/memory/network/threads/${threadId}?networkId=${networkId}`,
51
+ expect.objectContaining({
52
+ headers: expect.objectContaining({
53
+ Authorization: 'Bearer test-key',
54
+ }),
55
+ }),
56
+ );
57
+ expect(result).toEqual(mockThread);
58
+ });
59
+ });
60
+
61
+ describe('update', () => {
62
+ it('should update thread properties', async () => {
63
+ const updateParams = {
64
+ title: 'Updated Title',
65
+ metadata: { updated: true },
66
+ resourceid: 'resource-1',
67
+ };
68
+
69
+ const mockUpdatedThread = {
70
+ id: threadId,
71
+ ...updateParams,
72
+ createdAt: new Date().toISOString(),
73
+ updatedAt: new Date().toISOString(),
74
+ };
75
+
76
+ mockFetchResponse(mockUpdatedThread);
77
+
78
+ const result = await thread.update(updateParams);
79
+
80
+ expect(global.fetch).toHaveBeenCalledWith(
81
+ `http://localhost:4111/api/memory/network/threads/${threadId}?networkId=${networkId}`,
82
+ expect.objectContaining({
83
+ method: 'PATCH',
84
+ headers: expect.objectContaining({
85
+ Authorization: 'Bearer test-key',
86
+ }),
87
+ body: JSON.stringify(updateParams),
88
+ }),
89
+ );
90
+ expect(result).toEqual(mockUpdatedThread);
91
+ });
92
+ });
93
+
94
+ describe('delete', () => {
95
+ it('should delete the thread', async () => {
96
+ const mockResponse = { result: 'Thread deleted' };
97
+ mockFetchResponse(mockResponse);
98
+
99
+ const result = await thread.delete();
100
+
101
+ expect(global.fetch).toHaveBeenCalledWith(
102
+ `http://localhost:4111/api/memory/network/threads/${threadId}?networkId=${networkId}`,
103
+ expect.objectContaining({
104
+ method: 'DELETE',
105
+ headers: expect.objectContaining({
106
+ Authorization: 'Bearer test-key',
107
+ }),
108
+ }),
109
+ );
110
+ expect(result).toEqual(mockResponse);
111
+ });
112
+ });
113
+
114
+ describe('getMessages', () => {
115
+ it('should retrieve thread messages', async () => {
116
+ const mockMessages = {
117
+ messages: [
118
+ { id: 'msg-1', content: 'Hello', role: 'user' },
119
+ { id: 'msg-2', content: 'Hi there', role: 'assistant' },
120
+ ],
121
+ uiMessages: [
122
+ { id: 'msg-1', content: 'Hello', role: 'user' },
123
+ { id: 'msg-2', content: 'Hi there', role: 'assistant' },
124
+ ],
125
+ };
126
+
127
+ mockFetchResponse(mockMessages);
128
+
129
+ const result = await thread.getMessages();
130
+
131
+ expect(global.fetch).toHaveBeenCalledWith(
132
+ `http://localhost:4111/api/memory/network/threads/${threadId}/messages?networkId=${networkId}`,
133
+ expect.objectContaining({
134
+ headers: expect.objectContaining({
135
+ Authorization: 'Bearer test-key',
136
+ }),
137
+ }),
138
+ );
139
+ expect(result).toEqual(mockMessages);
140
+ });
141
+
142
+ it('should retrieve thread messages with limit', async () => {
143
+ const mockMessages = {
144
+ messages: [{ id: 'msg-1', content: 'Hello', role: 'user' }],
145
+ uiMessages: [{ id: 'msg-1', content: 'Hello', role: 'user' }],
146
+ };
147
+
148
+ mockFetchResponse(mockMessages);
149
+
150
+ const result = await thread.getMessages({ limit: 5 });
151
+
152
+ expect(global.fetch).toHaveBeenCalledWith(
153
+ `http://localhost:4111/api/memory/network/threads/${threadId}/messages?networkId=${networkId}&limit=5`,
154
+ expect.objectContaining({
155
+ headers: expect.objectContaining({
156
+ Authorization: 'Bearer test-key',
157
+ }),
158
+ }),
159
+ );
160
+ expect(result).toEqual(mockMessages);
161
+ });
162
+ });
163
+
164
+ describe('deleteMessages', () => {
165
+ it('should delete a single message by string ID', async () => {
166
+ const messageId = 'test-message-id';
167
+ const mockResponse = { success: true, message: '1 message deleted successfully' };
168
+
169
+ mockFetchResponse(mockResponse);
170
+
171
+ const result = await thread.deleteMessages(messageId);
172
+
173
+ expect(global.fetch).toHaveBeenCalledWith(
174
+ `http://localhost:4111/api/memory/network/messages/delete?networkId=${networkId}`,
175
+ expect.objectContaining({
176
+ method: 'POST',
177
+ headers: expect.objectContaining({
178
+ 'content-type': 'application/json',
179
+ Authorization: 'Bearer test-key',
180
+ }),
181
+ body: JSON.stringify({ messageIds: messageId }),
182
+ }),
183
+ );
184
+ expect(result).toEqual(mockResponse);
185
+ });
186
+
187
+ it('should delete multiple messages by array of string IDs', async () => {
188
+ const messageIds = ['msg-1', 'msg-2', 'msg-3'];
189
+ const mockResponse = { success: true, message: '3 messages deleted successfully' };
190
+
191
+ mockFetchResponse(mockResponse);
192
+
193
+ const result = await thread.deleteMessages(messageIds);
194
+
195
+ expect(global.fetch).toHaveBeenCalledWith(
196
+ `http://localhost:4111/api/memory/network/messages/delete?networkId=${networkId}`,
197
+ expect.objectContaining({
198
+ method: 'POST',
199
+ headers: expect.objectContaining({
200
+ 'content-type': 'application/json',
201
+ Authorization: 'Bearer test-key',
202
+ }),
203
+ body: JSON.stringify({ messageIds }),
204
+ }),
205
+ );
206
+ expect(result).toEqual(mockResponse);
207
+ });
208
+
209
+ it('should delete a message by object with id property', async () => {
210
+ const messageObj = { id: 'test-message-id' };
211
+ const mockResponse = { success: true, message: '1 message deleted successfully' };
212
+
213
+ mockFetchResponse(mockResponse);
214
+
215
+ const result = await thread.deleteMessages(messageObj);
216
+
217
+ expect(global.fetch).toHaveBeenCalledWith(
218
+ `http://localhost:4111/api/memory/network/messages/delete?networkId=${networkId}`,
219
+ expect.objectContaining({
220
+ method: 'POST',
221
+ headers: expect.objectContaining({
222
+ 'content-type': 'application/json',
223
+ Authorization: 'Bearer test-key',
224
+ }),
225
+ body: JSON.stringify({ messageIds: messageObj }),
226
+ }),
227
+ );
228
+ expect(result).toEqual(mockResponse);
229
+ });
230
+
231
+ it('should delete messages by array of objects', async () => {
232
+ const messageObjs = [{ id: 'msg-1' }, { id: 'msg-2' }];
233
+ const mockResponse = { success: true, message: '2 messages deleted successfully' };
234
+
235
+ mockFetchResponse(mockResponse);
236
+
237
+ const result = await thread.deleteMessages(messageObjs);
238
+
239
+ expect(global.fetch).toHaveBeenCalledWith(
240
+ `http://localhost:4111/api/memory/network/messages/delete?networkId=${networkId}`,
241
+ expect.objectContaining({
242
+ method: 'POST',
243
+ headers: expect.objectContaining({
244
+ 'content-type': 'application/json',
245
+ Authorization: 'Bearer test-key',
246
+ }),
247
+ body: JSON.stringify({ messageIds: messageObjs }),
248
+ }),
249
+ );
250
+ expect(result).toEqual(mockResponse);
251
+ });
252
+
253
+ it('should handle delete messages errors', async () => {
254
+ const messageId = 'non-existent-id';
255
+
256
+ (global.fetch as any).mockResolvedValueOnce({
257
+ ok: false,
258
+ status: 404,
259
+ statusText: 'Not Found',
260
+ json: async () => ({ error: 'Message not found' }),
261
+ headers: new Headers({
262
+ 'content-type': 'application/json',
263
+ }),
264
+ });
265
+
266
+ await expect(thread.deleteMessages(messageId)).rejects.toThrow();
267
+ });
268
+ });
269
+ });
@@ -60,4 +60,22 @@ export class NetworkMemoryThread extends BaseResource {
60
60
  });
61
61
  return this.request(`/api/memory/network/threads/${this.threadId}/messages?${query.toString()}`);
62
62
  }
63
+
64
+ /**
65
+ * Deletes one or more messages from the thread
66
+ * @param messageIds - Can be a single message ID (string), array of message IDs,
67
+ * message object with id property, or array of message objects
68
+ * @returns Promise containing deletion result
69
+ */
70
+ deleteMessages(
71
+ messageIds: string | string[] | { id: string } | { id: string }[],
72
+ ): Promise<{ success: boolean; message: string }> {
73
+ const query = new URLSearchParams({
74
+ networkId: this.networkId,
75
+ });
76
+ return this.request(`/api/memory/network/messages/delete?${query.toString()}`, {
77
+ method: 'POST',
78
+ body: { messageIds },
79
+ });
80
+ }
63
81
  }
package/src/types.ts CHANGED
@@ -11,7 +11,7 @@ import type {
11
11
  PaginationInfo,
12
12
  MastraMessageV2,
13
13
  } from '@mastra/core';
14
- import type { AgentGenerateOptions, AgentStreamOptions, ToolsInput } from '@mastra/core/agent';
14
+ import type { AgentGenerateOptions, AgentStreamOptions, ToolsInput, UIMessageWithMetadata } from '@mastra/core/agent';
15
15
  import type { BaseLogMessage, LogLevel } from '@mastra/core/logger';
16
16
 
17
17
  import type { MCPToolType, ServerInfo } from '@mastra/core/mcp';
@@ -70,7 +70,7 @@ export interface GetAgentResponse {
70
70
  }
71
71
 
72
72
  export type GenerateParams<T extends JSONSchema7 | ZodSchema | undefined = undefined> = {
73
- messages: string | string[] | CoreMessage[] | AiMessageType[];
73
+ messages: string | string[] | CoreMessage[] | AiMessageType[] | UIMessageWithMetadata[];
74
74
  output?: T;
75
75
  experimental_output?: T;
76
76
  runtimeContext?: RuntimeContext | Record<string, any>;
@@ -80,7 +80,7 @@ export type GenerateParams<T extends JSONSchema7 | ZodSchema | undefined = undef
80
80
  >;
81
81
 
82
82
  export type StreamParams<T extends JSONSchema7 | ZodSchema | undefined = undefined> = {
83
- messages: string | string[] | CoreMessage[] | AiMessageType[];
83
+ messages: string | string[] | CoreMessage[] | AiMessageType[] | UIMessageWithMetadata[];
84
84
  output?: T;
85
85
  experimental_output?: T;
86
86
  runtimeContext?: RuntimeContext | Record<string, any>;
@@ -198,16 +198,16 @@ export interface GetVectorIndexResponse {
198
198
  }
199
199
 
200
200
  export interface SaveMessageToMemoryParams {
201
- messages: MastraMessageV1[];
201
+ messages: (MastraMessageV1 | MastraMessageV2)[];
202
202
  agentId: string;
203
203
  }
204
204
 
205
205
  export interface SaveNetworkMessageToMemoryParams {
206
- messages: MastraMessageV1[];
206
+ messages: (MastraMessageV1 | MastraMessageV2)[];
207
207
  networkId: string;
208
208
  }
209
209
 
210
- export type SaveMessageToMemoryResponse = MastraMessageV1[];
210
+ export type SaveMessageToMemoryResponse = (MastraMessageV1 | MastraMessageV2)[];
211
211
 
212
212
  export interface CreateMemoryThreadParams {
213
213
  title?: string;
@@ -475,7 +475,7 @@ export interface GetScoresByEntityIdParams {
475
475
  }
476
476
 
477
477
  export interface SaveScoreParams {
478
- score: ScoreRowData;
478
+ score: Omit<ScoreRowData, 'id' | 'createdAt' | 'updatedAt'>;
479
479
  }
480
480
 
481
481
  export interface GetScoresResponse {