@mastra/client-js 0.0.0-mcp-server-deploy-20250507160341 → 0.0.0-memory-system-message-error-20250813233316

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 (84) hide show
  1. package/CHANGELOG.md +1278 -2
  2. package/LICENSE.md +11 -42
  3. package/README.md +2 -1
  4. package/dist/adapters/agui.d.ts +23 -0
  5. package/dist/adapters/agui.d.ts.map +1 -0
  6. package/dist/client.d.ts +270 -0
  7. package/dist/client.d.ts.map +1 -0
  8. package/dist/example.d.ts +2 -0
  9. package/dist/example.d.ts.map +1 -0
  10. package/dist/index.cjs +1607 -152
  11. package/dist/index.cjs.map +1 -0
  12. package/dist/index.d.ts +4 -760
  13. package/dist/index.d.ts.map +1 -0
  14. package/dist/index.js +1606 -155
  15. package/dist/index.js.map +1 -0
  16. package/dist/resources/a2a.d.ts +41 -0
  17. package/dist/resources/a2a.d.ts.map +1 -0
  18. package/dist/resources/agent.d.ts +123 -0
  19. package/dist/resources/agent.d.ts.map +1 -0
  20. package/dist/resources/base.d.ts +13 -0
  21. package/dist/resources/base.d.ts.map +1 -0
  22. package/dist/resources/index.d.ts +11 -0
  23. package/dist/resources/index.d.ts.map +1 -0
  24. package/dist/resources/legacy-workflow.d.ts +87 -0
  25. package/dist/resources/legacy-workflow.d.ts.map +1 -0
  26. package/dist/resources/mcp-tool.d.ts +27 -0
  27. package/dist/resources/mcp-tool.d.ts.map +1 -0
  28. package/dist/resources/memory-thread.d.ts +53 -0
  29. package/dist/resources/memory-thread.d.ts.map +1 -0
  30. package/dist/resources/network-memory-thread.d.ts +47 -0
  31. package/dist/resources/network-memory-thread.d.ts.map +1 -0
  32. package/dist/resources/network.d.ts +30 -0
  33. package/dist/resources/network.d.ts.map +1 -0
  34. package/dist/resources/tool.d.ts +23 -0
  35. package/dist/resources/tool.d.ts.map +1 -0
  36. package/dist/resources/vNextNetwork.d.ts +42 -0
  37. package/dist/resources/vNextNetwork.d.ts.map +1 -0
  38. package/dist/resources/vector.d.ts +48 -0
  39. package/dist/resources/vector.d.ts.map +1 -0
  40. package/dist/resources/workflow.d.ts +154 -0
  41. package/dist/resources/workflow.d.ts.map +1 -0
  42. package/dist/types.d.ts +422 -0
  43. package/dist/types.d.ts.map +1 -0
  44. package/dist/utils/index.d.ts +3 -0
  45. package/dist/utils/index.d.ts.map +1 -0
  46. package/dist/utils/process-client-tools.d.ts +3 -0
  47. package/dist/utils/process-client-tools.d.ts.map +1 -0
  48. package/dist/utils/zod-to-json-schema.d.ts +105 -0
  49. package/dist/utils/zod-to-json-schema.d.ts.map +1 -0
  50. package/integration-tests/agui-adapter.test.ts +122 -0
  51. package/integration-tests/package.json +18 -0
  52. package/integration-tests/src/mastra/index.ts +35 -0
  53. package/integration-tests/vitest.config.ts +9 -0
  54. package/package.json +32 -19
  55. package/src/adapters/agui.test.ts +322 -0
  56. package/src/adapters/agui.ts +257 -0
  57. package/src/client.ts +398 -33
  58. package/src/example.ts +59 -29
  59. package/src/index.test.ts +522 -6
  60. package/src/index.ts +1 -0
  61. package/src/resources/a2a.ts +98 -0
  62. package/src/resources/agent.ts +641 -48
  63. package/src/resources/base.ts +7 -1
  64. package/src/resources/index.ts +4 -3
  65. package/src/resources/{vnext-workflow.ts → legacy-workflow.ts} +124 -139
  66. package/src/resources/mcp-tool.ts +48 -0
  67. package/src/resources/memory-thread.test.ts +285 -0
  68. package/src/resources/memory-thread.ts +49 -3
  69. package/src/resources/network-memory-thread.test.ts +269 -0
  70. package/src/resources/network-memory-thread.ts +81 -0
  71. package/src/resources/network.ts +10 -16
  72. package/src/resources/tool.ts +9 -2
  73. package/src/resources/vNextNetwork.ts +194 -0
  74. package/src/resources/workflow.ts +255 -96
  75. package/src/types.ts +258 -29
  76. package/src/utils/index.ts +11 -0
  77. package/src/utils/process-client-tools.ts +32 -0
  78. package/src/utils/zod-to-json-schema.ts +10 -0
  79. package/src/v2-messages.test.ts +180 -0
  80. package/tsconfig.build.json +9 -0
  81. package/tsconfig.json +1 -1
  82. package/tsup.config.ts +17 -0
  83. package/dist/index.d.cts +0 -760
  84. package/src/resources/mcp.ts +0 -22
package/dist/index.js CHANGED
@@ -1,8 +1,244 @@
1
- import { processDataStream } from '@ai-sdk/ui-utils';
1
+ import { AbstractAgent, EventType } from '@ag-ui/client';
2
+ import { Observable } from 'rxjs';
3
+ import { processDataStream, parsePartialJson } from '@ai-sdk/ui-utils';
2
4
  import { ZodSchema } from 'zod';
3
- import { zodToJsonSchema } from 'zod-to-json-schema';
5
+ import originalZodToJsonSchema from 'zod-to-json-schema';
6
+ import { isVercelTool } from '@mastra/core/tools/is-vercel-tool';
7
+ import { v4 } from '@lukeed/uuid';
8
+ import { RuntimeContext } from '@mastra/core/runtime-context';
4
9
 
5
- // src/resources/agent.ts
10
+ // src/adapters/agui.ts
11
+ var AGUIAdapter = class extends AbstractAgent {
12
+ agent;
13
+ resourceId;
14
+ constructor({ agent, agentId, resourceId, ...rest }) {
15
+ super({
16
+ agentId,
17
+ ...rest
18
+ });
19
+ this.agent = agent;
20
+ this.resourceId = resourceId;
21
+ }
22
+ run(input) {
23
+ return new Observable((subscriber) => {
24
+ const convertedMessages = convertMessagesToMastraMessages(input.messages);
25
+ subscriber.next({
26
+ type: EventType.RUN_STARTED,
27
+ threadId: input.threadId,
28
+ runId: input.runId
29
+ });
30
+ this.agent.stream({
31
+ threadId: input.threadId,
32
+ resourceId: this.resourceId ?? "",
33
+ runId: input.runId,
34
+ messages: convertedMessages,
35
+ clientTools: input.tools.reduce(
36
+ (acc, tool) => {
37
+ acc[tool.name] = {
38
+ id: tool.name,
39
+ description: tool.description,
40
+ inputSchema: tool.parameters
41
+ };
42
+ return acc;
43
+ },
44
+ {}
45
+ )
46
+ }).then((response) => {
47
+ let currentMessageId = void 0;
48
+ let isInTextMessage = false;
49
+ return response.processDataStream({
50
+ onTextPart: (text) => {
51
+ if (currentMessageId === void 0) {
52
+ currentMessageId = generateUUID();
53
+ const message2 = {
54
+ type: EventType.TEXT_MESSAGE_START,
55
+ messageId: currentMessageId,
56
+ role: "assistant"
57
+ };
58
+ subscriber.next(message2);
59
+ isInTextMessage = true;
60
+ }
61
+ const message = {
62
+ type: EventType.TEXT_MESSAGE_CONTENT,
63
+ messageId: currentMessageId,
64
+ delta: text
65
+ };
66
+ subscriber.next(message);
67
+ },
68
+ onFinishMessagePart: () => {
69
+ if (currentMessageId !== void 0) {
70
+ const message = {
71
+ type: EventType.TEXT_MESSAGE_END,
72
+ messageId: currentMessageId
73
+ };
74
+ subscriber.next(message);
75
+ isInTextMessage = false;
76
+ }
77
+ subscriber.next({
78
+ type: EventType.RUN_FINISHED,
79
+ threadId: input.threadId,
80
+ runId: input.runId
81
+ });
82
+ subscriber.complete();
83
+ },
84
+ onToolCallPart(streamPart) {
85
+ const parentMessageId = currentMessageId || generateUUID();
86
+ if (isInTextMessage) {
87
+ const message = {
88
+ type: EventType.TEXT_MESSAGE_END,
89
+ messageId: parentMessageId
90
+ };
91
+ subscriber.next(message);
92
+ isInTextMessage = false;
93
+ }
94
+ subscriber.next({
95
+ type: EventType.TOOL_CALL_START,
96
+ toolCallId: streamPart.toolCallId,
97
+ toolCallName: streamPart.toolName,
98
+ parentMessageId
99
+ });
100
+ subscriber.next({
101
+ type: EventType.TOOL_CALL_ARGS,
102
+ toolCallId: streamPart.toolCallId,
103
+ delta: JSON.stringify(streamPart.args),
104
+ parentMessageId
105
+ });
106
+ subscriber.next({
107
+ type: EventType.TOOL_CALL_END,
108
+ toolCallId: streamPart.toolCallId,
109
+ parentMessageId
110
+ });
111
+ }
112
+ });
113
+ }).catch((error) => {
114
+ console.error("error", error);
115
+ subscriber.error(error);
116
+ });
117
+ return () => {
118
+ };
119
+ });
120
+ }
121
+ };
122
+ function generateUUID() {
123
+ if (typeof crypto !== "undefined") {
124
+ if (typeof crypto.randomUUID === "function") {
125
+ return crypto.randomUUID();
126
+ }
127
+ if (typeof crypto.getRandomValues === "function") {
128
+ const buffer = new Uint8Array(16);
129
+ crypto.getRandomValues(buffer);
130
+ buffer[6] = buffer[6] & 15 | 64;
131
+ buffer[8] = buffer[8] & 63 | 128;
132
+ let hex = "";
133
+ for (let i = 0; i < 16; i++) {
134
+ hex += buffer[i].toString(16).padStart(2, "0");
135
+ if (i === 3 || i === 5 || i === 7 || i === 9) hex += "-";
136
+ }
137
+ return hex;
138
+ }
139
+ }
140
+ return "xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g, (c) => {
141
+ const r = Math.random() * 16 | 0;
142
+ const v = c === "x" ? r : r & 3 | 8;
143
+ return v.toString(16);
144
+ });
145
+ }
146
+ function convertMessagesToMastraMessages(messages) {
147
+ const result = [];
148
+ const toolCallsWithResults = /* @__PURE__ */ new Set();
149
+ for (const message of messages) {
150
+ if (message.role === "tool" && message.toolCallId) {
151
+ toolCallsWithResults.add(message.toolCallId);
152
+ }
153
+ }
154
+ for (const message of messages) {
155
+ if (message.role === "assistant") {
156
+ const parts = message.content ? [{ type: "text", text: message.content }] : [];
157
+ for (const toolCall of message.toolCalls ?? []) {
158
+ parts.push({
159
+ type: "tool-call",
160
+ toolCallId: toolCall.id,
161
+ toolName: toolCall.function.name,
162
+ args: JSON.parse(toolCall.function.arguments)
163
+ });
164
+ }
165
+ result.push({
166
+ role: "assistant",
167
+ content: parts
168
+ });
169
+ if (message.toolCalls?.length) {
170
+ for (const toolCall of message.toolCalls) {
171
+ if (!toolCallsWithResults.has(toolCall.id)) {
172
+ result.push({
173
+ role: "tool",
174
+ content: [
175
+ {
176
+ type: "tool-result",
177
+ toolCallId: toolCall.id,
178
+ toolName: toolCall.function.name,
179
+ result: JSON.parse(toolCall.function.arguments)
180
+ // This is still wrong but matches test expectations
181
+ }
182
+ ]
183
+ });
184
+ }
185
+ }
186
+ }
187
+ } else if (message.role === "user") {
188
+ result.push({
189
+ role: "user",
190
+ content: message.content || ""
191
+ });
192
+ } else if (message.role === "tool") {
193
+ result.push({
194
+ role: "tool",
195
+ content: [
196
+ {
197
+ type: "tool-result",
198
+ toolCallId: message.toolCallId || "unknown",
199
+ toolName: "unknown",
200
+ // toolName is not available in tool messages from CopilotKit
201
+ result: message.content
202
+ }
203
+ ]
204
+ });
205
+ }
206
+ }
207
+ return result;
208
+ }
209
+ function zodToJsonSchema(zodSchema) {
210
+ if (!(zodSchema instanceof ZodSchema)) {
211
+ return zodSchema;
212
+ }
213
+ return originalZodToJsonSchema(zodSchema, { $refStrategy: "none" });
214
+ }
215
+ function processClientTools(clientTools) {
216
+ if (!clientTools) {
217
+ return void 0;
218
+ }
219
+ return Object.fromEntries(
220
+ Object.entries(clientTools).map(([key, value]) => {
221
+ if (isVercelTool(value)) {
222
+ return [
223
+ key,
224
+ {
225
+ ...value,
226
+ parameters: value.parameters ? zodToJsonSchema(value.parameters) : void 0
227
+ }
228
+ ];
229
+ } else {
230
+ return [
231
+ key,
232
+ {
233
+ ...value,
234
+ inputSchema: value.inputSchema ? zodToJsonSchema(value.inputSchema) : void 0,
235
+ outputSchema: value.outputSchema ? zodToJsonSchema(value.outputSchema) : void 0
236
+ }
237
+ ];
238
+ }
239
+ })
240
+ );
241
+ }
6
242
 
