@mastra/client-js 0.0.0-a2a-20250421213654 → 0.0.0-add-runtime-context-to-openai-realtime-20250516201052

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.
package/dist/index.js CHANGED
@@ -1,8 +1,200 @@
1
- import { ZodSchema } from 'zod';
2
- import { zodToJsonSchema } from 'zod-to-json-schema';
1
+ import { AbstractAgent, EventType } from '@ag-ui/client';
2
+ import { Observable } from 'rxjs';
3
3
  import { processDataStream } from '@ai-sdk/ui-utils';
4
+ import { ZodSchema } from 'zod';
5
+ import originalZodToJsonSchema from 'zod-to-json-schema';
4
6
 
5
- // src/resources/agent.ts
7
+ // src/adapters/agui.ts
8
+ var AGUIAdapter = class extends AbstractAgent {
9
+ agent;
10
+ resourceId;
11
+ constructor({ agent, agentId, resourceId, ...rest }) {
12
+ super({
13
+ agentId,
14
+ ...rest
15
+ });
16
+ this.agent = agent;
17
+ this.resourceId = resourceId;
18
+ }
19
+ run(input) {
20
+ return new Observable((subscriber) => {
21
+ const convertedMessages = convertMessagesToMastraMessages(input.messages);
22
+ subscriber.next({
23
+ type: EventType.RUN_STARTED,
24
+ threadId: input.threadId,
25
+ runId: input.runId
26
+ });
27
+ this.agent.stream({
28
+ threadId: input.threadId,
29
+ resourceId: this.resourceId ?? "",
30
+ runId: input.runId,
31
+ messages: convertedMessages,
32
+ clientTools: input.tools.reduce(
33
+ (acc, tool) => {
34
+ acc[tool.name] = {
35
+ id: tool.name,
36
+ description: tool.description,
37
+ inputSchema: tool.parameters
38
+ };
39
+ return acc;
40
+ },
41
+ {}
42
+ )
43
+ }).then((response) => {
44
+ let currentMessageId = void 0;
45
+ let isInTextMessage = false;
46
+ return response.processDataStream({
47
+ onTextPart: (text) => {
48
+ if (currentMessageId === void 0) {
49
+ currentMessageId = generateUUID();
50
+ const message2 = {
51
+ type: EventType.TEXT_MESSAGE_START,
52
+ messageId: currentMessageId,
53
+ role: "assistant"
54
+ };
55
+ subscriber.next(message2);
56
+ isInTextMessage = true;
57
+ }
58
+ const message = {
59
+ type: EventType.TEXT_MESSAGE_CONTENT,
60
+ messageId: currentMessageId,
61
+ delta: text
62
+ };
63
+ subscriber.next(message);
64
+ },
65
+ onFinishMessagePart: () => {
66
+ if (currentMessageId !== void 0) {
67
+ const message = {
68
+ type: EventType.TEXT_MESSAGE_END,
69
+ messageId: currentMessageId
70
+ };
71
+ subscriber.next(message);
72
+ isInTextMessage = false;
73
+ }
74
+ subscriber.next({
75
+ type: EventType.RUN_FINISHED,
76
+ threadId: input.threadId,
77
+ runId: input.runId
78
+ });
79
+ subscriber.complete();
80
+ },
81
+ onToolCallPart(streamPart) {
82
+ const parentMessageId = currentMessageId || generateUUID();
83
+ if (isInTextMessage) {
84
+ const message = {
85
+ type: EventType.TEXT_MESSAGE_END,
86
+ messageId: parentMessageId
87
+ };
88
+ subscriber.next(message);
89
+ isInTextMessage = false;
90
+ }
91
+ subscriber.next({
92
+ type: EventType.TOOL_CALL_START,
93
+ toolCallId: streamPart.toolCallId,
94
+ toolCallName: streamPart.toolName,
95
+ parentMessageId
96
+ });
97
+ subscriber.next({
98
+ type: EventType.TOOL_CALL_ARGS,
99
+ toolCallId: streamPart.toolCallId,
100
+ delta: JSON.stringify(streamPart.args),
101
+ parentMessageId
102
+ });
103
+ subscriber.next({
104
+ type: EventType.TOOL_CALL_END,
105
+ toolCallId: streamPart.toolCallId,
106
+ parentMessageId
107
+ });
108
+ }
109
+ });
110
+ }).catch((error) => {
111
+ console.error("error", error);
112
+ subscriber.error(error);
113
+ });
114
+ return () => {
115
+ };
116
+ });
117
+ }
118
+ };
119
+ function generateUUID() {
120
+ if (typeof crypto !== "undefined") {
121
+ if (typeof crypto.randomUUID === "function") {
122
+ return crypto.randomUUID();
123
+ }
124
+ if (typeof crypto.getRandomValues === "function") {
125
+ const buffer = new Uint8Array(16);
126
+ crypto.getRandomValues(buffer);
127
+ buffer[6] = buffer[6] & 15 | 64;
128
+ buffer[8] = buffer[8] & 63 | 128;
129
+ let hex = "";
130
+ for (let i = 0; i < 16; i++) {
131
+ hex += buffer[i].toString(16).padStart(2, "0");
132
+ if (i === 3 || i === 5 || i === 7 || i === 9) hex += "-";
133
+ }
134
+ return hex;
135
+ }
136
+ }
137
+ return "xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g, (c) => {
138
+ const r = Math.random() * 16 | 0;
139
+ const v = c === "x" ? r : r & 3 | 8;
140
+ return v.toString(16);
141
+ });
142
+ }
143
+ function convertMessagesToMastraMessages(messages) {
144
+ const result = [];
145
+ for (const message of messages) {
146
+ if (message.role === "assistant") {
147
+ const parts = message.content ? [{ type: "text", text: message.content }] : [];
148
+ for (const toolCall of message.toolCalls ?? []) {
149
+ parts.push({
150
+ type: "tool-call",
151
+ toolCallId: toolCall.id,
152
+ toolName: toolCall.function.name,
153
+ args: JSON.parse(toolCall.function.arguments)
154
+ });
155
+ }
156
+ result.push({
157
+ role: "assistant",
158
+ content: parts
159
+ });
160
+ if (message.toolCalls?.length) {
161
+ result.push({
162
+ role: "tool",
163
+ content: message.toolCalls.map((toolCall) => ({
164
+ type: "tool-result",
165
+ toolCallId: toolCall.id,
166
+ toolName: toolCall.function.name,
167
+ result: JSON.parse(toolCall.function.arguments)
168
+ }))
169
+ });
170
+ }
171
+ } else if (message.role === "user") {
172
+ result.push({
173
+ role: "user",
174
+ content: message.content || ""
175
+ });
176
+ } else if (message.role === "tool") {
177
+ result.push({
178
+ role: "tool",
179
+ content: [
180
+ {
181
+ type: "tool-result",
182
+ toolCallId: message.toolCallId,
183
+ toolName: "unknown",
184
+ result: message.content
185
+ }
186
+ ]
187
+ });
188
+ }
189
+ }
190
+ return result;
191
+ }
192
+ function zodToJsonSchema(zodSchema) {
193
+ if (!(zodSchema instanceof ZodSchema)) {
194
+ return zodSchema;
195
+ }
196
+ return originalZodToJsonSchema(zodSchema, { $refStrategy: "none" });
197
+ }
6
198
 
