@mastra/client-js 0.0.0-switch-to-core-20250424015131 → 0.0.0-taofeeq-fix-tool-call-showing-after-message-20250806184630
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/.turbo/turbo-build.log +18 -0
- package/CHANGELOG.md +1356 -2
- package/LICENSE.md +11 -42
- package/README.md +2 -1
- package/dist/adapters/agui.d.ts +23 -0
- package/dist/adapters/agui.d.ts.map +1 -0
- package/dist/client.d.ts +265 -0
- package/dist/client.d.ts.map +1 -0
- package/dist/example.d.ts +2 -0
- package/dist/example.d.ts.map +1 -0
- package/dist/index.cjs +1785 -82
- package/dist/index.cjs.map +1 -0
- package/dist/index.d.ts +4 -585
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +1785 -86
- package/dist/index.js.map +1 -0
- package/dist/resources/a2a.d.ts +44 -0
- package/dist/resources/a2a.d.ts.map +1 -0
- package/dist/resources/agent.d.ts +112 -0
- package/dist/resources/agent.d.ts.map +1 -0
- package/dist/resources/base.d.ts +13 -0
- package/dist/resources/base.d.ts.map +1 -0
- package/dist/resources/index.d.ts +11 -0
- package/dist/resources/index.d.ts.map +1 -0
- package/dist/resources/legacy-workflow.d.ts +87 -0
- package/dist/resources/legacy-workflow.d.ts.map +1 -0
- package/dist/resources/mcp-tool.d.ts +27 -0
- package/dist/resources/mcp-tool.d.ts.map +1 -0
- package/dist/resources/memory-thread.d.ts +53 -0
- package/dist/resources/memory-thread.d.ts.map +1 -0
- package/dist/resources/network-memory-thread.d.ts +47 -0
- package/dist/resources/network-memory-thread.d.ts.map +1 -0
- package/dist/resources/network.d.ts +30 -0
- package/dist/resources/network.d.ts.map +1 -0
- package/dist/resources/tool.d.ts +23 -0
- package/dist/resources/tool.d.ts.map +1 -0
- package/dist/resources/vNextNetwork.d.ts +42 -0
- package/dist/resources/vNextNetwork.d.ts.map +1 -0
- package/dist/resources/vector.d.ts +48 -0
- package/dist/resources/vector.d.ts.map +1 -0
- package/dist/resources/workflow.d.ts +154 -0
- package/dist/resources/workflow.d.ts.map +1 -0
- package/dist/types.d.ts +422 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/utils/index.d.ts +3 -0
- package/dist/utils/index.d.ts.map +1 -0
- package/dist/utils/process-client-tools.d.ts +3 -0
- package/dist/utils/process-client-tools.d.ts.map +1 -0
- package/dist/utils/zod-to-json-schema.d.ts +105 -0
- package/dist/utils/zod-to-json-schema.d.ts.map +1 -0
- package/integration-tests/agui-adapter.test.ts +122 -0
- package/integration-tests/package.json +18 -0
- package/integration-tests/src/mastra/index.ts +35 -0
- package/integration-tests/vitest.config.ts +9 -0
- package/package.json +32 -19
- package/src/adapters/agui.test.ts +322 -0
- package/src/adapters/agui.ts +257 -0
- package/src/client.ts +414 -5
- package/src/example.ts +59 -29
- package/src/index.test.ts +526 -10
- package/src/index.ts +1 -0
- package/src/resources/a2a.ts +88 -0
- package/src/resources/agent.ts +629 -49
- package/src/resources/base.ts +8 -2
- package/src/resources/index.ts +4 -1
- package/src/resources/legacy-workflow.ts +242 -0
- package/src/resources/mcp-tool.ts +48 -0
- package/src/resources/memory-thread.test.ts +285 -0
- package/src/resources/memory-thread.ts +49 -3
- package/src/resources/network-memory-thread.test.ts +269 -0
- package/src/resources/network-memory-thread.ts +81 -0
- package/src/resources/network.ts +11 -17
- package/src/resources/tool.ts +16 -3
- package/src/resources/vNextNetwork.ts +194 -0
- package/src/resources/workflow.ts +289 -94
- package/src/types.ts +298 -20
- package/src/utils/index.ts +11 -0
- package/src/utils/process-client-tools.ts +32 -0
- package/src/utils/zod-to-json-schema.ts +10 -0
- package/src/v2-messages.test.ts +180 -0
- package/tsconfig.build.json +9 -0
- package/tsconfig.json +1 -1
- package/tsup.config.ts +17 -0
- package/dist/index.d.cts +0 -585
package/src/types.ts
CHANGED
|
@@ -1,16 +1,28 @@
|
|
|
1
1
|
import type {
|
|
2
|
-
|
|
2
|
+
MastraMessageV1,
|
|
3
3
|
AiMessageType,
|
|
4
4
|
CoreMessage,
|
|
5
5
|
QueryResult,
|
|
6
|
-
StepAction,
|
|
7
|
-
StepGraph,
|
|
8
6
|
StorageThreadType,
|
|
9
|
-
|
|
10
|
-
|
|
7
|
+
WorkflowRuns,
|
|
8
|
+
WorkflowRun,
|
|
9
|
+
LegacyWorkflowRuns,
|
|
10
|
+
StorageGetMessagesArg,
|
|
11
|
+
PaginationInfo,
|
|
12
|
+
MastraMessageV2,
|
|
11
13
|
} from '@mastra/core';
|
|
14
|
+
import type { AgentGenerateOptions, AgentStreamOptions, ToolsInput, UIMessageWithMetadata } from '@mastra/core/agent';
|
|
15
|
+
import type { BaseLogMessage, LogLevel } from '@mastra/core/logger';
|
|
12
16
|
|
|
13
|
-
import type {
|
|
17
|
+
import type { MCPToolType, ServerInfo } from '@mastra/core/mcp';
|
|
18
|
+
import type { RuntimeContext } from '@mastra/core/runtime-context';
|
|
19
|
+
import type { MastraScorer, MastraScorerEntry, ScoreRowData } from '@mastra/core/scores';
|
|
20
|
+
import type { Workflow, WatchEvent, WorkflowResult } from '@mastra/core/workflows';
|
|
21
|
+
import type {
|
|
22
|
+
StepAction,
|
|
23
|
+
StepGraph,
|
|
24
|
+
LegacyWorkflowRunResult as CoreLegacyWorkflowRunResult,
|
|
25
|
+
} from '@mastra/core/workflows/legacy';
|
|
14
26
|
import type { JSONSchema7 } from 'json-schema';
|
|
15
27
|
import type { ZodSchema } from 'zod';
|
|
16
28
|
|
|
@@ -26,6 +38,7 @@ export interface ClientOptions {
|
|
|
26
38
|
/** Custom headers to include with requests */
|
|
27
39
|
headers?: Record<string, string>;
|
|
28
40
|
/** Abort signal for request */
|
|
41
|
+
abortSignal?: AbortSignal;
|
|
29
42
|
}
|
|
30
43
|
|
|
31
44
|
export interface RequestOptions {
|
|
@@ -33,27 +46,54 @@ export interface RequestOptions {
|
|
|
33
46
|
headers?: Record<string, string>;
|
|
34
47
|
body?: any;
|
|
35
48
|
stream?: boolean;
|
|
36
|
-
signal?: AbortSignal;
|
|
37
49
|
}
|
|
38
50
|
|
|
51
|
+
type WithoutMethods<T> = {
|
|
52
|
+
[K in keyof T as T[K] extends (...args: any[]) => any
|
|
53
|
+
? never
|
|
54
|
+
: T[K] extends { (): any }
|
|
55
|
+
? never
|
|
56
|
+
: T[K] extends undefined | ((...args: any[]) => any)
|
|
57
|
+
? never
|
|
58
|
+
: K]: T[K];
|
|
59
|
+
};
|
|
60
|
+
|
|
39
61
|
export interface GetAgentResponse {
|
|
40
62
|
name: string;
|
|
41
63
|
instructions: string;
|
|
42
64
|
tools: Record<string, GetToolResponse>;
|
|
65
|
+
workflows: Record<string, GetWorkflowResponse>;
|
|
43
66
|
provider: string;
|
|
44
67
|
modelId: string;
|
|
68
|
+
defaultGenerateOptions: WithoutMethods<AgentGenerateOptions>;
|
|
69
|
+
defaultStreamOptions: WithoutMethods<AgentStreamOptions>;
|
|
45
70
|
}
|
|
46
71
|
|
|
47
72
|
export type GenerateParams<T extends JSONSchema7 | ZodSchema | undefined = undefined> = {
|
|
48
|
-
messages: string | string[] | CoreMessage[] | AiMessageType[];
|
|
49
|
-
|
|
73
|
+
messages: string | string[] | CoreMessage[] | AiMessageType[] | UIMessageWithMetadata[];
|
|
74
|
+
output?: T;
|
|
75
|
+
experimental_output?: T;
|
|
76
|
+
runtimeContext?: RuntimeContext | Record<string, any>;
|
|
77
|
+
clientTools?: ToolsInput;
|
|
78
|
+
} & WithoutMethods<
|
|
79
|
+
Omit<AgentGenerateOptions<T>, 'output' | 'experimental_output' | 'runtimeContext' | 'clientTools' | 'abortSignal'>
|
|
80
|
+
>;
|
|
50
81
|
|
|
51
82
|
export type StreamParams<T extends JSONSchema7 | ZodSchema | undefined = undefined> = {
|
|
52
|
-
messages: string | string[] | CoreMessage[] | AiMessageType[];
|
|
53
|
-
|
|
83
|
+
messages: string | string[] | CoreMessage[] | AiMessageType[] | UIMessageWithMetadata[];
|
|
84
|
+
output?: T;
|
|
85
|
+
experimental_output?: T;
|
|
86
|
+
runtimeContext?: RuntimeContext | Record<string, any>;
|
|
87
|
+
clientTools?: ToolsInput;
|
|
88
|
+
} & WithoutMethods<
|
|
89
|
+
Omit<AgentStreamOptions<T>, 'output' | 'experimental_output' | 'runtimeContext' | 'clientTools' | 'abortSignal'>
|
|
90
|
+
>;
|
|
54
91
|
|
|
55
92
|
export interface GetEvalsByAgentIdResponse extends GetAgentResponse {
|
|
56
93
|
evals: any[];
|
|
94
|
+
instructions: string;
|
|
95
|
+
name: string;
|
|
96
|
+
id: string;
|
|
57
97
|
}
|
|
58
98
|
|
|
59
99
|
export interface GetToolResponse {
|
|
@@ -63,7 +103,7 @@ export interface GetToolResponse {
|
|
|
63
103
|
outputSchema: string;
|
|
64
104
|
}
|
|
65
105
|
|
|
66
|
-
export interface
|
|
106
|
+
export interface GetLegacyWorkflowResponse {
|
|
67
107
|
name: string;
|
|
68
108
|
triggerSchema: string;
|
|
69
109
|
steps: Record<string, StepAction<any, any, any, any>>;
|
|
@@ -72,12 +112,61 @@ export interface GetWorkflowResponse {
|
|
|
72
112
|
workflowId?: string;
|
|
73
113
|
}
|
|
74
114
|
|
|
75
|
-
export
|
|
115
|
+
export interface GetWorkflowRunsParams {
|
|
116
|
+
fromDate?: Date;
|
|
117
|
+
toDate?: Date;
|
|
118
|
+
limit?: number;
|
|
119
|
+
offset?: number;
|
|
120
|
+
resourceId?: string;
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
export type GetLegacyWorkflowRunsResponse = LegacyWorkflowRuns;
|
|
124
|
+
|
|
125
|
+
export type GetWorkflowRunsResponse = WorkflowRuns;
|
|
126
|
+
|
|
127
|
+
export type GetWorkflowRunByIdResponse = WorkflowRun;
|
|
128
|
+
|
|
129
|
+
export type GetWorkflowRunExecutionResultResponse = WatchEvent['payload']['workflowState'];
|
|
130
|
+
|
|
131
|
+
export type LegacyWorkflowRunResult = {
|
|
76
132
|
activePaths: Record<string, { status: string; suspendPayload?: any; stepPath: string[] }>;
|
|
77
|
-
results:
|
|
133
|
+
results: CoreLegacyWorkflowRunResult<any, any, any>['results'];
|
|
78
134
|
timestamp: number;
|
|
79
135
|
runId: string;
|
|
80
136
|
};
|
|
137
|
+
|
|
138
|
+
export interface GetWorkflowResponse {
|
|
139
|
+
name: string;
|
|
140
|
+
description?: string;
|
|
141
|
+
steps: {
|
|
142
|
+
[key: string]: {
|
|
143
|
+
id: string;
|
|
144
|
+
description: string;
|
|
145
|
+
inputSchema: string;
|
|
146
|
+
outputSchema: string;
|
|
147
|
+
resumeSchema: string;
|
|
148
|
+
suspendSchema: string;
|
|
149
|
+
};
|
|
150
|
+
};
|
|
151
|
+
allSteps: {
|
|
152
|
+
[key: string]: {
|
|
153
|
+
id: string;
|
|
154
|
+
description: string;
|
|
155
|
+
inputSchema: string;
|
|
156
|
+
outputSchema: string;
|
|
157
|
+
resumeSchema: string;
|
|
158
|
+
suspendSchema: string;
|
|
159
|
+
isWorkflow: boolean;
|
|
160
|
+
};
|
|
161
|
+
};
|
|
162
|
+
stepGraph: Workflow['serializedStepGraph'];
|
|
163
|
+
inputSchema: string;
|
|
164
|
+
outputSchema: string;
|
|
165
|
+
}
|
|
166
|
+
|
|
167
|
+
export type WorkflowWatchResult = WatchEvent & { runId: string };
|
|
168
|
+
|
|
169
|
+
export type WorkflowRunResult = WorkflowResult<any, any>;
|
|
81
170
|
export interface UpsertVectorParams {
|
|
82
171
|
indexName: string;
|
|
83
172
|
vectors: number[][];
|
|
@@ -109,20 +198,33 @@ export interface GetVectorIndexResponse {
|
|
|
109
198
|
}
|
|
110
199
|
|
|
111
200
|
export interface SaveMessageToMemoryParams {
|
|
112
|
-
messages:
|
|
201
|
+
messages: (MastraMessageV1 | MastraMessageV2)[];
|
|
113
202
|
agentId: string;
|
|
114
203
|
}
|
|
115
204
|
|
|
116
|
-
export
|
|
205
|
+
export interface SaveNetworkMessageToMemoryParams {
|
|
206
|
+
messages: (MastraMessageV1 | MastraMessageV2)[];
|
|
207
|
+
networkId: string;
|
|
208
|
+
}
|
|
209
|
+
|
|
210
|
+
export type SaveMessageToMemoryResponse = (MastraMessageV1 | MastraMessageV2)[];
|
|
117
211
|
|
|
118
212
|
export interface CreateMemoryThreadParams {
|
|
119
|
-
title
|
|
120
|
-
metadata
|
|
213
|
+
title?: string;
|
|
214
|
+
metadata?: Record<string, any>;
|
|
121
215
|
resourceId: string;
|
|
122
|
-
threadId
|
|
216
|
+
threadId?: string;
|
|
123
217
|
agentId: string;
|
|
124
218
|
}
|
|
125
219
|
|
|
220
|
+
export interface CreateNetworkMemoryThreadParams {
|
|
221
|
+
title?: string;
|
|
222
|
+
metadata?: Record<string, any>;
|
|
223
|
+
resourceId: string;
|
|
224
|
+
threadId?: string;
|
|
225
|
+
networkId: string;
|
|
226
|
+
}
|
|
227
|
+
|
|
126
228
|
export type CreateMemoryThreadResponse = StorageThreadType;
|
|
127
229
|
|
|
128
230
|
export interface GetMemoryThreadParams {
|
|
@@ -130,6 +232,11 @@ export interface GetMemoryThreadParams {
|
|
|
130
232
|
agentId: string;
|
|
131
233
|
}
|
|
132
234
|
|
|
235
|
+
export interface GetNetworkMemoryThreadParams {
|
|
236
|
+
resourceId: string;
|
|
237
|
+
networkId: string;
|
|
238
|
+
}
|
|
239
|
+
|
|
133
240
|
export type GetMemoryThreadResponse = StorageThreadType[];
|
|
134
241
|
|
|
135
242
|
export interface UpdateMemoryThreadParams {
|
|
@@ -138,21 +245,52 @@ export interface UpdateMemoryThreadParams {
|
|
|
138
245
|
resourceId: string;
|
|
139
246
|
}
|
|
140
247
|
|
|
248
|
+
export interface GetMemoryThreadMessagesParams {
|
|
249
|
+
/**
|
|
250
|
+
* Limit the number of messages to retrieve (default: 40)
|
|
251
|
+
*/
|
|
252
|
+
limit?: number;
|
|
253
|
+
}
|
|
254
|
+
|
|
255
|
+
export type GetMemoryThreadMessagesPaginatedParams = Omit<StorageGetMessagesArg, 'threadConfig' | 'threadId'>;
|
|
256
|
+
|
|
141
257
|
export interface GetMemoryThreadMessagesResponse {
|
|
142
258
|
messages: CoreMessage[];
|
|
143
259
|
uiMessages: AiMessageType[];
|
|
144
260
|
}
|
|
145
261
|
|
|
262
|
+
export type GetMemoryThreadMessagesPaginatedResponse = PaginationInfo & {
|
|
263
|
+
messages: MastraMessageV1[] | MastraMessageV2[];
|
|
264
|
+
};
|
|
265
|
+
|
|
146
266
|
export interface GetLogsParams {
|
|
147
267
|
transportId: string;
|
|
268
|
+
fromDate?: Date;
|
|
269
|
+
toDate?: Date;
|
|
270
|
+
logLevel?: LogLevel;
|
|
271
|
+
filters?: Record<string, string>;
|
|
272
|
+
page?: number;
|
|
273
|
+
perPage?: number;
|
|
148
274
|
}
|
|
149
275
|
|
|
150
276
|
export interface GetLogParams {
|
|
151
277
|
runId: string;
|
|
152
278
|
transportId: string;
|
|
279
|
+
fromDate?: Date;
|
|
280
|
+
toDate?: Date;
|
|
281
|
+
logLevel?: LogLevel;
|
|
282
|
+
filters?: Record<string, string>;
|
|
283
|
+
page?: number;
|
|
284
|
+
perPage?: number;
|
|
153
285
|
}
|
|
154
286
|
|
|
155
|
-
export type GetLogsResponse =
|
|
287
|
+
export type GetLogsResponse = {
|
|
288
|
+
logs: BaseLogMessage[];
|
|
289
|
+
total: number;
|
|
290
|
+
page: number;
|
|
291
|
+
perPage: number;
|
|
292
|
+
hasMore: boolean;
|
|
293
|
+
};
|
|
156
294
|
|
|
157
295
|
export type RequestFunction = (path: string, options?: RequestOptions) => Promise<any>;
|
|
158
296
|
|
|
@@ -206,9 +344,12 @@ export interface GetTelemetryParams {
|
|
|
206
344
|
page?: number;
|
|
207
345
|
perPage?: number;
|
|
208
346
|
attribute?: Record<string, string>;
|
|
347
|
+
fromDate?: Date;
|
|
348
|
+
toDate?: Date;
|
|
209
349
|
}
|
|
210
350
|
|
|
211
351
|
export interface GetNetworkResponse {
|
|
352
|
+
id: string;
|
|
212
353
|
name: string;
|
|
213
354
|
instructions: string;
|
|
214
355
|
agents: Array<{
|
|
@@ -222,3 +363,140 @@ export interface GetNetworkResponse {
|
|
|
222
363
|
};
|
|
223
364
|
state?: Record<string, any>;
|
|
224
365
|
}
|
|
366
|
+
|
|
367
|
+
export interface GetVNextNetworkResponse {
|
|
368
|
+
id: string;
|
|
369
|
+
name: string;
|
|
370
|
+
instructions: string;
|
|
371
|
+
agents: Array<{
|
|
372
|
+
name: string;
|
|
373
|
+
provider: string;
|
|
374
|
+
modelId: string;
|
|
375
|
+
}>;
|
|
376
|
+
routingModel: {
|
|
377
|
+
provider: string;
|
|
378
|
+
modelId: string;
|
|
379
|
+
};
|
|
380
|
+
workflows: Array<{
|
|
381
|
+
name: string;
|
|
382
|
+
description: string;
|
|
383
|
+
inputSchema: string | undefined;
|
|
384
|
+
outputSchema: string | undefined;
|
|
385
|
+
}>;
|
|
386
|
+
tools: Array<{
|
|
387
|
+
id: string;
|
|
388
|
+
description: string;
|
|
389
|
+
}>;
|
|
390
|
+
}
|
|
391
|
+
|
|
392
|
+
export interface GenerateVNextNetworkResponse {
|
|
393
|
+
task: string;
|
|
394
|
+
result: string;
|
|
395
|
+
resourceId: string;
|
|
396
|
+
resourceType: 'none' | 'tool' | 'agent' | 'workflow';
|
|
397
|
+
}
|
|
398
|
+
|
|
399
|
+
export interface GenerateOrStreamVNextNetworkParams {
|
|
400
|
+
message: string;
|
|
401
|
+
threadId?: string;
|
|
402
|
+
resourceId?: string;
|
|
403
|
+
runtimeContext?: RuntimeContext | Record<string, any>;
|
|
404
|
+
}
|
|
405
|
+
|
|
406
|
+
export interface LoopStreamVNextNetworkParams {
|
|
407
|
+
message: string;
|
|
408
|
+
threadId?: string;
|
|
409
|
+
resourceId?: string;
|
|
410
|
+
maxIterations?: number;
|
|
411
|
+
runtimeContext?: RuntimeContext | Record<string, any>;
|
|
412
|
+
}
|
|
413
|
+
|
|
414
|
+
export interface LoopVNextNetworkResponse {
|
|
415
|
+
status: 'success';
|
|
416
|
+
result: {
|
|
417
|
+
task: string;
|
|
418
|
+
resourceId: string;
|
|
419
|
+
resourceType: 'agent' | 'workflow' | 'none' | 'tool';
|
|
420
|
+
result: string;
|
|
421
|
+
iteration: number;
|
|
422
|
+
isOneOff: boolean;
|
|
423
|
+
prompt: string;
|
|
424
|
+
threadId?: string | undefined;
|
|
425
|
+
threadResourceId?: string | undefined;
|
|
426
|
+
isComplete?: boolean | undefined;
|
|
427
|
+
completionReason?: string | undefined;
|
|
428
|
+
};
|
|
429
|
+
steps: WorkflowResult<any, any>['steps'];
|
|
430
|
+
}
|
|
431
|
+
|
|
432
|
+
export interface McpServerListResponse {
|
|
433
|
+
servers: ServerInfo[];
|
|
434
|
+
next: string | null;
|
|
435
|
+
total_count: number;
|
|
436
|
+
}
|
|
437
|
+
|
|
438
|
+
export interface McpToolInfo {
|
|
439
|
+
id: string;
|
|
440
|
+
name: string;
|
|
441
|
+
description?: string;
|
|
442
|
+
inputSchema: string;
|
|
443
|
+
toolType?: MCPToolType;
|
|
444
|
+
}
|
|
445
|
+
|
|
446
|
+
export interface McpServerToolListResponse {
|
|
447
|
+
tools: McpToolInfo[];
|
|
448
|
+
}
|
|
449
|
+
|
|
450
|
+
export type ClientScoreRowData = Omit<ScoreRowData, 'createdAt' | 'updatedAt'> & {
|
|
451
|
+
createdAt: string;
|
|
452
|
+
updatedAt: string;
|
|
453
|
+
};
|
|
454
|
+
|
|
455
|
+
// Scores-related types
|
|
456
|
+
export interface GetScoresByRunIdParams {
|
|
457
|
+
runId: string;
|
|
458
|
+
page?: number;
|
|
459
|
+
perPage?: number;
|
|
460
|
+
}
|
|
461
|
+
|
|
462
|
+
export interface GetScoresByScorerIdParams {
|
|
463
|
+
scorerId: string;
|
|
464
|
+
entityId?: string;
|
|
465
|
+
entityType?: string;
|
|
466
|
+
page?: number;
|
|
467
|
+
perPage?: number;
|
|
468
|
+
}
|
|
469
|
+
|
|
470
|
+
export interface GetScoresByEntityIdParams {
|
|
471
|
+
entityId: string;
|
|
472
|
+
entityType: string;
|
|
473
|
+
page?: number;
|
|
474
|
+
perPage?: number;
|
|
475
|
+
}
|
|
476
|
+
|
|
477
|
+
export interface SaveScoreParams {
|
|
478
|
+
score: Omit<ScoreRowData, 'id' | 'createdAt' | 'updatedAt'>;
|
|
479
|
+
}
|
|
480
|
+
|
|
481
|
+
export interface GetScoresResponse {
|
|
482
|
+
pagination: {
|
|
483
|
+
total: number;
|
|
484
|
+
page: number;
|
|
485
|
+
perPage: number;
|
|
486
|
+
hasMore: boolean;
|
|
487
|
+
};
|
|
488
|
+
scores: ClientScoreRowData[];
|
|
489
|
+
}
|
|
490
|
+
|
|
491
|
+
export interface SaveScoreResponse {
|
|
492
|
+
score: ClientScoreRowData;
|
|
493
|
+
}
|
|
494
|
+
|
|
495
|
+
export type GetScorerResponse = MastraScorerEntry & {
|
|
496
|
+
agentIds: string[];
|
|
497
|
+
workflowIds: string[];
|
|
498
|
+
};
|
|
499
|
+
|
|
500
|
+
export interface GetScorersResponse {
|
|
501
|
+
scorers: Array<GetScorerResponse>;
|
|
502
|
+
}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { RuntimeContext } from '@mastra/core/runtime-context';
|
|
2
|
+
|
|
3
|
+
export function parseClientRuntimeContext(runtimeContext?: RuntimeContext | Record<string, any>) {
|
|
4
|
+
if (runtimeContext) {
|
|
5
|
+
if (runtimeContext instanceof RuntimeContext) {
|
|
6
|
+
return Object.fromEntries(runtimeContext.entries());
|
|
7
|
+
}
|
|
8
|
+
return runtimeContext;
|
|
9
|
+
}
|
|
10
|
+
return undefined;
|
|
11
|
+
}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import { isVercelTool } from '@mastra/core/tools/is-vercel-tool';
|
|
2
|
+
import { zodToJsonSchema } from './zod-to-json-schema';
|
|
3
|
+
import type { ToolsInput } from '@mastra/core/agent';
|
|
4
|
+
|
|
5
|
+
export function processClientTools(clientTools: ToolsInput | undefined): ToolsInput | undefined {
|
|
6
|
+
if (!clientTools) {
|
|
7
|
+
return undefined;
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
return Object.fromEntries(
|
|
11
|
+
Object.entries(clientTools).map(([key, value]) => {
|
|
12
|
+
if (isVercelTool(value)) {
|
|
13
|
+
return [
|
|
14
|
+
key,
|
|
15
|
+
{
|
|
16
|
+
...value,
|
|
17
|
+
parameters: value.parameters ? zodToJsonSchema(value.parameters) : undefined,
|
|
18
|
+
},
|
|
19
|
+
];
|
|
20
|
+
} else {
|
|
21
|
+
return [
|
|
22
|
+
key,
|
|
23
|
+
{
|
|
24
|
+
...value,
|
|
25
|
+
inputSchema: value.inputSchema ? zodToJsonSchema(value.inputSchema) : undefined,
|
|
26
|
+
outputSchema: value.outputSchema ? zodToJsonSchema(value.outputSchema) : undefined,
|
|
27
|
+
},
|
|
28
|
+
];
|
|
29
|
+
}
|
|
30
|
+
}),
|
|
31
|
+
);
|
|
32
|
+
}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { ZodSchema } from 'zod';
|
|
2
|
+
import originalZodToJsonSchema from 'zod-to-json-schema';
|
|
3
|
+
|
|
4
|
+
export function zodToJsonSchema<T extends ZodSchema | any>(zodSchema: T) {
|
|
5
|
+
if (!(zodSchema instanceof ZodSchema)) {
|
|
6
|
+
return zodSchema;
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
return originalZodToJsonSchema(zodSchema, { $refStrategy: 'none' });
|
|
10
|
+
}
|
|
@@ -0,0 +1,180 @@
|
|
|
1
|
+
import { describe, it, expect, vi, beforeEach } from 'vitest';
|
|
2
|
+
import type { MastraMessageV1, MastraMessageV2 } from '@mastra/core';
|
|
3
|
+
import { MastraClient } from './client';
|
|
4
|
+
|
|
5
|
+
describe('V2 Message Format Support', () => {
|
|
6
|
+
let client: MastraClient;
|
|
7
|
+
const agentId = 'test-agent';
|
|
8
|
+
|
|
9
|
+
beforeEach(() => {
|
|
10
|
+
global.fetch = vi.fn();
|
|
11
|
+
client = new MastraClient({
|
|
12
|
+
baseUrl: 'http://localhost:3000',
|
|
13
|
+
});
|
|
14
|
+
});
|
|
15
|
+
|
|
16
|
+
it('should send v1 messages successfully', async () => {
|
|
17
|
+
const v1Messages: MastraMessageV1[] = [
|
|
18
|
+
{
|
|
19
|
+
id: 'msg-v1-1',
|
|
20
|
+
role: 'user',
|
|
21
|
+
content: 'Hello from v1!',
|
|
22
|
+
type: 'text',
|
|
23
|
+
createdAt: new Date(),
|
|
24
|
+
threadId: 'thread-123',
|
|
25
|
+
resourceId: 'resource-123',
|
|
26
|
+
},
|
|
27
|
+
];
|
|
28
|
+
|
|
29
|
+
(global.fetch as any).mockResolvedValueOnce({
|
|
30
|
+
ok: true,
|
|
31
|
+
json: async () => v1Messages,
|
|
32
|
+
});
|
|
33
|
+
|
|
34
|
+
const result = await client.saveMessageToMemory({
|
|
35
|
+
agentId,
|
|
36
|
+
messages: v1Messages,
|
|
37
|
+
});
|
|
38
|
+
|
|
39
|
+
expect(result).toEqual(v1Messages);
|
|
40
|
+
expect(global.fetch).toHaveBeenCalledWith(
|
|
41
|
+
expect.stringContaining('/api/memory/save-messages'),
|
|
42
|
+
expect.objectContaining({
|
|
43
|
+
method: 'POST',
|
|
44
|
+
body: JSON.stringify({ agentId, messages: v1Messages }),
|
|
45
|
+
}),
|
|
46
|
+
);
|
|
47
|
+
});
|
|
48
|
+
|
|
49
|
+
it('should send v2 messages successfully', async () => {
|
|
50
|
+
const v2Messages: MastraMessageV2[] = [
|
|
51
|
+
{
|
|
52
|
+
id: 'msg-v2-1',
|
|
53
|
+
role: 'assistant',
|
|
54
|
+
createdAt: new Date(),
|
|
55
|
+
threadId: 'thread-123',
|
|
56
|
+
resourceId: 'resource-123',
|
|
57
|
+
content: {
|
|
58
|
+
format: 2,
|
|
59
|
+
parts: [{ type: 'text', text: 'Hello from v2!' }],
|
|
60
|
+
content: 'Hello from v2!',
|
|
61
|
+
},
|
|
62
|
+
},
|
|
63
|
+
];
|
|
64
|
+
|
|
65
|
+
(global.fetch as any).mockResolvedValueOnce({
|
|
66
|
+
ok: true,
|
|
67
|
+
json: async () => v2Messages,
|
|
68
|
+
});
|
|
69
|
+
|
|
70
|
+
const result = await client.saveMessageToMemory({
|
|
71
|
+
agentId,
|
|
72
|
+
messages: v2Messages,
|
|
73
|
+
});
|
|
74
|
+
|
|
75
|
+
expect(result).toEqual(v2Messages);
|
|
76
|
+
expect(global.fetch).toHaveBeenCalledWith(
|
|
77
|
+
expect.stringContaining('/api/memory/save-messages'),
|
|
78
|
+
expect.objectContaining({
|
|
79
|
+
method: 'POST',
|
|
80
|
+
body: JSON.stringify({ agentId, messages: v2Messages }),
|
|
81
|
+
}),
|
|
82
|
+
);
|
|
83
|
+
});
|
|
84
|
+
|
|
85
|
+
it('should send mixed v1 and v2 messages successfully', async () => {
|
|
86
|
+
const mixedMessages: (MastraMessageV1 | MastraMessageV2)[] = [
|
|
87
|
+
{
|
|
88
|
+
id: 'msg-v1-1',
|
|
89
|
+
role: 'user',
|
|
90
|
+
content: 'Question in v1 format',
|
|
91
|
+
type: 'text',
|
|
92
|
+
createdAt: new Date(),
|
|
93
|
+
threadId: 'thread-123',
|
|
94
|
+
resourceId: 'resource-123',
|
|
95
|
+
},
|
|
96
|
+
{
|
|
97
|
+
id: 'msg-v2-1',
|
|
98
|
+
role: 'assistant',
|
|
99
|
+
createdAt: new Date(),
|
|
100
|
+
threadId: 'thread-123',
|
|
101
|
+
resourceId: 'resource-123',
|
|
102
|
+
content: {
|
|
103
|
+
format: 2,
|
|
104
|
+
parts: [
|
|
105
|
+
{ type: 'text', text: 'Answer in v2 format' },
|
|
106
|
+
{
|
|
107
|
+
type: 'tool-invocation',
|
|
108
|
+
toolInvocation: {
|
|
109
|
+
state: 'result' as const,
|
|
110
|
+
toolCallId: 'call-123',
|
|
111
|
+
toolName: 'calculator',
|
|
112
|
+
args: { a: 1, b: 2 },
|
|
113
|
+
result: '3',
|
|
114
|
+
},
|
|
115
|
+
},
|
|
116
|
+
],
|
|
117
|
+
toolInvocations: [
|
|
118
|
+
{
|
|
119
|
+
state: 'result' as const,
|
|
120
|
+
toolCallId: 'call-123',
|
|
121
|
+
toolName: 'calculator',
|
|
122
|
+
args: { a: 1, b: 2 },
|
|
123
|
+
result: '3',
|
|
124
|
+
},
|
|
125
|
+
],
|
|
126
|
+
},
|
|
127
|
+
},
|
|
128
|
+
];
|
|
129
|
+
|
|
130
|
+
(global.fetch as any).mockResolvedValueOnce({
|
|
131
|
+
ok: true,
|
|
132
|
+
json: async () => mixedMessages,
|
|
133
|
+
});
|
|
134
|
+
|
|
135
|
+
const result = await client.saveMessageToMemory({
|
|
136
|
+
agentId,
|
|
137
|
+
messages: mixedMessages,
|
|
138
|
+
});
|
|
139
|
+
|
|
140
|
+
expect(result).toEqual(mixedMessages);
|
|
141
|
+
expect(global.fetch).toHaveBeenCalledWith(
|
|
142
|
+
expect.stringContaining('/api/memory/save-messages'),
|
|
143
|
+
expect.objectContaining({
|
|
144
|
+
method: 'POST',
|
|
145
|
+
body: JSON.stringify({ agentId, messages: mixedMessages }),
|
|
146
|
+
}),
|
|
147
|
+
);
|
|
148
|
+
});
|
|
149
|
+
|
|
150
|
+
it('should handle v2 messages with attachments', async () => {
|
|
151
|
+
const v2MessageWithAttachments: MastraMessageV2 = {
|
|
152
|
+
id: 'msg-v2-att',
|
|
153
|
+
role: 'user',
|
|
154
|
+
createdAt: new Date(),
|
|
155
|
+
threadId: 'thread-123',
|
|
156
|
+
resourceId: 'resource-123',
|
|
157
|
+
content: {
|
|
158
|
+
format: 2,
|
|
159
|
+
parts: [
|
|
160
|
+
{ type: 'text', text: 'Check out this image:' },
|
|
161
|
+
{ type: 'file', data: 'data:image/png;base64,iVBORw0...', mimeType: 'image/png' },
|
|
162
|
+
],
|
|
163
|
+
experimental_attachments: [{ url: 'data:image/png;base64,iVBORw0...', contentType: 'image/png' }],
|
|
164
|
+
},
|
|
165
|
+
};
|
|
166
|
+
|
|
167
|
+
(global.fetch as any).mockResolvedValueOnce({
|
|
168
|
+
ok: true,
|
|
169
|
+
json: async () => [v2MessageWithAttachments],
|
|
170
|
+
});
|
|
171
|
+
|
|
172
|
+
const result = await client.saveMessageToMemory({
|
|
173
|
+
agentId,
|
|
174
|
+
messages: [v2MessageWithAttachments],
|
|
175
|
+
});
|
|
176
|
+
|
|
177
|
+
expect(result).toHaveLength(1);
|
|
178
|
+
expect(result[0]).toEqual(v2MessageWithAttachments);
|
|
179
|
+
});
|
|
180
|
+
});
|
package/tsconfig.json
CHANGED
package/tsup.config.ts
ADDED
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { defineConfig } from 'tsup';
|
|
2
|
+
import { generateTypes } from '@internal/types-builder';
|
|
3
|
+
|
|
4
|
+
export default defineConfig({
|
|
5
|
+
entry: ['src/index.ts'],
|
|
6
|
+
format: ['esm', 'cjs'],
|
|
7
|
+
clean: true,
|
|
8
|
+
dts: false,
|
|
9
|
+
splitting: true,
|
|
10
|
+
treeshake: {
|
|
11
|
+
preset: 'smallest',
|
|
12
|
+
},
|
|
13
|
+
sourcemap: true,
|
|
14
|
+
onSuccess: async () => {
|
|
15
|
+
await generateTypes(process.cwd());
|
|
16
|
+
},
|
|
17
|
+
});
|