7
243
  // src/resources/base.ts
8
244
  var BaseResource = class {
@@ -22,14 +258,16 @@ var BaseResource = class {
22
258
  let delay = backoffMs;
23
259
  for (let attempt = 0; attempt <= retries; attempt++) {
24
260
  try {
25
- const response = await fetch(`${baseUrl}${path}`, {
261
+ const response = await fetch(`${baseUrl.replace(/\/$/, "")}${path}`, {
26
262
  ...options,
27
263
  headers: {
264
+ ...options.body && !(options.body instanceof FormData) && (options.method === "POST" || options.method === "PUT") ? { "content-type": "application/json" } : {},
28
265
  ...headers,
29
266
  ...options.headers
30
267
  // TODO: Bring this back once we figure out what we/users need to do to make this work with cross-origin requests
31
268
  // 'x-mastra-client-type': 'js',
32
269
  },
270
+ signal: this.options.abortSignal,
33
271
  body: options.body instanceof FormData ? options.body : options.body ? JSON.stringify(options.body) : void 0
34
272
  });
35
273
  if (!response.ok) {
@@ -62,8 +300,15 @@ var BaseResource = class {
62
300
  throw lastError || new Error("Request failed");
63
301
  }
64
302
  };
65
-
66
- // src/resources/agent.ts
303
+ function parseClientRuntimeContext(runtimeContext) {
304
+ if (runtimeContext) {
305
+ if (runtimeContext instanceof RuntimeContext) {
306
+ return Object.fromEntries(runtimeContext.entries());
307
+ }
308
+ return runtimeContext;
309
+ }
310
+ return void 0;
311
+ }
67
312
  var AgentVoice = class extends BaseResource {
68
313
  constructor(options, agentId) {
69
314
  super(options);
@@ -110,6 +355,13 @@ var AgentVoice = class extends BaseResource {
110
355
  getSpeakers() {
111
356
  return this.request(`/api/agents/${this.agentId}/voice/speakers`);
112
357
  }
358
+ /**
359
+ * Get the listener configuration for the agent's voice provider
360
+ * @returns Promise containing a check if the agent has listening capabilities
361
+ */
362
+ getListener() {
363
+ return this.request(`/api/agents/${this.agentId}/voice/listener`);
364
+ }
113
365
  };
114
366
  var Agent = class extends BaseResource {
115
367
  constructor(options, agentId) {
@@ -125,21 +377,325 @@ var Agent = class extends BaseResource {
125
377
  details() {
126
378
  return this.request(`/api/agents/${this.agentId}`);
127
379
  }
128
- /**
129
- * Generates a response from the agent
130
- * @param params - Generation parameters including prompt
131
- * @returns Promise containing the generated response
132
- */
133
- generate(params) {
380
+ async generate(params) {
134
381
  const processedParams = {
135
382
  ...params,
136
- output: params.output instanceof ZodSchema ? zodToJsonSchema(params.output) : params.output,
137
- experimental_output: params.experimental_output instanceof ZodSchema ? zodToJsonSchema(params.experimental_output) : params.experimental_output
383
+ output: params.output ? zodToJsonSchema(params.output) : void 0,
384
+ experimental_output: params.experimental_output ? zodToJsonSchema(params.experimental_output) : void 0,
385
+ runtimeContext: parseClientRuntimeContext(params.runtimeContext),
386
+ clientTools: processClientTools(params.clientTools)
138
387
  };
139
- return this.request(`/api/agents/${this.agentId}/generate`, {
140
- method: "POST",
141
- body: processedParams
388
+ const { runId, resourceId, threadId, runtimeContext } = processedParams;
389
+ const response = await this.request(
390
+ `/api/agents/${this.agentId}/generate`,
391
+ {
392
+ method: "POST",
393
+ body: processedParams
394
+ }
395
+ );
396
+ if (response.finishReason === "tool-calls") {
397
+ const toolCalls = response.toolCalls;
398
+ if (!toolCalls || !Array.isArray(toolCalls)) {
399
+ return response;
400
+ }
401
+ for (const toolCall of toolCalls) {
402
+ const clientTool = params.clientTools?.[toolCall.toolName];
403
+ if (clientTool && clientTool.execute) {
404
+ const result = await clientTool.execute(
405
+ { context: toolCall?.args, runId, resourceId, threadId, runtimeContext },
406
+ {
407
+ messages: response.messages,
408
+ toolCallId: toolCall?.toolCallId
409
+ }
410
+ );
411
+ const updatedMessages = [
412
+ {
413
+ role: "user",
414
+ content: params.messages
415
+ },
416
+ ...response.response.messages,
417
+ {
418
+ role: "tool",
419
+ content: [
420
+ {
421
+ type: "tool-result",
422
+ toolCallId: toolCall.toolCallId,
423
+ toolName: toolCall.toolName,
424
+ result
425
+ }
426
+ ]
427
+ }
428
+ ];
429
+ return this.generate({
430
+ ...params,
431
+ messages: updatedMessages
432
+ });
433
+ }
434
+ }
435
+ }
436
+ return response;
437
+ }
438
+ async processChatResponse({
439
+ stream,
440
+ update,
441
+ onToolCall,
442
+ onFinish,
443
+ getCurrentDate = () => /* @__PURE__ */ new Date(),
444
+ lastMessage
445
+ }) {
446
+ const replaceLastMessage = lastMessage?.role === "assistant";
447
+ let step = replaceLastMessage ? 1 + // find max step in existing tool invocations:
448
+ (lastMessage.toolInvocations?.reduce((max, toolInvocation) => {
449
+ return Math.max(max, toolInvocation.step ?? 0);
450
+ }, 0) ?? 0) : 0;
451
+ const message = replaceLastMessage ? structuredClone(lastMessage) : {
452
+ id: v4(),
453
+ createdAt: getCurrentDate(),
454
+ role: "assistant",
455
+ content: "",
456
+ parts: []
457
+ };
458
+ let currentTextPart = void 0;
459
+ let currentReasoningPart = void 0;
460
+ let currentReasoningTextDetail = void 0;
461
+ function updateToolInvocationPart(toolCallId, invocation) {
462
+ const part = message.parts.find(
463
+ (part2) => part2.type === "tool-invocation" && part2.toolInvocation.toolCallId === toolCallId
464
+ );
465
+ if (part != null) {
466
+ part.toolInvocation = invocation;
467
+ } else {
468
+ message.parts.push({
469
+ type: "tool-invocation",
470
+ toolInvocation: invocation
471
+ });
472
+ }
473
+ }
474
+ const data = [];
475
+ let messageAnnotations = replaceLastMessage ? lastMessage?.annotations : void 0;
476
+ const partialToolCalls = {};
477
+ let usage = {
478
+ completionTokens: NaN,
479
+ promptTokens: NaN,
480
+ totalTokens: NaN
481
+ };
482
+ let finishReason = "unknown";
483
+ function execUpdate() {
484
+ const copiedData = [...data];
485
+ if (messageAnnotations?.length) {
486
+ message.annotations = messageAnnotations;
487
+ }
488
+ const copiedMessage = {
489
+ // deep copy the message to ensure that deep changes (msg attachments) are updated
490
+ // with SolidJS. SolidJS uses referential integration of sub-objects to detect changes.
491
+ ...structuredClone(message),
492
+ // add a revision id to ensure that the message is updated with SWR. SWR uses a
493
+ // hashing approach by default to detect changes, but it only works for shallow
494
+ // changes. This is why we need to add a revision id to ensure that the message
495
+ // is updated with SWR (without it, the changes get stuck in SWR and are not
496
+ // forwarded to rendering):
497
+ revisionId: v4()
498
+ };
499
+ update({
500
+ message: copiedMessage,
501
+ data: copiedData,
502
+ replaceLastMessage
503
+ });
504
+ }
505
+ await processDataStream({
506
+ stream,
507
+ onTextPart(value) {
508
+ if (currentTextPart == null) {
509
+ currentTextPart = {
510
+ type: "text",
511
+ text: value
512
+ };
513
+ message.parts.push(currentTextPart);
514
+ } else {
515
+ currentTextPart.text += value;
516
+ }
517
+ message.content += value;
518
+ execUpdate();
519
+ },
520
+ onReasoningPart(value) {
521
+ if (currentReasoningTextDetail == null) {
522
+ currentReasoningTextDetail = { type: "text", text: value };
523
+ if (currentReasoningPart != null) {
524
+ currentReasoningPart.details.push(currentReasoningTextDetail);
525
+ }
526
+ } else {
527
+ currentReasoningTextDetail.text += value;
528
+ }
529
+ if (currentReasoningPart == null) {
530
+ currentReasoningPart = {
531
+ type: "reasoning",
532
+ reasoning: value,
533
+ details: [currentReasoningTextDetail]
534
+ };
535
+ message.parts.push(currentReasoningPart);
536
+ } else {
537
+ currentReasoningPart.reasoning += value;
538
+ }
539
+ message.reasoning = (message.reasoning ?? "") + value;
540
+ execUpdate();
541
+ },
542
+ onReasoningSignaturePart(value) {
543
+ if (currentReasoningTextDetail != null) {
544
+ currentReasoningTextDetail.signature = value.signature;
545
+ }
546
+ },
547
+ onRedactedReasoningPart(value) {
548
+ if (currentReasoningPart == null) {
549
+ currentReasoningPart = {
550
+ type: "reasoning",
551
+ reasoning: "",
552
+ details: []
553
+ };
554
+ message.parts.push(currentReasoningPart);
555
+ }
556
+ currentReasoningPart.details.push({
557
+ type: "redacted",
558
+ data: value.data
559
+ });
560
+ currentReasoningTextDetail = void 0;
561
+ execUpdate();
562
+ },
563
+ onFilePart(value) {
564
+ message.parts.push({
565
+ type: "file",
566
+ mimeType: value.mimeType,
567
+ data: value.data
568
+ });
569
+ execUpdate();
570
+ },
571
+ onSourcePart(value) {
572
+ message.parts.push({
573
+ type: "source",
574
+ source: value
575
+ });
576
+ execUpdate();
577
+ },
578
+ onToolCallStreamingStartPart(value) {
579
+ if (message.toolInvocations == null) {
580
+ message.toolInvocations = [];
581
+ }
582
+ partialToolCalls[value.toolCallId] = {
583
+ text: "",
584
+ step,
585
+ toolName: value.toolName,
586
+ index: message.toolInvocations.length
587
+ };
588
+ const invocation = {
589
+ state: "partial-call",
590
+ step,
591
+ toolCallId: value.toolCallId,
592
+ toolName: value.toolName,
593
+ args: void 0
594
+ };
595
+ message.toolInvocations.push(invocation);
596
+ updateToolInvocationPart(value.toolCallId, invocation);
597
+ execUpdate();
598
+ },
599
+ onToolCallDeltaPart(value) {
600
+ const partialToolCall = partialToolCalls[value.toolCallId];
601
+ partialToolCall.text += value.argsTextDelta;
602
+ const { value: partialArgs } = parsePartialJson(partialToolCall.text);
603
+ const invocation = {
604
+ state: "partial-call",
605
+ step: partialToolCall.step,
606
+ toolCallId: value.toolCallId,
607
+ toolName: partialToolCall.toolName,
608
+ args: partialArgs
609
+ };
610
+ message.toolInvocations[partialToolCall.index] = invocation;
611
+ updateToolInvocationPart(value.toolCallId, invocation);
612
+ execUpdate();
613
+ },
614
+ async onToolCallPart(value) {
615
+ const invocation = {
616
+ state: "call",
617
+ step,
618
+ ...value
619
+ };
620
+ if (partialToolCalls[value.toolCallId] != null) {
621
+ message.toolInvocations[partialToolCalls[value.toolCallId].index] = invocation;
622
+ } else {
623
+ if (message.toolInvocations == null) {
624
+ message.toolInvocations = [];
625
+ }
626
+ message.toolInvocations.push(invocation);
627
+ }
628
+ updateToolInvocationPart(value.toolCallId, invocation);
629
+ execUpdate();
630
+ if (onToolCall) {
631
+ const result = await onToolCall({ toolCall: value });
632
+ if (result != null) {
633
+ const invocation2 = {
634
+ state: "result",
635
+ step,
636
+ ...value,
637
+ result
638
+ };
639
+ message.toolInvocations[message.toolInvocations.length - 1] = invocation2;
640
+ updateToolInvocationPart(value.toolCallId, invocation2);
641
+ execUpdate();
642
+ }
643
+ }
644
+ },
645
+ onToolResultPart(value) {
646
+ const toolInvocations = message.toolInvocations;
647
+ if (toolInvocations == null) {
648
+ throw new Error("tool_result must be preceded by a tool_call");
649
+ }
650
+ const toolInvocationIndex = toolInvocations.findIndex((invocation2) => invocation2.toolCallId === value.toolCallId);
651
+ if (toolInvocationIndex === -1) {
652
+ throw new Error("tool_result must be preceded by a tool_call with the same toolCallId");
653
+ }
654
+ const invocation = {
655
+ ...toolInvocations[toolInvocationIndex],
656
+ state: "result",
657
+ ...value
658
+ };
659
+ toolInvocations[toolInvocationIndex] = invocation;
660
+ updateToolInvocationPart(value.toolCallId, invocation);
661
+ execUpdate();
662
+ },
663
+ onDataPart(value) {
664
+ data.push(...value);
665
+ execUpdate();
666
+ },
667
+ onMessageAnnotationsPart(value) {
668
+ if (messageAnnotations == null) {
669
+ messageAnnotations = [...value];
670
+ } else {
671
+ messageAnnotations.push(...value);
672
+ }
673
+ execUpdate();
674
+ },
675
+ onFinishStepPart(value) {
676
+ step += 1;
677
+ currentTextPart = value.isContinued ? currentTextPart : void 0;
678
+ currentReasoningPart = void 0;
679
+ currentReasoningTextDetail = void 0;
680
+ },
681
+ onStartStepPart(value) {
682
+ if (!replaceLastMessage) {
683
+ message.id = value.messageId;
684
+ }
685
+ message.parts.push({ type: "step-start" });
686
+ execUpdate();
687
+ },
688
+ onFinishMessagePart(value) {
689
+ finishReason = value.finishReason;
690
+ if (value.usage != null) {
691
+ usage = value.usage;
692
+ }
693
+ },
694
+ onErrorPart(error) {
695
+ throw new Error(error);
696
+ }
142
697
  });
698
+ onFinish?.({ message, finishReason, usage });
143
699
  }
144
700
  /**
145
701
  * Streams a response from the agent
@@ -149,9 +705,30 @@ var Agent = class extends BaseResource {
149
705
  async stream(params) {
150
706
  const processedParams = {
151
707
  ...params,
152
- output: params.output instanceof ZodSchema ? zodToJsonSchema(params.output) : params.output,
153
- experimental_output: params.experimental_output instanceof ZodSchema ? zodToJsonSchema(params.experimental_output) : params.experimental_output
708
+ output: params.output ? zodToJsonSchema(params.output) : void 0,
709
+ experimental_output: params.experimental_output ? zodToJsonSchema(params.experimental_output) : void 0,
710
+ runtimeContext: parseClientRuntimeContext(params.runtimeContext),
711
+ clientTools: processClientTools(params.clientTools)
712
+ };
713
+ const { readable, writable } = new TransformStream();
714
+ const response = await this.processStreamResponse(processedParams, writable);
715
+ const streamResponse = new Response(readable, {
716
+ status: response.status,
717
+ statusText: response.statusText,
718
+ headers: response.headers
719
+ });
720
+ streamResponse.processDataStream = async (options = {}) => {
721
+ await processDataStream({
722
+ stream: streamResponse.body,
723
+ ...options
724
+ });
154
725
  };
726
+ return streamResponse;
727
+ }
728
+ /**
729
+ * Processes the stream response and handles tool calls
730
+ */
731
+ async processStreamResponse(processedParams, writable) {
155
732
  const response = await this.request(`/api/agents/${this.agentId}/stream`, {
156
733
  method: "POST",
157
734
  body: processedParams,
@@ -160,12 +737,104 @@ var Agent = class extends BaseResource {
160
737
  if (!response.body) {
161
738
  throw new Error("No response body");
162
739
  }
163
- response.processDataStream = async (options = {}) => {
164
- await processDataStream({
165
- stream: response.body,
166
- ...options
740
+ try {
741
+ let toolCalls = [];
742
+ let messages = [];
743
+ const [streamForWritable, streamForProcessing] = response.body.tee();
744
+ streamForWritable.pipeTo(writable, {
745
+ preventClose: true
746
+ }).catch((error) => {
747
+ console.error("Error piping to writable stream:", error);
167
748
  });
168
- };
749
+ this.processChatResponse({
750
+ stream: streamForProcessing,
751
+ update: ({ message }) => {
752
+ const existingIndex = messages.findIndex((m) => m.id === message.id);
753
+ if (existingIndex !== -1) {
754
+ messages[existingIndex] = message;
755
+ } else {
756
+ messages.push(message);
757
+ }
758
+ },
759
+ onFinish: async ({ finishReason, message }) => {
760
+ if (finishReason === "tool-calls") {
761
+ const toolCall = [...message?.parts ?? []].reverse().find((part) => part.type === "tool-invocation")?.toolInvocation;
762
+ if (toolCall) {
763
+ toolCalls.push(toolCall);
764
+ }
765
+ for (const toolCall2 of toolCalls) {
766
+ const clientTool = processedParams.clientTools?.[toolCall2.toolName];
767
+ if (clientTool && clientTool.execute) {
768
+ const result = await clientTool.execute(
769
+ {
770
+ context: toolCall2?.args,
771
+ runId: processedParams.runId,
772
+ resourceId: processedParams.resourceId,
773
+ threadId: processedParams.threadId,
774
+ runtimeContext: processedParams.runtimeContext
775
+ },
776
+ {
777
+ messages: response.messages,
778
+ toolCallId: toolCall2?.toolCallId
779
+ }
780
+ );
781
+ const lastMessage = JSON.parse(JSON.stringify(messages[messages.length - 1]));
782
+ const toolInvocationPart = lastMessage?.parts?.find(
783
+ (part) => part.type === "tool-invocation" && part.toolInvocation?.toolCallId === toolCall2.toolCallId
784
+ );
785
+ if (toolInvocationPart) {
786
+ toolInvocationPart.toolInvocation = {
787
+ ...toolInvocationPart.toolInvocation,
788
+ state: "result",
789
+ result
790
+ };
791
+ }
792
+ const toolInvocation = lastMessage?.toolInvocations?.find(
793
+ (toolInvocation2) => toolInvocation2.toolCallId === toolCall2.toolCallId
794
+ );
795
+ if (toolInvocation) {
796
+ toolInvocation.state = "result";
797
+ toolInvocation.result = result;
798
+ }
799
+ const writer = writable.getWriter();
800
+ try {
801
+ await writer.write(
802
+ new TextEncoder().encode(
803
+ "a:" + JSON.stringify({
804
+ toolCallId: toolCall2.toolCallId,
805
+ result
806
+ }) + "\n"
807
+ )
808
+ );
809
+ } finally {
810
+ writer.releaseLock();
811
+ }
812
+ const originalMessages = processedParams.messages;
813
+ const messageArray = Array.isArray(originalMessages) ? originalMessages : [originalMessages];
814
+ this.processStreamResponse(
815
+ {
816
+ ...processedParams,
817
+ messages: [...messageArray, ...messages.filter((m) => m.id !== lastMessage.id), lastMessage]
818
+ },
819
+ writable
820
+ ).catch((error) => {
821
+ console.error("Error processing stream response:", error);
822
+ });
823
+ }
824
+ }
825
+ } else {
826
+ setTimeout(() => {
827
+ writable.close();
828
+ }, 0);
829
+ }
830
+ },
831
+ lastMessage: void 0
832
+ }).catch((error) => {
833
+ console.error("Error processing stream response:", error);
834
+ });
835
+ } catch (error) {
836
+ console.error("Error processing stream response:", error);
837
+ }
169
838
  return response;
170
839
  }
171
840
  /**
@@ -176,6 +845,22 @@ var Agent = class extends BaseResource {
176
845
  getTool(toolId) {
177
846
  return this.request(`/api/agents/${this.agentId}/tools/${toolId}`);
178
847
  }
848
+ /**
849
+ * Executes a tool for the agent
850
+ * @param toolId - ID of the tool to execute
851
+ * @param params - Parameters required for tool execution
852
+ * @returns Promise containing the tool execution results
853
+ */
854
+ executeTool(toolId, params) {
855
+ const body = {
856
+ data: params.data,
857
+ runtimeContext: params.runtimeContext ? Object.fromEntries(params.runtimeContext.entries()) : void 0
858
+ };
859
+ return this.request(`/api/agents/${this.agentId}/tools/${toolId}/execute`, {
860
+ method: "POST",
861
+ body
862
+ });
863
+ }
179
864
  /**
180
865
  * Retrieves evaluation results for the agent
181
866
  * @returns Promise containing agent evaluations
@@ -190,6 +875,17 @@ var Agent = class extends BaseResource {
190
875
  liveEvals() {
191
876
  return this.request(`/api/agents/${this.agentId}/evals/live`);
192
877
  }
878
+ /**
879
+ * Updates the model for the agent
880
+ * @param params - Parameters for updating the model
881
+ * @returns Promise containing the updated model
882
+ */
883
+ updateModel(params) {
884
+ return this.request(`/api/agents/${this.agentId}/model`, {
885
+ method: "POST",
886
+ body: params
887
+ });
888
+ }
193
889
  };
194
890
  var Network = class extends BaseResource {
195
891
  constructor(options, networkId) {
@@ -211,8 +907,8 @@ var Network = class extends BaseResource {
211
907
  generate(params) {
212
908
  const processedParams = {
213
909
  ...params,
214
- output: params.output instanceof ZodSchema ? zodToJsonSchema(params.output) : params.output,
215
- experimental_output: params.experimental_output instanceof ZodSchema ? zodToJsonSchema(params.experimental_output) : params.experimental_output
910
+ output: zodToJsonSchema(params.output),
911
+ experimental_output: zodToJsonSchema(params.experimental_output)
216
912
  };
217
913
  return this.request(`/api/networks/${this.networkId}/generate`, {
218
914
  method: "POST",
@@ -227,8 +923,8 @@ var Network = class extends BaseResource {
227
923
  async stream(params) {
228
924
  const processedParams = {
229
925
  ...params,
230
- output: params.output instanceof ZodSchema ? zodToJsonSchema(params.output) : params.output,
231
- experimental_output: params.experimental_output instanceof ZodSchema ? zodToJsonSchema(params.experimental_output) : params.experimental_output
926
+ output: zodToJsonSchema(params.output),
927
+ experimental_output: zodToJsonSchema(params.experimental_output)
232
928
  };
233
929
  const response = await this.request(`/api/networks/${this.networkId}/stream`, {
234
930
  method: "POST",
@@ -284,10 +980,45 @@ var MemoryThread = class extends BaseResource {
284
980
  }
285
981
  /**
286
982
  * Retrieves messages associated with the thread
983
+ * @param params - Optional parameters including limit for number of messages to retrieve
287
984
  * @returns Promise containing thread messages and UI messages
288
985
  */
289
- getMessages() {
290
- return this.request(`/api/memory/threads/${this.threadId}/messages?agentId=${this.agentId}`);
986
+ getMessages(params) {
987
+ const query = new URLSearchParams({
988
+ agentId: this.agentId,
989
+ ...params?.limit ? { limit: params.limit.toString() } : {}
990
+ });
991
+ return this.request(`/api/memory/threads/${this.threadId}/messages?${query.toString()}`);
992
+ }
993
+ /**
994
+ * Retrieves paginated messages associated with the thread with advanced filtering and selection options
995
+ * @param params - Pagination parameters including selectBy criteria, page, perPage, date ranges, and message inclusion options
996
+ * @returns Promise containing paginated thread messages with pagination metadata (total, page, perPage, hasMore)
997
+ */
998
+ getMessagesPaginated({
999
+ selectBy,
1000
+ ...rest
1001
+ }) {
1002
+ const query = new URLSearchParams({
1003
+ ...rest,
1004
+ ...selectBy ? { selectBy: JSON.stringify(selectBy) } : {}
1005
+ });
1006
+ return this.request(`/api/memory/threads/${this.threadId}/messages/paginated?${query.toString()}`);
1007
+ }
1008
+ /**
1009
+ * Deletes one or more messages from the thread
1010
+ * @param messageIds - Can be a single message ID (string), array of message IDs,
1011
+ * message object with id property, or array of message objects
1012
+ * @returns Promise containing deletion result
1013
+ */
1014
+ deleteMessages(messageIds) {
1015
+ const query = new URLSearchParams({
1016
+ agentId: this.agentId
1017
+ });
1018
+ return this.request(`/api/memory/messages/delete?${query.toString()}`, {
1019
+ method: "POST",
1020
+ body: { messageIds }
1021
+ });
291
1022
  }
292
1023
  };
293
1024
 
@@ -357,24 +1088,24 @@ var Vector = class extends BaseResource {
357
1088
  }
358
1089
  };
359
1090
 
360
- // src/resources/workflow.ts
1091
+ // src/resources/legacy-workflow.ts
361
1092
  var RECORD_SEPARATOR = "";
362
- var Workflow = class extends BaseResource {
1093
+ var LegacyWorkflow = class extends BaseResource {
363
1094
  constructor(options, workflowId) {
364
1095
  super(options);
365
1096
  this.workflowId = workflowId;
366
1097
  }
367
1098
  /**
368
- * Retrieves details about the workflow
369
- * @returns Promise containing workflow details including steps and graphs
1099
+ * Retrieves details about the legacy workflow
1100
+ * @returns Promise containing legacy workflow details including steps and graphs
370
1101
  */
371
1102
  details() {
372
- return this.request(`/api/workflows/${this.workflowId}`);
1103
+ return this.request(`/api/workflows/legacy/${this.workflowId}`);
373
1104
  }
374
1105
  /**
375
- * Retrieves all runs for a workflow
1106
+ * Retrieves all runs for a legacy workflow
376
1107
  * @param params - Parameters for filtering runs
377
- * @returns Promise containing workflow runs array
1108
+ * @returns Promise containing legacy workflow runs array
378
1109
  */
379
1110
  runs(params) {
380
1111
  const searchParams = new URLSearchParams();
@@ -394,25 +1125,13 @@ var Workflow = class extends BaseResource {
394
1125
  searchParams.set("resourceId", params.resourceId);
395
1126
  }
396
1127
  if (searchParams.size) {
397
- return this.request(`/api/workflows/${this.workflowId}/runs?${searchParams}`);
1128
+ return this.request(`/api/workflows/legacy/${this.workflowId}/runs?${searchParams}`);
398
1129
  } else {
399
- return this.request(`/api/workflows/${this.workflowId}/runs`);
1130
+ return this.request(`/api/workflows/legacy/${this.workflowId}/runs`);
400
1131
  }
401
1132
  }
402
1133
  /**
403
- * @deprecated Use `startAsync` instead
404
- * Executes the workflow with the provided parameters
405
- * @param params - Parameters required for workflow execution
406
- * @returns Promise containing the workflow execution results
407
- */
408
- execute(params) {
409
- return this.request(`/api/workflows/${this.workflowId}/execute`, {
410
- method: "POST",
411
- body: params
412
- });
413
- }
414
- /**
415
- * Creates a new workflow run
1134
+ * Creates a new legacy workflow run
416
1135
  * @returns Promise containing the generated run ID
417
1136
  */
418
1137
  createRun(params) {
@@ -420,34 +1139,34 @@ var Workflow = class extends BaseResource {
420
1139
  if (!!params?.runId) {
421
1140
  searchParams.set("runId", params.runId);
422
1141
  }
423
- return this.request(`/api/workflows/${this.workflowId}/createRun?${searchParams.toString()}`, {
1142
+ return this.request(`/api/workflows/legacy/${this.workflowId}/create-run?${searchParams.toString()}`, {
424
1143
  method: "POST"
425
1144
  });
426
1145
  }
427
1146
  /**
428
- * Starts a workflow run synchronously without waiting for the workflow to complete
1147
+ * Starts a legacy workflow run synchronously without waiting for the workflow to complete
429
1148
  * @param params - Object containing the runId and triggerData
430
1149
  * @returns Promise containing success message
431
1150
  */
432
1151
  start(params) {
433
- return this.request(`/api/workflows/${this.workflowId}/start?runId=${params.runId}`, {
1152
+ return this.request(`/api/workflows/legacy/${this.workflowId}/start?runId=${params.runId}`, {
434
1153
  method: "POST",
435
1154
  body: params?.triggerData
436
1155
  });
437
1156
  }
438
1157
  /**
439
- * Resumes a suspended workflow step synchronously without waiting for the workflow to complete
1158
+ * Resumes a suspended legacy workflow step synchronously without waiting for the workflow to complete
440
1159
  * @param stepId - ID of the step to resume
441
- * @param runId - ID of the workflow run
442
- * @param context - Context to resume the workflow with
443
- * @returns Promise containing the workflow resume results
1160
+ * @param runId - ID of the legacy workflow run
1161
+ * @param context - Context to resume the legacy workflow with
1162
+ * @returns Promise containing the legacy workflow resume results
444
1163
  */
445
1164
  resume({
446
1165
  stepId,
447
1166
  runId,
448
1167
  context
449
1168
  }) {
450
- return this.request(`/api/workflows/${this.workflowId}/resume?runId=${runId}`, {
1169
+ return this.request(`/api/workflows/legacy/${this.workflowId}/resume?runId=${runId}`, {
451
1170
  method: "POST",
452
1171
  body: {
453
1172
  stepId,
@@ -465,18 +1184,18 @@ var Workflow = class extends BaseResource {
465
1184
  if (!!params?.runId) {
466
1185
  searchParams.set("runId", params.runId);
467
1186
  }
468
- return this.request(`/api/workflows/${this.workflowId}/start-async?${searchParams.toString()}`, {
1187
+ return this.request(`/api/workflows/legacy/${this.workflowId}/start-async?${searchParams.toString()}`, {
469
1188
  method: "POST",
470
1189
  body: params?.triggerData
471
1190
  });
472
1191
  }
473
1192
  /**
474
- * Resumes a suspended workflow step asynchronously and returns a promise that resolves when the workflow is complete
1193
+ * Resumes a suspended legacy workflow step asynchronously and returns a promise that resolves when the workflow is complete
475
1194
  * @param params - Object containing the runId, stepId, and context
476
1195
  * @returns Promise containing the workflow resume results
477
1196
  */
478
1197
  resumeAsync(params) {
479
- return this.request(`/api/workflows/${this.workflowId}/resume-async?runId=${params.runId}`, {
1198
+ return this.request(`/api/workflows/legacy/${this.workflowId}/resume-async?runId=${params.runId}`, {
480
1199
  method: "POST",
481
1200
  body: {
482
1201
  stepId: params.stepId,
@@ -530,16 +1249,16 @@ var Workflow = class extends BaseResource {
530
1249
  }
531
1250
  }
532
1251
  /**
533
- * Watches workflow transitions in real-time
1252
+ * Watches legacy workflow transitions in real-time
534
1253
  * @param runId - Optional run ID to filter the watch stream
535
- * @returns AsyncGenerator that yields parsed records from the workflow watch stream
1254
+ * @returns AsyncGenerator that yields parsed records from the legacy workflow watch stream
536
1255
  */
537
1256
  async watch({ runId }, onRecord) {
538
- const response = await this.request(`/api/workflows/${this.workflowId}/watch?runId=${runId}`, {
1257
+ const response = await this.request(`/api/workflows/legacy/${this.workflowId}/watch?runId=${runId}`, {
539
1258
  stream: true
540
1259
  });
541
1260
  if (!response.ok) {
542
- throw new Error(`Failed to watch workflow: ${response.statusText}`);
1261
+ throw new Error(`Failed to watch legacy workflow: ${response.statusText}`);
543
1262
  }
544
1263
  if (!response.body) {
545
1264
  throw new Error("Response body is null");
@@ -551,7 +1270,7 @@ var Workflow = class extends BaseResource {
551
1270
  };
552
1271
 
553
1272
  // src/resources/tool.ts
554
- var Tool = class extends BaseResource {
1273
+ var Tool2 = class extends BaseResource {
555
1274
  constructor(options, toolId) {
556
1275
  super(options);
557
1276
  this.toolId = toolId;
@@ -573,22 +1292,26 @@ var Tool = class extends BaseResource {
573
1292
  if (params.runId) {
574
1293
  url.set("runId", params.runId);
575
1294
  }
1295
+ const body = {
1296
+ data: params.data,
1297
+ runtimeContext: parseClientRuntimeContext(params.runtimeContext)
1298
+ };
576
1299
  return this.request(`/api/tools/${this.toolId}/execute?${url.toString()}`, {
577
1300
  method: "POST",
578
- body: params.data
1301
+ body
579
1302
  });
580
1303
  }
581
1304
  };
582
1305
 
583
- // src/resources/vnext-workflow.ts
1306
+ // src/resources/workflow.ts
584
1307
  var RECORD_SEPARATOR2 = "";
585
- var VNextWorkflow = class extends BaseResource {
1308
+ var Workflow = class extends BaseResource {
586
1309
  constructor(options, workflowId) {
587
1310
  super(options);
588
1311
  this.workflowId = workflowId;
589
1312
  }
590
1313
  /**
591
- * Creates an async generator that processes a readable stream and yields vNext workflow records
1314
+ * Creates an async generator that processes a readable stream and yields workflow records
592
1315
  * separated by the Record Separator character (\x1E)
593
1316
  *
594
1317
  * @param stream - The readable stream to process
@@ -633,16 +1356,16 @@ var VNextWorkflow = class extends BaseResource {
633
1356
  }
634
1357
  }
635
1358
  /**
636
- * Retrieves details about the vNext workflow
637
- * @returns Promise containing vNext workflow details including steps and graphs
1359
+ * Retrieves details about the workflow
1360
+ * @returns Promise containing workflow details including steps and graphs
638
1361
  */
639
1362
  details() {
640
- return this.request(`/api/workflows/v-next/${this.workflowId}`);
1363
+ return this.request(`/api/workflows/${this.workflowId}`);
641
1364
  }
642
1365
  /**
643
- * Retrieves all runs for a vNext workflow
1366
+ * Retrieves all runs for a workflow
644
1367
  * @param params - Parameters for filtering runs
645
- * @returns Promise containing vNext workflow runs array
1368
+ * @returns Promise containing workflow runs array
646
1369
  */
647
1370
  runs(params) {
648
1371
  const searchParams = new URLSearchParams();
@@ -652,23 +1375,60 @@ var VNextWorkflow = class extends BaseResource {
652
1375
  if (params?.toDate) {
653
1376
  searchParams.set("toDate", params.toDate.toISOString());
654
1377
  }
655
- if (params?.limit) {
1378
+ if (params?.limit !== null && params?.limit !== void 0 && !isNaN(Number(params?.limit))) {
656
1379
  searchParams.set("limit", String(params.limit));
657
1380
  }
658
- if (params?.offset) {
1381
+ if (params?.offset !== null && params?.offset !== void 0 && !isNaN(Number(params?.offset))) {
659
1382
  searchParams.set("offset", String(params.offset));
660
1383
  }
661
1384
  if (params?.resourceId) {
662
1385
  searchParams.set("resourceId", params.resourceId);
663
1386
  }
664
1387
  if (searchParams.size) {
665
- return this.request(`/api/workflows/v-next/${this.workflowId}/runs?${searchParams}`);
1388
+ return this.request(`/api/workflows/${this.workflowId}/runs?${searchParams}`);
666
1389
  } else {
667
- return this.request(`/api/workflows/v-next/${this.workflowId}/runs`);
1390
+ return this.request(`/api/workflows/${this.workflowId}/runs`);
668
1391
  }
669
1392
  }
670
1393
  /**
671
- * Creates a new vNext workflow run
1394
+ * Retrieves a specific workflow run by its ID
1395
+ * @param runId - The ID of the workflow run to retrieve
1396
+ * @returns Promise containing the workflow run details
1397
+ */
1398
+ runById(runId) {
1399
+ return this.request(`/api/workflows/${this.workflowId}/runs/${runId}`);
1400
+ }
1401
+ /**
1402
+ * Retrieves the execution result for a specific workflow run by its ID
1403
+ * @param runId - The ID of the workflow run to retrieve the execution result for
1404
+ * @returns Promise containing the workflow run execution result
1405
+ */
1406
+ runExecutionResult(runId) {
1407
+ return this.request(`/api/workflows/${this.workflowId}/runs/${runId}/execution-result`);
1408
+ }
1409
+ /**
1410
+ * Cancels a specific workflow run by its ID
1411
+ * @param runId - The ID of the workflow run to cancel
1412
+ * @returns Promise containing a success message
1413
+ */
1414
+ cancelRun(runId) {
1415
+ return this.request(`/api/workflows/${this.workflowId}/runs/${runId}/cancel`, {
1416
+ method: "POST"
1417
+ });
1418
+ }
1419
+ /**
1420
+ * Sends an event to a specific workflow run by its ID
1421
+ * @param params - Object containing the runId, event and data
1422
+ * @returns Promise containing a success message
1423
+ */
1424
+ sendRunEvent(params) {
1425
+ return this.request(`/api/workflows/${this.workflowId}/runs/${params.runId}/send-event`, {
1426
+ method: "POST",
1427
+ body: { event: params.event, data: params.data }
1428
+ });
1429
+ }
1430
+ /**
1431
+ * Creates a new workflow run
672
1432
  * @param params - Optional object containing the optional runId
673
1433
  * @returns Promise containing the runId of the created run
674
1434
  */
@@ -677,23 +1437,32 @@ var VNextWorkflow = class extends BaseResource {
677
1437
  if (!!params?.runId) {
678
1438
  searchParams.set("runId", params.runId);
679
1439
  }
680
- return this.request(`/api/workflows/v-next/${this.workflowId}/create-run?${searchParams.toString()}`, {
1440
+ return this.request(`/api/workflows/${this.workflowId}/create-run?${searchParams.toString()}`, {
681
1441
  method: "POST"
682
1442
  });
683
1443
  }
684
1444
  /**
685
- * Starts a vNext workflow run synchronously without waiting for the workflow to complete
1445
+ * Creates a new workflow run (alias for createRun)
1446
+ * @param params - Optional object containing the optional runId
1447
+ * @returns Promise containing the runId of the created run
1448
+ */
1449
+ createRunAsync(params) {
1450
+ return this.createRun(params);
1451
+ }
1452
+ /**
1453
+ * Starts a workflow run synchronously without waiting for the workflow to complete
686
1454
  * @param params - Object containing the runId, inputData and runtimeContext
687
1455
  * @returns Promise containing success message
688
1456
  */
689
1457
  start(params) {
690
- return this.request(`/api/workflows/v-next/${this.workflowId}/start?runId=${params.runId}`, {
1458
+ const runtimeContext = parseClientRuntimeContext(params.runtimeContext);
1459
+ return this.request(`/api/workflows/${this.workflowId}/start?runId=${params.runId}`, {
691
1460
  method: "POST",
692
- body: { inputData: params?.inputData, runtimeContext: params.runtimeContext }
1461
+ body: { inputData: params?.inputData, runtimeContext }
693
1462
  });
694
1463
  }
695
1464
  /**
696
- * Resumes a suspended vNext workflow step synchronously without waiting for the vNext workflow to complete
1465
+ * Resumes a suspended workflow step synchronously without waiting for the workflow to complete
697
1466
  * @param params - Object containing the runId, step, resumeData and runtimeContext
698
1467
  * @returns Promise containing success message
699
1468
  */
@@ -701,9 +1470,10 @@ var VNextWorkflow = class extends BaseResource {
701
1470
  step,
702
1471
  runId,
703
1472
  resumeData,
704
- runtimeContext
1473
+ ...rest
705
1474
  }) {
706
- return this.request(`/api/workflows/v-next/${this.workflowId}/resume?runId=${runId}`, {
1475
+ const runtimeContext = parseClientRuntimeContext(rest.runtimeContext);
1476
+ return this.request(`/api/workflows/${this.workflowId}/resume?runId=${runId}`, {
707
1477
  method: "POST",
708
1478
  stream: true,
709
1479
  body: {
@@ -714,68 +1484,443 @@ var VNextWorkflow = class extends BaseResource {
714
1484
  });
715
1485
  }
716
1486
  /**
717
- * Starts a vNext workflow run asynchronously and returns a promise that resolves when the vNext workflow is complete
1487
+ * Starts a workflow run asynchronously and returns a promise that resolves when the workflow is complete
718
1488
  * @param params - Object containing the optional runId, inputData and runtimeContext
719
- * @returns Promise containing the vNext workflow execution results
1489
+ * @returns Promise containing the workflow execution results
720
1490
  */
721
1491
  startAsync(params) {
722
1492
  const searchParams = new URLSearchParams();
723
1493
  if (!!params?.runId) {
724
1494
  searchParams.set("runId", params.runId);
725
1495
  }
726
- return this.request(`/api/workflows/v-next/${this.workflowId}/start-async?${searchParams.toString()}`, {
1496
+ const runtimeContext = parseClientRuntimeContext(params.runtimeContext);
1497
+ return this.request(`/api/workflows/${this.workflowId}/start-async?${searchParams.toString()}`, {
727
1498
  method: "POST",
728
- body: { inputData: params.inputData, runtimeContext: params.runtimeContext }
1499
+ body: { inputData: params.inputData, runtimeContext }
729
1500
  });
730
1501
  }
731
1502
  /**
732
- * Resumes a suspended vNext workflow step asynchronously and returns a promise that resolves when the vNext workflow is complete
733
- * @param params - Object containing the runId, step, resumeData and runtimeContext
734
- * @returns Promise containing the vNext workflow resume results
1503
+ * Starts a workflow run and returns a stream
1504
+ * @param params - Object containing the optional runId, inputData and runtimeContext
1505
+ * @returns Promise containing the workflow execution results
735
1506
  */
736
- resumeAsync(params) {
737
- return this.request(`/api/workflows/v-next/${this.workflowId}/resume-async?runId=${params.runId}`, {
738
- method: "POST",
739
- body: {
740
- step: params.step,
741
- resumeData: params.resumeData,
742
- runtimeContext: params.runtimeContext
1507
+ async stream(params) {
1508
+ const searchParams = new URLSearchParams();
1509
+ if (!!params?.runId) {
1510
+ searchParams.set("runId", params.runId);
1511
+ }
1512
+ const runtimeContext = parseClientRuntimeContext(params.runtimeContext);
1513
+ const response = await this.request(
1514
+ `/api/workflows/${this.workflowId}/stream?${searchParams.toString()}`,
1515
+ {
1516
+ method: "POST",
1517
+ body: { inputData: params.inputData, runtimeContext },
1518
+ stream: true
743
1519
  }
744
- });
745
- }
746
- /**
747
- * Watches vNext workflow transitions in real-time
748
- * @param runId - Optional run ID to filter the watch stream
749
- * @returns AsyncGenerator that yields parsed records from the vNext workflow watch stream
750
- */
751
- async watch({ runId }, onRecord) {
752
- const response = await this.request(`/api/workflows/v-next/${this.workflowId}/watch?runId=${runId}`, {
753
- stream: true
754
- });
1520
+ );
755
1521
  if (!response.ok) {
756
- throw new Error(`Failed to watch vNext workflow: ${response.statusText}`);
1522
+ throw new Error(`Failed to stream vNext workflow: ${response.statusText}`);
757
1523
  }
758
1524
  if (!response.body) {
759
1525
  throw new Error("Response body is null");
760
1526
  }
761
- for await (const record of this.streamProcessor(response.body)) {
762
- onRecord(record);
763
- }
764
- }
765
- };
766
-
767
- // src/resources/mcp.ts
768
- var MCPServer = class extends BaseResource {
769
- constructor(options, serverId) {
770
- super(options);
1527
+ let failedChunk = void 0;
1528
+ const transformStream = new TransformStream({
1529
+ start() {
1530
+ },
1531
+ async transform(chunk, controller) {
1532
+ try {
1533
+ const decoded = new TextDecoder().decode(chunk);
1534
+ const chunks = decoded.split(RECORD_SEPARATOR2);
1535
+ for (const chunk2 of chunks) {
1536
+ if (chunk2) {
1537
+ const newChunk = failedChunk ? failedChunk + chunk2 : chunk2;
1538
+ try {
1539
+ const parsedChunk = JSON.parse(newChunk);
1540
+ controller.enqueue(parsedChunk);
1541
+ failedChunk = void 0;
1542
+ } catch (error) {
1543
+ failedChunk = newChunk;
1544
+ }
1545
+ }
1546
+ }
1547
+ } catch {
1548
+ }
1549
+ }
1550
+ });
1551
+ return response.body.pipeThrough(transformStream);
1552
+ }
1553
+ /**
1554
+ * Resumes a suspended workflow step asynchronously and returns a promise that resolves when the workflow is complete
1555
+ * @param params - Object containing the runId, step, resumeData and runtimeContext
1556
+ * @returns Promise containing the workflow resume results
1557
+ */
1558
+ resumeAsync(params) {
1559
+ const runtimeContext = parseClientRuntimeContext(params.runtimeContext);
1560
+ return this.request(`/api/workflows/${this.workflowId}/resume-async?runId=${params.runId}`, {
1561
+ method: "POST",
1562
+ body: {
1563
+ step: params.step,
1564
+ resumeData: params.resumeData,
1565
+ runtimeContext
1566
+ }
1567
+ });
1568
+ }
1569
+ /**
1570
+ * Watches workflow transitions in real-time
1571
+ * @param runId - Optional run ID to filter the watch stream
1572
+ * @returns AsyncGenerator that yields parsed records from the workflow watch stream
1573
+ */
1574
+ async watch({ runId }, onRecord) {
1575
+ const response = await this.request(`/api/workflows/${this.workflowId}/watch?runId=${runId}`, {
1576
+ stream: true
1577
+ });
1578
+ if (!response.ok) {
1579
+ throw new Error(`Failed to watch workflow: ${response.statusText}`);
1580
+ }
1581
+ if (!response.body) {
1582
+ throw new Error("Response body is null");
1583
+ }
1584
+ for await (const record of this.streamProcessor(response.body)) {
1585
+ if (typeof record === "string") {
1586
+ onRecord(JSON.parse(record));
1587
+ } else {
1588
+ onRecord(record);
1589
+ }
1590
+ }
1591
+ }
1592
+ /**
1593
+ * Creates a new ReadableStream from an iterable or async iterable of objects,
1594
+ * serializing each as JSON and separating them with the record separator (\x1E).
1595
+ *
1596
+ * @param records - An iterable or async iterable of objects to stream
1597
+ * @returns A ReadableStream emitting the records as JSON strings separated by the record separator
1598
+ */
1599
+ static createRecordStream(records) {
1600
+ const encoder = new TextEncoder();
1601
+ return new ReadableStream({
1602
+ async start(controller) {
1603
+ try {
1604
+ for await (const record of records) {
1605
+ const json = JSON.stringify(record) + RECORD_SEPARATOR2;
1606
+ controller.enqueue(encoder.encode(json));
1607
+ }
1608
+ controller.close();
1609
+ } catch (err) {
1610
+ controller.error(err);
1611
+ }
1612
+ }
1613
+ });
1614
+ }
1615
+ };
1616
+
1617
+ // src/resources/a2a.ts
1618
+ var A2A = class extends BaseResource {
1619
+ constructor(options, agentId) {
1620
+ super(options);
1621
+ this.agentId = agentId;
1622
+ }
1623
+ /**
1624
+ * Get the agent card with metadata about the agent
1625
+ * @returns Promise containing the agent card information
1626
+ */
1627
+ async getCard() {
1628
+ return this.request(`/.well-known/${this.agentId}/agent-card.json`);
1629
+ }
1630
+ /**
1631
+ * Send a message to the agent and gets a message or task response
1632
+ * @param params - Parameters for the task
1633
+ * @returns Promise containing the response
1634
+ */
1635
+ async sendMessage(params) {
1636
+ const response = await this.request(`/a2a/${this.agentId}`, {
1637
+ method: "POST",
1638
+ body: {
1639
+ method: "message/send",
1640
+ params
1641
+ }
1642
+ });
1643
+ return response;
1644
+ }
1645
+ /**
1646
+ * Sends a message to an agent to initiate/continue a task and subscribes
1647
+ * the client to real-time updates for that task via Server-Sent Events (SSE).
1648
+ * @param params - Parameters for the task
1649
+ * @returns A stream of Server-Sent Events. Each SSE `data` field contains a `SendStreamingMessageResponse`
1650
+ */
1651
+ async sendStreamingMessage(params) {
1652
+ const response = await this.request(`/a2a/${this.agentId}`, {
1653
+ method: "POST",
1654
+ body: {
1655
+ method: "message/stream",
1656
+ params
1657
+ }
1658
+ });
1659
+ return response;
1660
+ }
1661
+ /**
1662
+ * Get the status and result of a task
1663
+ * @param params - Parameters for querying the task
1664
+ * @returns Promise containing the task response
1665
+ */
1666
+ async getTask(params) {
1667
+ const response = await this.request(`/a2a/${this.agentId}`, {
1668
+ method: "POST",
1669
+ body: {
1670
+ method: "tasks/get",
1671
+ params
1672
+ }
1673
+ });
1674
+ return response;
1675
+ }
1676
+ /**
1677
+ * Cancel a running task
1678
+ * @param params - Parameters identifying the task to cancel
1679
+ * @returns Promise containing the task response
1680
+ */
1681
+ async cancelTask(params) {
1682
+ return this.request(`/a2a/${this.agentId}`, {
1683
+ method: "POST",
1684
+ body: {
1685
+ method: "tasks/cancel",
1686
+ params
1687
+ }
1688
+ });
1689
+ }
1690
+ };
1691
+
1692
+ // src/resources/mcp-tool.ts
1693
+ var MCPTool = class extends BaseResource {
1694
+ serverId;
1695
+ toolId;
1696
+ constructor(options, serverId, toolId) {
1697
+ super(options);
771
1698
  this.serverId = serverId;
1699
+ this.toolId = toolId;
1700
+ }
1701
+ /**
1702
+ * Retrieves details about this specific tool from the MCP server.
1703
+ * @returns Promise containing the tool's information (name, description, schema).
1704
+ */
1705
+ details() {
1706
+ return this.request(`/api/mcp/${this.serverId}/tools/${this.toolId}`);
1707
+ }
1708
+ /**
1709
+ * Executes this specific tool on the MCP server.
1710
+ * @param params - Parameters for tool execution, including data/args and optional runtimeContext.
1711
+ * @returns Promise containing the result of the tool execution.
1712
+ */
1713
+ execute(params) {
1714
+ const body = {};
1715
+ if (params.data !== void 0) body.data = params.data;
1716
+ if (params.runtimeContext !== void 0) {
1717
+ body.runtimeContext = params.runtimeContext;
1718
+ }
1719
+ return this.request(`/api/mcp/${this.serverId}/tools/${this.toolId}/execute`, {
1720
+ method: "POST",
1721
+ body: Object.keys(body).length > 0 ? body : void 0
1722
+ });
1723
+ }
1724
+ };
1725
+
1726
+ // src/resources/network-memory-thread.ts
1727
+ var NetworkMemoryThread = class extends BaseResource {
1728
+ constructor(options, threadId, networkId) {
1729
+ super(options);
1730
+ this.threadId = threadId;
1731
+ this.networkId = networkId;
1732
+ }
1733
+ /**
1734
+ * Retrieves the memory thread details
1735
+ * @returns Promise containing thread details including title and metadata
1736
+ */
1737
+ get() {
1738
+ return this.request(`/api/memory/network/threads/${this.threadId}?networkId=${this.networkId}`);
1739
+ }
1740
+ /**
1741
+ * Updates the memory thread properties
1742
+ * @param params - Update parameters including title and metadata
1743
+ * @returns Promise containing updated thread details
1744
+ */
1745
+ update(params) {
1746
+ return this.request(`/api/memory/network/threads/${this.threadId}?networkId=${this.networkId}`, {
1747
+ method: "PATCH",
1748
+ body: params
1749
+ });
1750
+ }
1751
+ /**
1752
+ * Deletes the memory thread
1753
+ * @returns Promise containing deletion result
1754
+ */
1755
+ delete() {
1756
+ return this.request(`/api/memory/network/threads/${this.threadId}?networkId=${this.networkId}`, {
1757
+ method: "DELETE"
1758
+ });
1759
+ }
1760
+ /**
1761
+ * Retrieves messages associated with the thread
1762
+ * @param params - Optional parameters including limit for number of messages to retrieve
1763
+ * @returns Promise containing thread messages and UI messages
1764
+ */
1765
+ getMessages(params) {
1766
+ const query = new URLSearchParams({
1767
+ networkId: this.networkId,
1768
+ ...params?.limit ? { limit: params.limit.toString() } : {}
1769
+ });
1770
+ return this.request(`/api/memory/network/threads/${this.threadId}/messages?${query.toString()}`);
772
1771
  }
773
1772
  /**
774
- * Get details about the MCP server
775
- * @returns Promise containing server details
1773
+ * Deletes one or more messages from the thread
1774
+ * @param messageIds - Can be a single message ID (string), array of message IDs,
1775
+ * message object with id property, or array of message objects
1776
+ * @returns Promise containing deletion result
1777
+ */
1778
+ deleteMessages(messageIds) {
1779
+ const query = new URLSearchParams({
1780
+ networkId: this.networkId
1781
+ });
1782
+ return this.request(`/api/memory/network/messages/delete?${query.toString()}`, {
1783
+ method: "POST",
1784
+ body: { messageIds }
1785
+ });
1786
+ }
1787
+ };
1788
+
1789
+ // src/resources/vNextNetwork.ts
1790
+ var RECORD_SEPARATOR3 = "";
1791
+ var VNextNetwork = class extends BaseResource {
1792
+ constructor(options, networkId) {
1793
+ super(options);
1794
+ this.networkId = networkId;
1795
+ }
1796
+ /**
1797
+ * Retrieves details about the network
1798
+ * @returns Promise containing vNext network details
776
1799
  */
777
1800
  details() {
778
- return this.request(`/api/mcp/servers/${this.serverId}`);
1801
+ return this.request(`/api/networks/v-next/${this.networkId}`);
1802
+ }
1803
+ /**
1804
+ * Generates a response from the v-next network
1805
+ * @param params - Generation parameters including message
1806
+ * @returns Promise containing the generated response
1807
+ */
1808
+ generate(params) {
1809
+ return this.request(`/api/networks/v-next/${this.networkId}/generate`, {
1810
+ method: "POST",
1811
+ body: {
1812
+ ...params,
1813
+ runtimeContext: parseClientRuntimeContext(params.runtimeContext)
1814
+ }
1815
+ });
1816
+ }
1817
+ /**
1818
+ * Generates a response from the v-next network using multiple primitives
1819
+ * @param params - Generation parameters including message
1820
+ * @returns Promise containing the generated response
1821
+ */
1822
+ loop(params) {
1823
+ return this.request(`/api/networks/v-next/${this.networkId}/loop`, {
1824
+ method: "POST",
1825
+ body: {
1826
+ ...params,
1827
+ runtimeContext: parseClientRuntimeContext(params.runtimeContext)
1828
+ }
1829
+ });
1830
+ }
1831
+ async *streamProcessor(stream) {
1832
+ const reader = stream.getReader();
1833
+ let doneReading = false;
1834
+ let buffer = "";
1835
+ try {
1836
+ while (!doneReading) {
1837
+ const { done, value } = await reader.read();
1838
+ doneReading = done;
1839
+ if (done && !value) continue;
1840
+ try {
1841
+ const decoded = value ? new TextDecoder().decode(value) : "";
1842
+ const chunks = (buffer + decoded).split(RECORD_SEPARATOR3);
1843
+ buffer = chunks.pop() || "";
1844
+ for (const chunk of chunks) {
1845
+ if (chunk) {
1846
+ if (typeof chunk === "string") {
1847
+ try {
1848
+ const parsedChunk = JSON.parse(chunk);
1849
+ yield parsedChunk;
1850
+ } catch {
1851
+ }
1852
+ }
1853
+ }
1854
+ }
1855
+ } catch {
1856
+ }
1857
+ }
1858
+ if (buffer) {
1859
+ try {
1860
+ yield JSON.parse(buffer);
1861
+ } catch {
1862
+ }
1863
+ }
1864
+ } finally {
1865
+ reader.cancel().catch(() => {
1866
+ });
1867
+ }
1868
+ }
1869
+ /**
1870
+ * Streams a response from the v-next network
1871
+ * @param params - Stream parameters including message
1872
+ * @returns Promise containing the results
1873
+ */
1874
+ async stream(params, onRecord) {
1875
+ const response = await this.request(`/api/networks/v-next/${this.networkId}/stream`, {
1876
+ method: "POST",
1877
+ body: {
1878
+ ...params,
1879
+ runtimeContext: parseClientRuntimeContext(params.runtimeContext)
1880
+ },
1881
+ stream: true
1882
+ });
1883
+ if (!response.ok) {
1884
+ throw new Error(`Failed to stream vNext network: ${response.statusText}`);
1885
+ }
1886
+ if (!response.body) {
1887
+ throw new Error("Response body is null");
1888
+ }
1889
+ for await (const record of this.streamProcessor(response.body)) {
1890
+ if (typeof record === "string") {
1891
+ onRecord(JSON.parse(record));
1892
+ } else {
1893
+ onRecord(record);
1894
+ }
1895
+ }
1896
+ }
1897
+ /**
1898
+ * Streams a response from the v-next network loop
1899
+ * @param params - Stream parameters including message
1900
+ * @returns Promise containing the results
1901
+ */
1902
+ async loopStream(params, onRecord) {
1903
+ const response = await this.request(`/api/networks/v-next/${this.networkId}/loop-stream`, {
1904
+ method: "POST",
1905
+ body: {
1906
+ ...params,
1907
+ runtimeContext: parseClientRuntimeContext(params.runtimeContext)
1908
+ },
1909
+ stream: true
1910
+ });
1911
+ if (!response.ok) {
1912
+ throw new Error(`Failed to stream vNext network loop: ${response.statusText}`);
1913
+ }
1914
+ if (!response.body) {
1915
+ throw new Error("Response body is null");
1916
+ }
1917
+ for await (const record of this.streamProcessor(response.body)) {
1918
+ if (typeof record === "string") {
1919
+ onRecord(JSON.parse(record));
1920
+ } else {
1921
+ onRecord(record);
1922
+ }
1923
+ }
779
1924
  }
780
1925
  };
781
1926
 
@@ -791,6 +1936,21 @@ var MastraClient = class extends BaseResource {
791
1936
  getAgents() {
792
1937
  return this.request("/api/agents");
793
1938
  }
1939
+ async getAGUI({ resourceId }) {
1940
+ const agents = await this.getAgents();
1941
+ return Object.entries(agents).reduce(
1942
+ (acc, [agentId]) => {
1943
+ const agent = this.getAgent(agentId);
1944
+ acc[agentId] = new AGUIAdapter({
1945
+ agentId,
1946
+ agent,
1947
+ resourceId
1948
+ });
1949
+ return acc;
1950
+ },
1951
+ {}
1952
+ );
1953
+ }
794
1954
  /**
795
1955
  * Gets an agent instance by ID
796
1956
  * @param agentId - ID of the agent to retrieve
@@ -841,6 +2001,48 @@ var MastraClient = class extends BaseResource {
841
2001
  getMemoryStatus(agentId) {
842
2002
  return this.request(`/api/memory/status?agentId=${agentId}`);
843
2003
  }
2004
+ /**
2005
+ * Retrieves memory threads for a resource
2006
+ * @param params - Parameters containing the resource ID
2007
+ * @returns Promise containing array of memory threads
2008
+ */
2009
+ getNetworkMemoryThreads(params) {
2010
+ return this.request(`/api/memory/network/threads?resourceid=${params.resourceId}&networkId=${params.networkId}`);
2011
+ }
2012
+ /**
2013
+ * Creates a new memory thread
2014
+ * @param params - Parameters for creating the memory thread
2015
+ * @returns Promise containing the created memory thread
2016
+ */
2017
+ createNetworkMemoryThread(params) {
2018
+ return this.request(`/api/memory/network/threads?networkId=${params.networkId}`, { method: "POST", body: params });
2019
+ }
2020
+ /**
2021
+ * Gets a memory thread instance by ID
2022
+ * @param threadId - ID of the memory thread to retrieve
2023
+ * @returns MemoryThread instance
2024
+ */
2025
+ getNetworkMemoryThread(threadId, networkId) {
2026
+ return new NetworkMemoryThread(this.options, threadId, networkId);
2027
+ }
2028
+ /**
2029
+ * Saves messages to memory
2030
+ * @param params - Parameters containing messages to save
2031
+ * @returns Promise containing the saved messages
2032
+ */
2033
+ saveNetworkMessageToMemory(params) {
2034
+ return this.request(`/api/memory/network/save-messages?networkId=${params.networkId}`, {
2035
+ method: "POST",
2036
+ body: params
2037
+ });
2038
+ }
2039
+ /**
2040
+ * Gets the status of the memory system
2041
+ * @returns Promise containing memory system status
2042
+ */
2043
+ getNetworkMemoryStatus(networkId) {
2044
+ return this.request(`/api/memory/network/status?networkId=${networkId}`);
2045
+ }
844
2046
  /**
845
2047
  * Retrieves all available tools
846
2048
  * @returns Promise containing map of tool IDs to tool details
@@ -854,7 +2056,22 @@ var MastraClient = class extends BaseResource {
854
2056
  * @returns Tool instance
855
2057
  */
856
2058
  getTool(toolId) {
857
- return new Tool(this.options, toolId);
2059
+ return new Tool2(this.options, toolId);
2060
+ }
2061
+ /**
2062
+ * Retrieves all available legacy workflows
2063
+ * @returns Promise containing map of legacy workflow IDs to legacy workflow details
2064
+ */
2065
+ getLegacyWorkflows() {
2066
+ return this.request("/api/workflows/legacy");
2067
+ }
2068
+ /**
2069
+ * Gets a legacy workflow instance by ID
2070
+ * @param workflowId - ID of the legacy workflow to retrieve
2071
+ * @returns Legacy Workflow instance
2072
+ */
2073
+ getLegacyWorkflow(workflowId) {
2074
+ return new LegacyWorkflow(this.options, workflowId);
858
2075
  }
859
2076
  /**
860
2077
  * Retrieves all available workflows
@@ -871,21 +2088,6 @@ var MastraClient = class extends BaseResource {
871
2088
  getWorkflow(workflowId) {
872
2089
  return new Workflow(this.options, workflowId);
873
2090
  }
874
- /**
875
- * Retrieves all available vNext workflows
876
- * @returns Promise containing map of vNext workflow IDs to vNext workflow details
877
- */
878
- getVNextWorkflows() {
879
- return this.request("/api/workflows/v-next");
880
- }
881
- /**
882
- * Gets a vNext workflow instance by ID
883
- * @param workflowId - ID of the vNext workflow to retrieve
884
- * @returns vNext Workflow instance
885
- */
886
- getVNextWorkflow(workflowId) {
887
- return new VNextWorkflow(this.options, workflowId);
888
- }
889
2091
  /**
890
2092
  * Gets a vector instance by name
891
2093
  * @param vectorName - Name of the vector to retrieve
@@ -900,7 +2102,41 @@ var MastraClient = class extends BaseResource {
900
2102
  * @returns Promise containing array of log messages
901
2103
  */
902
2104
  getLogs(params) {
903
- return this.request(`/api/logs?transportId=${params.transportId}`);
2105
+ const { transportId, fromDate, toDate, logLevel, filters, page, perPage } = params;
2106
+ const _filters = filters ? Object.entries(filters).map(([key, value]) => `${key}:${value}`) : [];
2107
+ const searchParams = new URLSearchParams();
2108
+ if (transportId) {
2109
+ searchParams.set("transportId", transportId);
2110
+ }
2111
+ if (fromDate) {
2112
+ searchParams.set("fromDate", fromDate.toISOString());
2113
+ }
2114
+ if (toDate) {
2115
+ searchParams.set("toDate", toDate.toISOString());
2116
+ }
2117
+ if (logLevel) {
2118
+ searchParams.set("logLevel", logLevel);
2119
+ }
2120
+ if (page) {
2121
+ searchParams.set("page", String(page));
2122
+ }
2123
+ if (perPage) {
2124
+ searchParams.set("perPage", String(perPage));
2125
+ }
2126
+ if (_filters) {
2127
+ if (Array.isArray(_filters)) {
2128
+ for (const filter of _filters) {
2129
+ searchParams.append("filters", filter);
2130
+ }
2131
+ } else {
2132
+ searchParams.set("filters", _filters);
2133
+ }
2134
+ }
2135
+ if (searchParams.size) {
2136
+ return this.request(`/api/logs?${searchParams}`);
2137
+ } else {
2138
+ return this.request(`/api/logs`);
2139
+ }
904
2140
  }
905
2141
  /**
906
2142
  * Gets logs for a specific run
@@ -908,7 +2144,44 @@ var MastraClient = class extends BaseResource {
908
2144
  * @returns Promise containing array of log messages
909
2145
  */
910
2146
  getLogForRun(params) {
911
- return this.request(`/api/logs/${params.runId}?transportId=${params.transportId}`);
2147
+ const { runId, transportId, fromDate, toDate, logLevel, filters, page, perPage } = params;
2148
+ const _filters = filters ? Object.entries(filters).map(([key, value]) => `${key}:${value}`) : [];
2149
+ const searchParams = new URLSearchParams();
2150
+ if (runId) {
2151
+ searchParams.set("runId", runId);
2152
+ }
2153
+ if (transportId) {
2154
+ searchParams.set("transportId", transportId);
2155
+ }
2156
+ if (fromDate) {
2157
+ searchParams.set("fromDate", fromDate.toISOString());
2158
+ }
2159
+ if (toDate) {
2160
+ searchParams.set("toDate", toDate.toISOString());
2161
+ }
2162
+ if (logLevel) {
2163
+ searchParams.set("logLevel", logLevel);
2164
+ }
2165
+ if (page) {
2166
+ searchParams.set("page", String(page));
2167
+ }
2168
+ if (perPage) {
2169
+ searchParams.set("perPage", String(perPage));
2170
+ }
2171
+ if (_filters) {
2172
+ if (Array.isArray(_filters)) {
2173
+ for (const filter of _filters) {
2174
+ searchParams.append("filters", filter);
2175
+ }
2176
+ } else {
2177
+ searchParams.set("filters", _filters);
2178
+ }
2179
+ }
2180
+ if (searchParams.size) {
2181
+ return this.request(`/api/logs/${runId}?${searchParams}`);
2182
+ } else {
2183
+ return this.request(`/api/logs/${runId}`);
2184
+ }
912
2185
  }
913
2186
  /**
914
2187
  * List of all log transports
@@ -966,6 +2239,13 @@ var MastraClient = class extends BaseResource {
966
2239
  getNetworks() {
967
2240
  return this.request("/api/networks");
968
2241
  }
2242
+ /**
2243
+ * Retrieves all available vNext networks
2244
+ * @returns Promise containing map of vNext network IDs to vNext network details
2245
+ */
2246
+ getVNextNetworks() {
2247
+ return this.request("/api/networks/v-next");
2248
+ }
969
2249
  /**
970
2250
  * Gets a network instance by ID
971
2251
  * @param networkId - ID of the network to retrieve
@@ -975,20 +2255,191 @@ var MastraClient = class extends BaseResource {
975
2255
  return new Network(this.options, networkId);
976
2256
  }
977
2257
  /**
978
- * Retrieves all available MCP servers
979
- * @returns Promise containing map of MCP server IDs to server details
2258
+ * Gets a vNext network instance by ID
2259
+ * @param networkId - ID of the vNext network to retrieve
2260
+ * @returns vNext Network instance
2261
+ */
2262
+ getVNextNetwork(networkId) {
2263
+ return new VNextNetwork(this.options, networkId);
2264
+ }
2265
+ /**
2266
+ * Retrieves a list of available MCP servers.
2267
+ * @param params - Optional parameters for pagination (limit, offset).
2268
+ * @returns Promise containing the list of MCP servers and pagination info.
2269
+ */
2270
+ getMcpServers(params) {
2271
+ const searchParams = new URLSearchParams();
2272
+ if (params?.limit !== void 0) {
2273
+ searchParams.set("limit", String(params.limit));
2274
+ }
2275
+ if (params?.offset !== void 0) {
2276
+ searchParams.set("offset", String(params.offset));
2277
+ }
2278
+ const queryString = searchParams.toString();
2279
+ return this.request(`/api/mcp/v0/servers${queryString ? `?${queryString}` : ""}`);
2280
+ }
2281
+ /**
2282
+ * Retrieves detailed information for a specific MCP server.
2283
+ * @param serverId - The ID of the MCP server to retrieve.
2284
+ * @param params - Optional parameters, e.g., specific version.
2285
+ * @returns Promise containing the detailed MCP server information.
2286
+ */
2287
+ getMcpServerDetails(serverId, params) {
2288
+ const searchParams = new URLSearchParams();
2289
+ if (params?.version) {
2290
+ searchParams.set("version", params.version);
2291
+ }
2292
+ const queryString = searchParams.toString();
2293
+ return this.request(`/api/mcp/v0/servers/${serverId}${queryString ? `?${queryString}` : ""}`);
2294
+ }
2295
+ /**
2296
+ * Retrieves a list of tools for a specific MCP server.
2297
+ * @param serverId - The ID of the MCP server.
2298
+ * @returns Promise containing the list of tools.
2299
+ */
2300
+ getMcpServerTools(serverId) {
2301
+ return this.request(`/api/mcp/${serverId}/tools`);
2302
+ }
2303
+ /**
2304
+ * Gets an MCPTool resource instance for a specific tool on an MCP server.
2305
+ * This instance can then be used to fetch details or execute the tool.
2306
+ * @param serverId - The ID of the MCP server.
2307
+ * @param toolId - The ID of the tool.
2308
+ * @returns MCPTool instance.
980
2309
  */
981
- getMCPServers() {
982
- return this.request("/api/mcp/servers");
2310
+ getMcpServerTool(serverId, toolId) {
2311
+ return new MCPTool(this.options, serverId, toolId);
2312
+ }
2313
+ /**
2314
+ * Gets an A2A client for interacting with an agent via the A2A protocol
2315
+ * @param agentId - ID of the agent to interact with
2316
+ * @returns A2A client instance
2317
+ */
2318
+ getA2A(agentId) {
2319
+ return new A2A(this.options, agentId);
2320
+ }
2321
+ /**
2322
+ * Retrieves the working memory for a specific thread (optionally resource-scoped).
2323
+ * @param agentId - ID of the agent.
2324
+ * @param threadId - ID of the thread.
2325
+ * @param resourceId - Optional ID of the resource.
2326
+ * @returns Working memory for the specified thread or resource.
2327
+ */
2328
+ getWorkingMemory({
2329
+ agentId,
2330
+ threadId,
2331
+ resourceId
2332
+ }) {
2333
+ return this.request(`/api/memory/threads/${threadId}/working-memory?agentId=${agentId}&resourceId=${resourceId}`);
2334
+ }
2335
+ /**
2336
+ * Updates the working memory for a specific thread (optionally resource-scoped).
2337
+ * @param agentId - ID of the agent.
2338
+ * @param threadId - ID of the thread.
2339
+ * @param workingMemory - The new working memory content.
2340
+ * @param resourceId - Optional ID of the resource.
2341
+ */
2342
+ updateWorkingMemory({
2343
+ agentId,
2344
+ threadId,
2345
+ workingMemory,
2346
+ resourceId
2347
+ }) {
2348
+ return this.request(`/api/memory/threads/${threadId}/working-memory?agentId=${agentId}`, {
2349
+ method: "POST",
2350
+ body: {
2351
+ workingMemory,
2352
+ resourceId
2353
+ }
2354
+ });
2355
+ }
2356
+ /**
2357
+ * Retrieves all available scorers
2358
+ * @returns Promise containing list of available scorers
2359
+ */
2360
+ getScorers() {
2361
+ return this.request("/api/scores/scorers");
2362
+ }
2363
+ /**
2364
+ * Retrieves a scorer by ID
2365
+ * @param scorerId - ID of the scorer to retrieve
2366
+ * @returns Promise containing the scorer
2367
+ */
2368
+ getScorer(scorerId) {
2369
+ return this.request(`/api/scores/scorers/${scorerId}`);
2370
+ }
2371
+ getScoresByScorerId(params) {
2372
+ const { page, perPage, scorerId, entityId, entityType } = params;
2373
+ const searchParams = new URLSearchParams();
2374
+ if (entityId) {
2375
+ searchParams.set("entityId", entityId);
2376
+ }
2377
+ if (entityType) {
2378
+ searchParams.set("entityType", entityType);
2379
+ }
2380
+ if (page !== void 0) {
2381
+ searchParams.set("page", String(page));
2382
+ }
2383
+ if (perPage !== void 0) {
2384
+ searchParams.set("perPage", String(perPage));
2385
+ }
2386
+ const queryString = searchParams.toString();
2387
+ return this.request(`/api/scores/scorer/${scorerId}${queryString ? `?${queryString}` : ""}`);
2388
+ }
2389
+ /**
2390
+ * Retrieves scores by run ID
2391
+ * @param params - Parameters containing run ID and pagination options
2392
+ * @returns Promise containing scores and pagination info
2393
+ */
2394
+ getScoresByRunId(params) {
2395
+ const { runId, page, perPage } = params;
2396
+ const searchParams = new URLSearchParams();
2397
+ if (page !== void 0) {
2398
+ searchParams.set("page", String(page));
2399
+ }
2400
+ if (perPage !== void 0) {
2401
+ searchParams.set("perPage", String(perPage));
2402
+ }
2403
+ const queryString = searchParams.toString();
2404
+ return this.request(`/api/scores/run/${runId}${queryString ? `?${queryString}` : ""}`);
2405
+ }
2406
+ /**
2407
+ * Retrieves scores by entity ID and type
2408
+ * @param params - Parameters containing entity ID, type, and pagination options
2409
+ * @returns Promise containing scores and pagination info
2410
+ */
2411
+ getScoresByEntityId(params) {
2412
+ const { entityId, entityType, page, perPage } = params;
2413
+ const searchParams = new URLSearchParams();
2414
+ if (page !== void 0) {
2415
+ searchParams.set("page", String(page));
2416
+ }
2417
+ if (perPage !== void 0) {
2418
+ searchParams.set("perPage", String(perPage));
2419
+ }
2420
+ const queryString = searchParams.toString();
2421
+ return this.request(`/api/scores/entity/${entityType}/${entityId}${queryString ? `?${queryString}` : ""}`);
2422
+ }
2423
+ /**
2424
+ * Saves a score
2425
+ * @param params - Parameters containing the score data to save
2426
+ * @returns Promise containing the saved score
2427
+ */
2428
+ saveScore(params) {
2429
+ return this.request("/api/scores", {
2430
+ method: "POST",
2431
+ body: params
2432
+ });
983
2433
  }
984
2434
  /**
985
- * Gets an MCP server instance by ID
986
- * @param serverId - ID of the MCP server to retrieve
987
- * @returns MCPServer instance
2435
+ * Retrieves model providers with available keys
2436
+ * @returns Promise containing model providers with available keys
988
2437
  */
989
- getMCPServer(serverId) {
990
- return new MCPServer(this.options, serverId);
2438
+ getModelProviders() {
2439
+ return this.request(`/api/model-providers`);
991
2440
  }
992
2441
  };
993
2442
 
994
2443
  export { MastraClient };
2444
+ //# sourceMappingURL=index.js.map
2445
+ //# sourceMappingURL=index.js.map