@mastra/client-js 0.0.0-transpile-packages-20250724123433 → 0.0.0-transpile-packages-20250731152758
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.turbo/turbo-build.log +2 -17
- package/CHANGELOG.md +202 -2
- 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 +348 -251
- package/dist/index.cjs.map +1 -0
- package/dist/index.d.ts +4 -1224
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +348 -251
- 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 +10 -7
- package/src/adapters/agui.test.ts +145 -3
- package/src/client.ts +97 -0
- package/src/index.test.ts +349 -1
- package/src/index.ts +1 -0
- package/src/resources/agent.ts +285 -300
- package/src/resources/base.ts +3 -1
- package/src/resources/memory-thread.test.ts +285 -0
- package/src/resources/memory-thread.ts +18 -0
- package/src/resources/network-memory-thread.test.ts +269 -0
- package/src/resources/network-memory-thread.ts +18 -0
- package/src/resources/network.ts +4 -3
- package/src/types.ts +61 -6
- package/src/utils/process-client-tools.ts +1 -1
- package/src/v2-messages.test.ts +180 -0
- package/tsconfig.build.json +9 -0
- package/tsconfig.json +1 -1
- package/tsup.config.ts +22 -0
- package/dist/index.d.cts +0 -1224
package/src/index.test.ts
CHANGED
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
import { describe, expect, beforeEach, it, vi } from 'vitest';
|
|
2
2
|
import { MastraClient } from './client';
|
|
3
|
-
import type { McpServerListResponse
|
|
3
|
+
import type { McpServerListResponse } from './types';
|
|
4
|
+
import type { ServerDetailInfo } from '@mastra/core/mcp';
|
|
5
|
+
import { ScoringEntityType, ScoringSource } from '@mastra/core/scores';
|
|
4
6
|
|
|
5
7
|
// Mock fetch globally
|
|
6
8
|
global.fetch = vi.fn();
|
|
@@ -308,6 +310,114 @@ describe('MastraClient Resources', () => {
|
|
|
308
310
|
}
|
|
309
311
|
});
|
|
310
312
|
|
|
313
|
+
it('should stream responses with tool calls', async () => {
|
|
314
|
+
const firstMockChunk = `0:"test "
|
|
315
|
+
0:"response"
|
|
316
|
+
9:{"toolCallId":"tool1","toolName":"testTool","args":{"arg1":"value1"}}
|
|
317
|
+
e:{"finishReason":"tool-calls","usage":{"promptTokens":1,"completionTokens":1},"isContinued":false}
|
|
318
|
+
d:{"finishReason":"tool-calls","usage":{"promptTokens":2,"completionTokens":2}}
|
|
319
|
+
`;
|
|
320
|
+
|
|
321
|
+
const secondMockChunk = `0:"final response"
|
|
322
|
+
e:{"finishReason":"stop","usage":{"promptTokens":2,"completionTokens":2},"isContinued":false}
|
|
323
|
+
d:{"finishReason":"stop","usage":{"promptTokens":2,"completionTokens":2}}
|
|
324
|
+
`;
|
|
325
|
+
|
|
326
|
+
const firstResponseBody = new ReadableStream({
|
|
327
|
+
start(controller) {
|
|
328
|
+
controller.enqueue(new TextEncoder().encode(firstMockChunk));
|
|
329
|
+
controller.close();
|
|
330
|
+
},
|
|
331
|
+
});
|
|
332
|
+
|
|
333
|
+
const secondResponseBody = new ReadableStream({
|
|
334
|
+
start(controller) {
|
|
335
|
+
controller.enqueue(new TextEncoder().encode(secondMockChunk));
|
|
336
|
+
controller.close();
|
|
337
|
+
},
|
|
338
|
+
});
|
|
339
|
+
|
|
340
|
+
(global.fetch as any)
|
|
341
|
+
.mockResolvedValueOnce(
|
|
342
|
+
new Response(firstResponseBody, {
|
|
343
|
+
status: 200,
|
|
344
|
+
headers: new Headers({ 'Content-Type': 'text/event-stream' }),
|
|
345
|
+
}),
|
|
346
|
+
)
|
|
347
|
+
.mockResolvedValueOnce(
|
|
348
|
+
new Response(secondResponseBody, {
|
|
349
|
+
status: 200,
|
|
350
|
+
headers: new Headers({ 'Content-Type': 'text/event-stream' }),
|
|
351
|
+
}),
|
|
352
|
+
);
|
|
353
|
+
|
|
354
|
+
const response = await agent.stream({
|
|
355
|
+
messages: [
|
|
356
|
+
{
|
|
357
|
+
role: 'user',
|
|
358
|
+
content: 'test',
|
|
359
|
+
},
|
|
360
|
+
],
|
|
361
|
+
clientTools: {
|
|
362
|
+
testTool: {
|
|
363
|
+
id: 'testTool',
|
|
364
|
+
description: 'Test Tool',
|
|
365
|
+
inputSchema: {
|
|
366
|
+
type: 'object',
|
|
367
|
+
properties: {
|
|
368
|
+
arg1: { type: 'string' },
|
|
369
|
+
},
|
|
370
|
+
},
|
|
371
|
+
execute: async () => {
|
|
372
|
+
return 'test result';
|
|
373
|
+
},
|
|
374
|
+
},
|
|
375
|
+
},
|
|
376
|
+
});
|
|
377
|
+
|
|
378
|
+
expect(response.body).toBeInstanceOf(ReadableStream);
|
|
379
|
+
const reader = response?.body?.getReader();
|
|
380
|
+
expect(reader).toBeDefined();
|
|
381
|
+
|
|
382
|
+
let output = '';
|
|
383
|
+
if (reader) {
|
|
384
|
+
while (true) {
|
|
385
|
+
const { value, done } = await reader.read();
|
|
386
|
+
if (done) break;
|
|
387
|
+
output += new TextDecoder().decode(value);
|
|
388
|
+
}
|
|
389
|
+
}
|
|
390
|
+
|
|
391
|
+
expect(global.fetch).toHaveBeenCalledTimes(2);
|
|
392
|
+
|
|
393
|
+
const [secondUrl, secondConfig] = (global.fetch as any).mock.calls[1];
|
|
394
|
+
expect(secondUrl).toBe(`${clientOptions.baseUrl}/api/agents/test-agent/stream`);
|
|
395
|
+
|
|
396
|
+
const secondRequestBody = JSON.parse(secondConfig.body);
|
|
397
|
+
expect(secondRequestBody.messages).toHaveLength(2);
|
|
398
|
+
expect(secondRequestBody.messages[0].content).toBe('test');
|
|
399
|
+
expect(secondRequestBody.messages[1].content).toBe('test response');
|
|
400
|
+
expect(secondRequestBody.messages[1].parts).toEqual([
|
|
401
|
+
{
|
|
402
|
+
type: 'text',
|
|
403
|
+
text: 'test response',
|
|
404
|
+
},
|
|
405
|
+
{
|
|
406
|
+
type: 'tool-invocation',
|
|
407
|
+
toolInvocation: {
|
|
408
|
+
state: 'result',
|
|
409
|
+
step: 0,
|
|
410
|
+
toolCallId: 'tool1',
|
|
411
|
+
toolName: 'testTool',
|
|
412
|
+
args: {
|
|
413
|
+
arg1: 'value1',
|
|
414
|
+
},
|
|
415
|
+
result: 'test result',
|
|
416
|
+
},
|
|
417
|
+
},
|
|
418
|
+
]);
|
|
419
|
+
});
|
|
420
|
+
|
|
311
421
|
it('should get agent tool', async () => {
|
|
312
422
|
const mockResponse = {
|
|
313
423
|
id: 'tool1',
|
|
@@ -875,4 +985,242 @@ describe('MastraClient Resources', () => {
|
|
|
875
985
|
});
|
|
876
986
|
});
|
|
877
987
|
});
|
|
988
|
+
|
|
989
|
+
describe('Scores Methods', () => {
|
|
990
|
+
describe('getScorers()', () => {
|
|
991
|
+
it('should fetch all available scorers', async () => {
|
|
992
|
+
const mockResponse = {
|
|
993
|
+
scorers: [
|
|
994
|
+
{ id: 'scorer-1', name: 'Test Scorer 1', description: 'A test scorer' },
|
|
995
|
+
{ id: 'scorer-2', name: 'Test Scorer 2', description: 'Another test scorer' },
|
|
996
|
+
],
|
|
997
|
+
};
|
|
998
|
+
mockFetchResponse(mockResponse);
|
|
999
|
+
|
|
1000
|
+
const result = await client.getScorers();
|
|
1001
|
+
expect(result).toEqual(mockResponse);
|
|
1002
|
+
expect(global.fetch).toHaveBeenCalledWith(
|
|
1003
|
+
`${clientOptions.baseUrl}/api/scores/scorers`,
|
|
1004
|
+
expect.objectContaining({
|
|
1005
|
+
headers: expect.objectContaining(clientOptions.headers),
|
|
1006
|
+
}),
|
|
1007
|
+
);
|
|
1008
|
+
});
|
|
1009
|
+
});
|
|
1010
|
+
|
|
1011
|
+
describe('getScoresByRunId()', () => {
|
|
1012
|
+
it('should fetch scores by run ID without pagination', async () => {
|
|
1013
|
+
const mockResponse = {
|
|
1014
|
+
pagination: {
|
|
1015
|
+
total: 10,
|
|
1016
|
+
page: 0,
|
|
1017
|
+
perPage: 10,
|
|
1018
|
+
hasMore: false,
|
|
1019
|
+
},
|
|
1020
|
+
scores: [
|
|
1021
|
+
{
|
|
1022
|
+
id: 'score-1',
|
|
1023
|
+
runId: 'run-123',
|
|
1024
|
+
scorer: { name: 'test-scorer' },
|
|
1025
|
+
result: { score: 0.8 },
|
|
1026
|
+
input: { messages: [] },
|
|
1027
|
+
output: { response: 'test' },
|
|
1028
|
+
source: 'LIVE',
|
|
1029
|
+
createdAt: new Date(),
|
|
1030
|
+
updatedAt: new Date(),
|
|
1031
|
+
},
|
|
1032
|
+
],
|
|
1033
|
+
};
|
|
1034
|
+
|
|
1035
|
+
mockFetchResponse({
|
|
1036
|
+
...mockResponse,
|
|
1037
|
+
scores: mockResponse.scores.map(score => ({
|
|
1038
|
+
...score,
|
|
1039
|
+
createdAt: score.createdAt.toISOString(),
|
|
1040
|
+
updatedAt: score.updatedAt.toISOString(),
|
|
1041
|
+
})),
|
|
1042
|
+
});
|
|
1043
|
+
|
|
1044
|
+
const result = await client.getScoresByRunId({ runId: 'run-123' });
|
|
1045
|
+
|
|
1046
|
+
expect(result).toEqual({
|
|
1047
|
+
...mockResponse,
|
|
1048
|
+
scores: mockResponse.scores.map(score => ({
|
|
1049
|
+
...score,
|
|
1050
|
+
createdAt: score.createdAt.toISOString(),
|
|
1051
|
+
updatedAt: score.updatedAt.toISOString(),
|
|
1052
|
+
})),
|
|
1053
|
+
});
|
|
1054
|
+
|
|
1055
|
+
expect(global.fetch).toHaveBeenCalledWith(
|
|
1056
|
+
`${clientOptions.baseUrl}/api/scores/run/run-123`,
|
|
1057
|
+
expect.objectContaining({
|
|
1058
|
+
headers: expect.objectContaining(clientOptions.headers),
|
|
1059
|
+
}),
|
|
1060
|
+
);
|
|
1061
|
+
});
|
|
1062
|
+
|
|
1063
|
+
it('should fetch scores by run ID with pagination', async () => {
|
|
1064
|
+
const mockResponse = {
|
|
1065
|
+
pagination: {
|
|
1066
|
+
total: 20,
|
|
1067
|
+
page: 1,
|
|
1068
|
+
perPage: 5,
|
|
1069
|
+
hasMore: true,
|
|
1070
|
+
},
|
|
1071
|
+
scores: [],
|
|
1072
|
+
};
|
|
1073
|
+
mockFetchResponse(mockResponse);
|
|
1074
|
+
|
|
1075
|
+
const result = await client.getScoresByRunId({
|
|
1076
|
+
runId: 'run-123',
|
|
1077
|
+
page: 1,
|
|
1078
|
+
perPage: 5,
|
|
1079
|
+
});
|
|
1080
|
+
expect(result).toEqual(mockResponse);
|
|
1081
|
+
expect(global.fetch).toHaveBeenCalledWith(
|
|
1082
|
+
`${clientOptions.baseUrl}/api/scores/run/run-123?page=1&perPage=5`,
|
|
1083
|
+
expect.objectContaining({
|
|
1084
|
+
headers: expect.objectContaining(clientOptions.headers),
|
|
1085
|
+
}),
|
|
1086
|
+
);
|
|
1087
|
+
});
|
|
1088
|
+
});
|
|
1089
|
+
|
|
1090
|
+
describe('getScoresByEntityId()', () => {
|
|
1091
|
+
it('should fetch scores by entity ID and type without pagination', async () => {
|
|
1092
|
+
const mockResponse = {
|
|
1093
|
+
pagination: {
|
|
1094
|
+
total: 5,
|
|
1095
|
+
page: 0,
|
|
1096
|
+
perPage: 10,
|
|
1097
|
+
hasMore: false,
|
|
1098
|
+
},
|
|
1099
|
+
scores: [
|
|
1100
|
+
{
|
|
1101
|
+
id: 'score-1',
|
|
1102
|
+
runId: 'run-123',
|
|
1103
|
+
entityId: 'agent-456',
|
|
1104
|
+
entityType: 'AGENT',
|
|
1105
|
+
scorer: { name: 'test-scorer' },
|
|
1106
|
+
result: { score: 0.9 },
|
|
1107
|
+
input: { messages: [] },
|
|
1108
|
+
output: { response: 'test' },
|
|
1109
|
+
source: 'LIVE',
|
|
1110
|
+
createdAt: new Date(),
|
|
1111
|
+
updatedAt: new Date(),
|
|
1112
|
+
},
|
|
1113
|
+
],
|
|
1114
|
+
};
|
|
1115
|
+
|
|
1116
|
+
const mockResponseWithDates = mockResponse.scores.map(score => ({
|
|
1117
|
+
...score,
|
|
1118
|
+
createdAt: score.createdAt.toISOString(),
|
|
1119
|
+
updatedAt: score.updatedAt.toISOString(),
|
|
1120
|
+
}));
|
|
1121
|
+
|
|
1122
|
+
mockFetchResponse({
|
|
1123
|
+
...mockResponse,
|
|
1124
|
+
scores: mockResponseWithDates,
|
|
1125
|
+
});
|
|
1126
|
+
|
|
1127
|
+
const result = await client.getScoresByEntityId({
|
|
1128
|
+
entityId: 'agent-456',
|
|
1129
|
+
entityType: 'AGENT',
|
|
1130
|
+
});
|
|
1131
|
+
|
|
1132
|
+
expect(result).toEqual({
|
|
1133
|
+
...mockResponse,
|
|
1134
|
+
scores: mockResponseWithDates,
|
|
1135
|
+
});
|
|
1136
|
+
|
|
1137
|
+
expect(global.fetch).toHaveBeenCalledWith(
|
|
1138
|
+
`${clientOptions.baseUrl}/api/scores/entity/AGENT/agent-456`,
|
|
1139
|
+
expect.objectContaining({
|
|
1140
|
+
headers: expect.objectContaining(clientOptions.headers),
|
|
1141
|
+
}),
|
|
1142
|
+
);
|
|
1143
|
+
});
|
|
1144
|
+
|
|
1145
|
+
it('should fetch scores by entity ID and type with pagination', async () => {
|
|
1146
|
+
const mockResponse = {
|
|
1147
|
+
pagination: {
|
|
1148
|
+
total: 15,
|
|
1149
|
+
page: 2,
|
|
1150
|
+
perPage: 5,
|
|
1151
|
+
hasMore: true,
|
|
1152
|
+
},
|
|
1153
|
+
scores: [],
|
|
1154
|
+
};
|
|
1155
|
+
mockFetchResponse(mockResponse);
|
|
1156
|
+
|
|
1157
|
+
const result = await client.getScoresByEntityId({
|
|
1158
|
+
entityId: 'workflow-789',
|
|
1159
|
+
entityType: 'WORKFLOW',
|
|
1160
|
+
page: 2,
|
|
1161
|
+
perPage: 5,
|
|
1162
|
+
});
|
|
1163
|
+
expect(result).toEqual(mockResponse);
|
|
1164
|
+
expect(global.fetch).toHaveBeenCalledWith(
|
|
1165
|
+
`${clientOptions.baseUrl}/api/scores/entity/WORKFLOW/workflow-789?page=2&perPage=5`,
|
|
1166
|
+
expect.objectContaining({
|
|
1167
|
+
body: undefined,
|
|
1168
|
+
headers: expect.objectContaining(clientOptions.headers),
|
|
1169
|
+
signal: undefined,
|
|
1170
|
+
}),
|
|
1171
|
+
);
|
|
1172
|
+
});
|
|
1173
|
+
});
|
|
1174
|
+
|
|
1175
|
+
describe('saveScore()', () => {
|
|
1176
|
+
it('should save a score', async () => {
|
|
1177
|
+
const scoreData = {
|
|
1178
|
+
id: 'score-1',
|
|
1179
|
+
scorerId: 'test-scorer',
|
|
1180
|
+
runId: 'run-123',
|
|
1181
|
+
scorer: { name: 'test-scorer' },
|
|
1182
|
+
score: 0.85,
|
|
1183
|
+
input: [],
|
|
1184
|
+
output: { response: 'test response' },
|
|
1185
|
+
source: 'LIVE' as ScoringSource,
|
|
1186
|
+
entityId: 'agent-456',
|
|
1187
|
+
entityType: 'AGENT' as ScoringEntityType,
|
|
1188
|
+
entity: { id: 'agent-456', name: 'test-agent' },
|
|
1189
|
+
createdAt: new Date(),
|
|
1190
|
+
updatedAt: new Date(),
|
|
1191
|
+
runtimeContext: {
|
|
1192
|
+
model: {
|
|
1193
|
+
name: 'test-model',
|
|
1194
|
+
version: '1.0.0',
|
|
1195
|
+
},
|
|
1196
|
+
},
|
|
1197
|
+
};
|
|
1198
|
+
const mockResponse = {
|
|
1199
|
+
score: {
|
|
1200
|
+
...scoreData,
|
|
1201
|
+
createdAt: scoreData.createdAt.toISOString(),
|
|
1202
|
+
updatedAt: scoreData.updatedAt.toISOString(),
|
|
1203
|
+
},
|
|
1204
|
+
};
|
|
1205
|
+
mockFetchResponse(mockResponse);
|
|
1206
|
+
|
|
1207
|
+
const result = await client.saveScore({ score: scoreData });
|
|
1208
|
+
expect(result).toEqual({
|
|
1209
|
+
score: {
|
|
1210
|
+
...scoreData,
|
|
1211
|
+
createdAt: scoreData.createdAt.toISOString(),
|
|
1212
|
+
updatedAt: scoreData.updatedAt.toISOString(),
|
|
1213
|
+
},
|
|
1214
|
+
});
|
|
1215
|
+
expect(global.fetch).toHaveBeenCalledWith(
|
|
1216
|
+
`${clientOptions.baseUrl}/api/scores`,
|
|
1217
|
+
expect.objectContaining({
|
|
1218
|
+
method: 'POST',
|
|
1219
|
+
headers: expect.objectContaining(clientOptions.headers),
|
|
1220
|
+
body: JSON.stringify({ score: scoreData }),
|
|
1221
|
+
}),
|
|
1222
|
+
);
|
|
1223
|
+
});
|
|
1224
|
+
});
|
|
1225
|
+
});
|
|
878
1226
|
});
|
package/src/index.ts
CHANGED