7
199
  // src/resources/base.ts
8
200
  var BaseResource = class {
@@ -22,7 +214,7 @@ var BaseResource = class {
22
214
  let delay = backoffMs;
23
215
  for (let attempt = 0; attempt <= retries; attempt++) {
24
216
  try {
25
- const response = await fetch(`${baseUrl}${path}`, {
217
+ const response = await fetch(`${baseUrl.replace(/\/$/, "")}${path}`, {
26
218
  ...options,
27
219
  headers: {
28
220
  ...headers,
@@ -133,8 +325,9 @@ var Agent = class extends BaseResource {
133
325
  generate(params) {
134
326
  const processedParams = {
135
327
  ...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
328
+ output: params.output ? zodToJsonSchema(params.output) : void 0,
329
+ experimental_output: params.experimental_output ? zodToJsonSchema(params.experimental_output) : void 0,
330
+ runtimeContext: params.runtimeContext ? Object.fromEntries(params.runtimeContext.entries()) : void 0
138
331
  };
139
332
  return this.request(`/api/agents/${this.agentId}/generate`, {
140
333
  method: "POST",
@@ -149,8 +342,9 @@ var Agent = class extends BaseResource {
149
342
  async stream(params) {
150
343
  const processedParams = {
151
344
  ...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
345
+ output: params.output ? zodToJsonSchema(params.output) : void 0,
346
+ experimental_output: params.experimental_output ? zodToJsonSchema(params.experimental_output) : void 0,
347
+ runtimeContext: params.runtimeContext ? Object.fromEntries(params.runtimeContext.entries()) : void 0
154
348
  };
155
349
  const response = await this.request(`/api/agents/${this.agentId}/stream`, {
156
350
  method: "POST",
@@ -176,6 +370,22 @@ var Agent = class extends BaseResource {
176
370
  getTool(toolId) {
177
371
  return this.request(`/api/agents/${this.agentId}/tools/${toolId}`);
178
372
  }
373
+ /**
374
+ * Executes a tool for the agent
375
+ * @param toolId - ID of the tool to execute
376
+ * @param params - Parameters required for tool execution
377
+ * @returns Promise containing the tool execution results
378
+ */
379
+ executeTool(toolId, params) {
380
+ const body = {
381
+ data: params.data,
382
+ runtimeContext: params.runtimeContext ? Object.fromEntries(params.runtimeContext.entries()) : void 0
383
+ };
384
+ return this.request(`/api/agents/${this.agentId}/tools/${toolId}/execute`, {
385
+ method: "POST",
386
+ body
387
+ });
388
+ }
179
389
  /**
180
390
  * Retrieves evaluation results for the agent
181
391
  * @returns Promise containing agent evaluations
@@ -211,8 +421,8 @@ var Network = class extends BaseResource {
211
421
  generate(params) {
212
422
  const processedParams = {
213
423
  ...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
424
+ output: zodToJsonSchema(params.output),
425
+ experimental_output: zodToJsonSchema(params.experimental_output)
216
426
  };
217
427
  return this.request(`/api/networks/${this.networkId}/generate`, {
218
428
  method: "POST",
@@ -227,8 +437,8 @@ var Network = class extends BaseResource {
227
437
  async stream(params) {
228
438
  const processedParams = {
229
439
  ...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
440
+ output: zodToJsonSchema(params.output),
441
+ experimental_output: zodToJsonSchema(params.experimental_output)
232
442
  };
233
443
  const response = await this.request(`/api/networks/${this.networkId}/stream`, {
234
444
  method: "POST",
@@ -284,10 +494,15 @@ var MemoryThread = class extends BaseResource {
284
494
  }
285
495
  /**
286
496
  * Retrieves messages associated with the thread
497
+ * @param params - Optional parameters including limit for number of messages to retrieve
287
498
  * @returns Promise containing thread messages and UI messages
288
499
  */
289
- getMessages() {
290
- return this.request(`/api/memory/threads/${this.threadId}/messages?agentId=${this.agentId}`);
500
+ getMessages(params) {
501
+ const query = new URLSearchParams({
502
+ agentId: this.agentId,
503
+ ...params?.limit ? { limit: params.limit.toString() } : {}
504
+ });
505
+ return this.request(`/api/memory/threads/${this.threadId}/messages?${query.toString()}`);
291
506
  }
292
507
  };
293
508
 
@@ -371,6 +586,34 @@ var Workflow = class extends BaseResource {
371
586
  details() {
372
587
  return this.request(`/api/workflows/${this.workflowId}`);
373
588
  }
589
+ /**
590
+ * Retrieves all runs for a workflow
591
+ * @param params - Parameters for filtering runs
592
+ * @returns Promise containing workflow runs array
593
+ */
594
+ runs(params) {
595
+ const searchParams = new URLSearchParams();
596
+ if (params?.fromDate) {
597
+ searchParams.set("fromDate", params.fromDate.toISOString());
598
+ }
599
+ if (params?.toDate) {
600
+ searchParams.set("toDate", params.toDate.toISOString());
601
+ }
602
+ if (params?.limit) {
603
+ searchParams.set("limit", String(params.limit));
604
+ }
605
+ if (params?.offset) {
606
+ searchParams.set("offset", String(params.offset));
607
+ }
608
+ if (params?.resourceId) {
609
+ searchParams.set("resourceId", params.resourceId);
610
+ }
611
+ if (searchParams.size) {
612
+ return this.request(`/api/workflows/${this.workflowId}/runs?${searchParams}`);
613
+ } else {
614
+ return this.request(`/api/workflows/${this.workflowId}/runs`);
615
+ }
616
+ }
374
617
  /**
375
618
  * @deprecated Use `startAsync` instead
376
619
  * Executes the workflow with the provided parameters
@@ -487,7 +730,7 @@ var Workflow = class extends BaseResource {
487
730
  }
488
731
  }
489
732
  }
490
- } catch (error) {
733
+ } catch {
491
734
  }
492
735
  }
493
736
  if (buffer) {
@@ -541,89 +784,314 @@ var Tool = class extends BaseResource {
541
784
  * @returns Promise containing the tool execution results
542
785
  */
543
786
  execute(params) {
544
- return this.request(`/api/tools/${this.toolId}/execute`, {
787
+ const url = new URLSearchParams();
788
+ if (params.runId) {
789
+ url.set("runId", params.runId);
790
+ }
791
+ const body = {
792
+ data: params.data,
793
+ runtimeContext: params.runtimeContext ? Object.fromEntries(params.runtimeContext.entries()) : void 0
794
+ };
795
+ return this.request(`/api/tools/${this.toolId}/execute?${url.toString()}`, {
545
796
  method: "POST",
546
- body: params
797
+ body
798
+ });
799
+ }
800
+ };
801
+
802
+ // src/resources/vnext-workflow.ts
803
+ var RECORD_SEPARATOR2 = "";
804
+ var VNextWorkflow = class extends BaseResource {
805
+ constructor(options, workflowId) {
806
+ super(options);
807
+ this.workflowId = workflowId;
808
+ }
809
+ /**
810
+ * Creates an async generator that processes a readable stream and yields vNext workflow records
811
+ * separated by the Record Separator character (\x1E)
812
+ *
813
+ * @param stream - The readable stream to process
814
+ * @returns An async generator that yields parsed records
815
+ */
816
+ async *streamProcessor(stream) {
817
+ const reader = stream.getReader();
818
+ let doneReading = false;
819
+ let buffer = "";
820
+ try {
821
+ while (!doneReading) {
822
+ const { done, value } = await reader.read();
823
+ doneReading = done;
824
+ if (done && !value) continue;
825
+ try {
826
+ const decoded = value ? new TextDecoder().decode(value) : "";
827
+ const chunks = (buffer + decoded).split(RECORD_SEPARATOR2);
828
+ buffer = chunks.pop() || "";
829
+ for (const chunk of chunks) {
830
+ if (chunk) {
831
+ if (typeof chunk === "string") {
832
+ try {
833
+ const parsedChunk = JSON.parse(chunk);
834
+ yield parsedChunk;
835
+ } catch {
836
+ }
837
+ }
838
+ }
839
+ }
840
+ } catch {
841
+ }
842
+ }
843
+ if (buffer) {
844
+ try {
845
+ yield JSON.parse(buffer);
846
+ } catch {
847
+ }
848
+ }
849
+ } finally {
850
+ reader.cancel().catch(() => {
851
+ });
852
+ }
853
+ }
854
+ /**
855
+ * Retrieves details about the vNext workflow
856
+ * @returns Promise containing vNext workflow details including steps and graphs
857
+ */
858
+ details() {
859
+ return this.request(`/api/workflows/v-next/${this.workflowId}`);
860
+ }
861
+ /**
862
+ * Retrieves all runs for a vNext workflow
863
+ * @param params - Parameters for filtering runs
864
+ * @returns Promise containing vNext workflow runs array
865
+ */
866
+ runs(params) {
867
+ const searchParams = new URLSearchParams();
868
+ if (params?.fromDate) {
869
+ searchParams.set("fromDate", params.fromDate.toISOString());
870
+ }
871
+ if (params?.toDate) {
872
+ searchParams.set("toDate", params.toDate.toISOString());
873
+ }
874
+ if (params?.limit) {
875
+ searchParams.set("limit", String(params.limit));
876
+ }
877
+ if (params?.offset) {
878
+ searchParams.set("offset", String(params.offset));
879
+ }
880
+ if (params?.resourceId) {
881
+ searchParams.set("resourceId", params.resourceId);
882
+ }
883
+ if (searchParams.size) {
884
+ return this.request(`/api/workflows/v-next/${this.workflowId}/runs?${searchParams}`);
885
+ } else {
886
+ return this.request(`/api/workflows/v-next/${this.workflowId}/runs`);
887
+ }
888
+ }
889
+ /**
890
+ * Creates a new vNext workflow run
891
+ * @param params - Optional object containing the optional runId
892
+ * @returns Promise containing the runId of the created run
893
+ */
894
+ createRun(params) {
895
+ const searchParams = new URLSearchParams();
896
+ if (!!params?.runId) {
897
+ searchParams.set("runId", params.runId);
898
+ }
899
+ return this.request(`/api/workflows/v-next/${this.workflowId}/create-run?${searchParams.toString()}`, {
900
+ method: "POST"
901
+ });
902
+ }
903
+ /**
904
+ * Starts a vNext workflow run synchronously without waiting for the workflow to complete
905
+ * @param params - Object containing the runId, inputData and runtimeContext
906
+ * @returns Promise containing success message
907
+ */
908
+ start(params) {
909
+ const runtimeContext = params.runtimeContext ? Object.fromEntries(params.runtimeContext.entries()) : void 0;
910
+ return this.request(`/api/workflows/v-next/${this.workflowId}/start?runId=${params.runId}`, {
911
+ method: "POST",
912
+ body: { inputData: params?.inputData, runtimeContext }
913
+ });
914
+ }
915
+ /**
916
+ * Resumes a suspended vNext workflow step synchronously without waiting for the vNext workflow to complete
917
+ * @param params - Object containing the runId, step, resumeData and runtimeContext
918
+ * @returns Promise containing success message
919
+ */
920
+ resume({
921
+ step,
922
+ runId,
923
+ resumeData,
924
+ ...rest
925
+ }) {
926
+ const runtimeContext = rest.runtimeContext ? Object.fromEntries(rest.runtimeContext.entries()) : void 0;
927
+ return this.request(`/api/workflows/v-next/${this.workflowId}/resume?runId=${runId}`, {
928
+ method: "POST",
929
+ stream: true,
930
+ body: {
931
+ step,
932
+ resumeData,
933
+ runtimeContext
934
+ }
935
+ });
936
+ }
937
+ /**
938
+ * Starts a vNext workflow run asynchronously and returns a promise that resolves when the vNext workflow is complete
939
+ * @param params - Object containing the optional runId, inputData and runtimeContext
940
+ * @returns Promise containing the vNext workflow execution results
941
+ */
942
+ startAsync(params) {
943
+ const searchParams = new URLSearchParams();
944
+ if (!!params?.runId) {
945
+ searchParams.set("runId", params.runId);
946
+ }
947
+ const runtimeContext = params.runtimeContext ? Object.fromEntries(params.runtimeContext.entries()) : void 0;
948
+ return this.request(`/api/workflows/v-next/${this.workflowId}/start-async?${searchParams.toString()}`, {
949
+ method: "POST",
950
+ body: { inputData: params.inputData, runtimeContext }
951
+ });
952
+ }
953
+ /**
954
+ * Resumes a suspended vNext workflow step asynchronously and returns a promise that resolves when the vNext workflow is complete
955
+ * @param params - Object containing the runId, step, resumeData and runtimeContext
956
+ * @returns Promise containing the vNext workflow resume results
957
+ */
958
+ resumeAsync(params) {
959
+ const runtimeContext = params.runtimeContext ? Object.fromEntries(params.runtimeContext.entries()) : void 0;
960
+ return this.request(`/api/workflows/v-next/${this.workflowId}/resume-async?runId=${params.runId}`, {
961
+ method: "POST",
962
+ body: {
963
+ step: params.step,
964
+ resumeData: params.resumeData,
965
+ runtimeContext
966
+ }
547
967
  });
548
968
  }
969
+ /**
970
+ * Watches vNext workflow transitions in real-time
971
+ * @param runId - Optional run ID to filter the watch stream
972
+ * @returns AsyncGenerator that yields parsed records from the vNext workflow watch stream
973
+ */
974
+ async watch({ runId }, onRecord) {
975
+ const response = await this.request(`/api/workflows/v-next/${this.workflowId}/watch?runId=${runId}`, {
976
+ stream: true
977
+ });
978
+ if (!response.ok) {
979
+ throw new Error(`Failed to watch vNext workflow: ${response.statusText}`);
980
+ }
981
+ if (!response.body) {
982
+ throw new Error("Response body is null");
983
+ }
984
+ for await (const record of this.streamProcessor(response.body)) {
985
+ onRecord(record);
986
+ }
987
+ }
549
988
  };
550
989
 
551
990
  // src/resources/a2a.ts
552
991
  var A2A = class extends BaseResource {
992
+ constructor(options, agentId) {
993
+ super(options);
994
+ this.agentId = agentId;
995
+ }
996
+ /**
997
+ * Get the agent card with metadata about the agent
998
+ * @returns Promise containing the agent card information
999
+ */
1000
+ async getCard() {
1001
+ return this.request(`/.well-known/${this.agentId}/agent.json`);
1002
+ }
553
1003
  /**
554
- * Sends an A2A protocol request to the server
555
- * @param request - The A2A protocol request
556
- * @returns Promise containing the A2A protocol response
1004
+ * Send a message to the agent and get a response
1005
+ * @param params - Parameters for the task
1006
+ * @returns Promise containing the task response
557
1007
  */
558
- sendRequest(request) {
559
- return this.request("/api/a2a", {
1008
+ async sendMessage(params) {
1009
+ const response = await this.request(`/a2a/${this.agentId}`, {
560
1010
  method: "POST",
561
- body: request
1011
+ body: {
1012
+ method: "tasks/send",
1013
+ params
1014
+ }
562
1015
  });
1016
+ return { task: response.result };
563
1017
  }
564
1018
  /**
565
- * Sends a task to an agent using the A2A protocol
566
- * @param params - Parameters for sending the task
567
- * @returns Promise containing the task
1019
+ * Get the status and result of a task
1020
+ * @param params - Parameters for querying the task
1021
+ * @returns Promise containing the task response
568
1022
  */
569
- sendTask(params) {
570
- const request = {
571
- jsonrpc: "2.0",
572
- id: `send-${Date.now()}`,
573
- method: "tasks/send",
574
- params
575
- };
576
- return this.sendRequest(request).then((response) => {
577
- if ("error" in response) {
578
- throw new Error(response.error.message);
1023
+ async getTask(params) {
1024
+ const response = await this.request(`/a2a/${this.agentId}`, {
1025
+ method: "POST",
1026
+ body: {
1027
+ method: "tasks/get",
1028
+ params
579
1029
  }
580
- return response.result;
581
1030
  });
1031
+ return response.result;
582
1032
  }
583
1033
  /**
584
- * Gets a task by ID using the A2A protocol
585
- * @param params - Parameters for getting the task
586
- * @returns Promise containing the task
1034
+ * Cancel a running task
1035
+ * @param params - Parameters identifying the task to cancel
1036
+ * @returns Promise containing the task response
587
1037
  */
588
- getTask(params) {
589
- const request = {
590
- jsonrpc: "2.0",
591
- id: `get-${Date.now()}`,
592
- method: "tasks/get",
593
- params
594
- };
595
- return this.sendRequest(request).then((response) => {
596
- if ("error" in response) {
597
- throw new Error(response.error.message);
1038
+ async cancelTask(params) {
1039
+ return this.request(`/a2a/${this.agentId}`, {
1040
+ method: "POST",
1041
+ body: {
1042
+ method: "tasks/cancel",
1043
+ params
598
1044
  }
599
- return response.result;
600
1045
  });
601
1046
  }
602
1047
  /**
603
- * Cancels a task by ID using the A2A protocol
604
- * @param params - Parameters for canceling the task
605
- * @returns Promise containing the task
1048
+ * Send a message and subscribe to streaming updates (not fully implemented)
1049
+ * @param params - Parameters for the task
1050
+ * @returns Promise containing the task response
606
1051
  */
607
- cancelTask(params) {
608
- const request = {
609
- jsonrpc: "2.0",
610
- id: `cancel-${Date.now()}`,
611
- method: "tasks/cancel",
612
- params
613
- };
614
- return this.sendRequest(request).then((response) => {
615
- if ("error" in response) {
616
- throw new Error(response.error.message);
617
- }
618
- return response.result;
1052
+ async sendAndSubscribe(params) {
1053
+ return this.request(`/a2a/${this.agentId}`, {
1054
+ method: "POST",
1055
+ body: {
1056
+ method: "tasks/sendSubscribe",
1057
+ params
1058
+ },
1059
+ stream: true
619
1060
  });
620
1061
  }
1062
+ };
1063
+
1064
+ // src/resources/mcp-tool.ts
1065
+ var MCPTool = class extends BaseResource {
1066
+ serverId;
1067
+ toolId;
1068
+ constructor(options, serverId, toolId) {
1069
+ super(options);
1070
+ this.serverId = serverId;
1071
+ this.toolId = toolId;
1072
+ }
621
1073
  /**
622
- * Gets the agent card for the A2A protocol
623
- * @returns Promise containing the agent card
1074
+ * Retrieves details about this specific tool from the MCP server.
1075
+ * @returns Promise containing the tool's information (name, description, schema).
624
1076
  */
625
- getAgentCard() {
626
- return this.request("/api/a2a/agent-card");
1077
+ details() {
1078
+ return this.request(`/api/mcp/${this.serverId}/tools/${this.toolId}`);
1079
+ }
1080
+ /**
1081
+ * Executes this specific tool on the MCP server.
1082
+ * @param params - Parameters for tool execution, including data/args and optional runtimeContext.
1083
+ * @returns Promise containing the result of the tool execution.
1084
+ */
1085
+ execute(params) {
1086
+ const body = {};
1087
+ if (params.data !== void 0) body.data = params.data;
1088
+ if (params.runtimeContext !== void 0) {
1089
+ body.runtimeContext = params.runtimeContext;
1090
+ }
1091
+ return this.request(`/api/mcp/${this.serverId}/tools/${this.toolId}/execute`, {
1092
+ method: "POST",
1093
+ body: Object.keys(body).length > 0 ? body : void 0
1094
+ });
627
1095
  }
628
1096
  };
629
1097
 
@@ -639,6 +1107,21 @@ var MastraClient = class extends BaseResource {
639
1107
  getAgents() {
640
1108
  return this.request("/api/agents");
641
1109
  }
1110
+ async getAGUI({ resourceId }) {
1111
+ const agents = await this.getAgents();
1112
+ return Object.entries(agents).reduce(
1113
+ (acc, [agentId]) => {
1114
+ const agent = this.getAgent(agentId);
1115
+ acc[agentId] = new AGUIAdapter({
1116
+ agentId,
1117
+ agent,
1118
+ resourceId
1119
+ });
1120
+ return acc;
1121
+ },
1122
+ {}
1123
+ );
1124
+ }
642
1125
  /**
643
1126
  * Gets an agent instance by ID
644
1127
  * @param agentId - ID of the agent to retrieve
@@ -719,6 +1202,21 @@ var MastraClient = class extends BaseResource {
719
1202
  getWorkflow(workflowId) {
720
1203
  return new Workflow(this.options, workflowId);
721
1204
  }
1205
+ /**
1206
+ * Retrieves all available vNext workflows
1207
+ * @returns Promise containing map of vNext workflow IDs to vNext workflow details
1208
+ */
1209
+ getVNextWorkflows() {
1210
+ return this.request("/api/workflows/v-next");
1211
+ }
1212
+ /**
1213
+ * Gets a vNext workflow instance by ID
1214
+ * @param workflowId - ID of the vNext workflow to retrieve
1215
+ * @returns vNext Workflow instance
1216
+ */
1217
+ getVNextWorkflow(workflowId) {
1218
+ return new VNextWorkflow(this.options, workflowId);
1219
+ }
722
1220
  /**
723
1221
  * Gets a vector instance by name
724
1222
  * @param vectorName - Name of the vector to retrieve
@@ -756,7 +1254,7 @@ var MastraClient = class extends BaseResource {
756
1254
  * @returns Promise containing telemetry data
757
1255
  */
758
1256
  getTelemetry(params) {
759
- const { name, scope, page, perPage, attribute } = params || {};
1257
+ const { name, scope, page, perPage, attribute, fromDate, toDate } = params || {};
760
1258
  const _attribute = attribute ? Object.entries(attribute).map(([key, value]) => `${key}:${value}`) : [];
761
1259
  const searchParams = new URLSearchParams();
762
1260
  if (name) {
@@ -780,6 +1278,12 @@ var MastraClient = class extends BaseResource {
780
1278
  searchParams.set("attribute", _attribute);
781
1279
  }
782
1280
  }
1281
+ if (fromDate) {
1282
+ searchParams.set("fromDate", fromDate.toISOString());
1283
+ }
1284
+ if (toDate) {
1285
+ searchParams.set("toDate", toDate.toISOString());
1286
+ }
783
1287
  if (searchParams.size) {
784
1288
  return this.request(`/api/telemetry?${searchParams}`);
785
1289
  } else {
@@ -802,32 +1306,61 @@ var MastraClient = class extends BaseResource {
802
1306
  return new Network(this.options, networkId);
803
1307
  }
804
1308
  /**
805
- * Gets an A2A protocol instance for agent-to-agent communication
806
- * @returns A2A instance
1309
+ * Retrieves a list of available MCP servers.
1310
+ * @param params - Optional parameters for pagination (limit, offset).
1311
+ * @returns Promise containing the list of MCP servers and pagination info.
1312
+ */
1313
+ getMcpServers(params) {
1314
+ const searchParams = new URLSearchParams();
1315
+ if (params?.limit !== void 0) {
1316
+ searchParams.set("limit", String(params.limit));
1317
+ }
1318
+ if (params?.offset !== void 0) {
1319
+ searchParams.set("offset", String(params.offset));
1320
+ }
1321
+ const queryString = searchParams.toString();
1322
+ return this.request(`/api/mcp/v0/servers${queryString ? `?${queryString}` : ""}`);
1323
+ }
1324
+ /**
1325
+ * Retrieves detailed information for a specific MCP server.
1326
+ * @param serverId - The ID of the MCP server to retrieve.
1327
+ * @param params - Optional parameters, e.g., specific version.
1328
+ * @returns Promise containing the detailed MCP server information.
1329
+ */
1330
+ getMcpServerDetails(serverId, params) {
1331
+ const searchParams = new URLSearchParams();
1332
+ if (params?.version) {
1333
+ searchParams.set("version", params.version);
1334
+ }
1335
+ const queryString = searchParams.toString();
1336
+ return this.request(`/api/mcp/v0/servers/${serverId}${queryString ? `?${queryString}` : ""}`);
1337
+ }
1338
+ /**
1339
+ * Retrieves a list of tools for a specific MCP server.
1340
+ * @param serverId - The ID of the MCP server.
1341
+ * @returns Promise containing the list of tools.
807
1342
  */
808
- getA2A() {
809
- return new A2A(this.options);
1343
+ getMcpServerTools(serverId) {
1344
+ return this.request(`/api/mcp/${serverId}/tools`);
1345
+ }
1346
+ /**
1347
+ * Gets an MCPTool resource instance for a specific tool on an MCP server.
1348
+ * This instance can then be used to fetch details or execute the tool.
1349
+ * @param serverId - The ID of the MCP server.
1350
+ * @param toolId - The ID of the tool.
1351
+ * @returns MCPTool instance.
1352
+ */
1353
+ getMcpServerTool(serverId, toolId) {
1354
+ return new MCPTool(this.options, serverId, toolId);
1355
+ }
1356
+ /**
1357
+ * Gets an A2A client for interacting with an agent via the A2A protocol
1358
+ * @param agentId - ID of the agent to interact with
1359
+ * @returns A2A client instance
1360
+ */
1361
+ getA2A(agentId) {
1362
+ return new A2A(this.options, agentId);
810
1363
  }
811
1364
  };
812
1365
 
813
- // src/types.ts
814
- var TaskState = /* @__PURE__ */ ((TaskState2) => {
815
- TaskState2["PENDING"] = "pending";
816
- TaskState2["RUNNING"] = "running";
817
- TaskState2["COMPLETED"] = "completed";
818
- TaskState2["FAILED"] = "failed";
819
- TaskState2["CANCELED"] = "canceled";
820
- return TaskState2;
821
- })(TaskState || {});
822
- var ErrorCode = /* @__PURE__ */ ((ErrorCode2) => {
823
- ErrorCode2[ErrorCode2["PARSE_ERROR"] = -32700] = "PARSE_ERROR";
824
- ErrorCode2[ErrorCode2["INVALID_REQUEST"] = -32600] = "INVALID_REQUEST";
825
- ErrorCode2[ErrorCode2["METHOD_NOT_FOUND"] = -32601] = "METHOD_NOT_FOUND";
826
- ErrorCode2[ErrorCode2["INVALID_PARAMS"] = -32602] = "INVALID_PARAMS";
827
- ErrorCode2[ErrorCode2["INTERNAL_ERROR"] = -32603] = "INTERNAL_ERROR";
828
- ErrorCode2[ErrorCode2["TASK_NOT_FOUND"] = -32e3] = "TASK_NOT_FOUND";
829
- ErrorCode2[ErrorCode2["TASK_NOT_CANCELABLE"] = -32001] = "TASK_NOT_CANCELABLE";
830
- return ErrorCode2;
831
- })(ErrorCode || {});
832
-
833
- export { ErrorCode, MastraClient, TaskState };
1366
+ export { MastraClient };