@mastra/client-js 1.56.0-alpha.6 → 1.56.0-alpha.8
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/docs/SKILL.md +1 -1
- package/dist/docs/assets/SOURCE_MAP.json +1 -1
- package/dist/docs/references/reference-client-js-agents.md +20 -0
- package/dist/docs/references/reference-client-js-observability.md +2 -2
- package/dist/docs/references/reference-observability-tracing-advanced-queries.md +28 -21
- package/dist/index.cjs +63 -11
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +63 -11
- package/dist/index.js.map +1 -1
- package/dist/resources/agent.d.ts +44 -4
- package/dist/resources/agent.d.ts.map +1 -1
- package/dist/route-types.generated.d.ts +12 -4
- package/dist/route-types.generated.d.ts.map +1 -1
- package/package.json +5 -5
package/dist/index.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { v4 } from "@lukeed/uuid";
|
|
2
2
|
import { getErrorFromUnknown } from "@mastra/core/error";
|
|
3
|
-
import { standardSchemaToJSONSchema, toStandardSchema } from "@mastra/schema-compat/schema";
|
|
4
3
|
import { RequestContext, RequestContext as RequestContext$1 } from "@mastra/core/request-context";
|
|
4
|
+
import { standardSchemaToJSONSchema, toStandardSchema } from "@mastra/schema-compat/schema";
|
|
5
5
|
import { zodToJsonSchema } from "@mastra/schema-compat/zod-to-json";
|
|
6
6
|
import { MastraA2AError } from "@mastra/core/a2a/client";
|
|
7
7
|
import { AgentCard, CancelTaskRequest, DeleteTaskPushNotificationConfigRequest, GetTaskPushNotificationConfigRequest, GetTaskRequest, ListTaskPushNotificationConfigsRequest, ListTaskPushNotificationConfigsResponse, ListTasksRequest, ListTasksResponse, SendMessageRequest, SendMessageResponse, StreamResponse, SubscribeToTaskRequest, Task, TaskPushNotificationConfig } from "@mastra/core/a2a/v1";
|
|
@@ -2620,6 +2620,7 @@ var Agent = class extends BaseResource {
|
|
|
2620
2620
|
try {
|
|
2621
2621
|
let messages = [];
|
|
2622
2622
|
let streamRunId = processedParams.runId;
|
|
2623
|
+
let finishedHistory;
|
|
2623
2624
|
const [streamForController, streamForProcessing] = response.body.tee();
|
|
2624
2625
|
const decoder = new TextDecoder();
|
|
2625
2626
|
let pendingText = "";
|
|
@@ -2627,6 +2628,13 @@ var Agent = class extends BaseResource {
|
|
|
2627
2628
|
pendingText += text;
|
|
2628
2629
|
const lines = pendingText.split("\n\n");
|
|
2629
2630
|
pendingText = isFinal ? "" : lines.pop() ?? "";
|
|
2631
|
+
for (const line of lines) {
|
|
2632
|
+
if (!line.startsWith("data: ") || !line.includes("\"type\":\"finish\"")) continue;
|
|
2633
|
+
try {
|
|
2634
|
+
const all = JSON.parse(line.slice(6))?.payload?.messages?.all;
|
|
2635
|
+
if (Array.isArray(all)) finishedHistory = all;
|
|
2636
|
+
} catch {}
|
|
2637
|
+
}
|
|
2630
2638
|
const readableLines = lines.filter((line) => line.trim() !== "[DONE]" && line.trim() !== "data: [DONE]").join("\n\n");
|
|
2631
2639
|
if (readableLines) safeEnqueue(new TextEncoder().encode(`${readableLines}\n\n`));
|
|
2632
2640
|
};
|
|
@@ -2780,12 +2788,12 @@ var Agent = class extends BaseResource {
|
|
|
2780
2788
|
role: "tool",
|
|
2781
2789
|
content: toolResultContents
|
|
2782
2790
|
};
|
|
2783
|
-
const updatedMessages = threadId ? [toolResultMessage] : [
|
|
2791
|
+
const updatedMessages = threadId ? [toolResultMessage] : (route === "resume-stream" || route === "approve-tool-call" || route === "decline-tool-call") && finishedHistory ? [...finishedHistory, toolResultMessage] : [
|
|
2784
2792
|
...Array.isArray(processedParams.messages) ? processedParams.messages : [],
|
|
2785
2793
|
...messages,
|
|
2786
2794
|
toolResultMessage
|
|
2787
2795
|
];
|
|
2788
|
-
const recursionRoute = route === "resume-stream" ? "stream" : route === "resume-stream-until-idle" ? "stream-until-idle" : route;
|
|
2796
|
+
const recursionRoute = route === "resume-stream" || route === "approve-tool-call" || route === "decline-tool-call" ? "stream" : route === "resume-stream-until-idle" ? "stream-until-idle" : route;
|
|
2789
2797
|
if (isAborted()) return;
|
|
2790
2798
|
try {
|
|
2791
2799
|
await this.processStreamResponse({
|
|
@@ -2986,7 +2994,8 @@ var Agent = class extends BaseResource {
|
|
|
2986
2994
|
const { requestContext, ...rest } = params;
|
|
2987
2995
|
const processedParams = {
|
|
2988
2996
|
...rest,
|
|
2989
|
-
requestContext: parseClientRequestContext(requestContext)
|
|
2997
|
+
requestContext: parseClientRequestContext(requestContext),
|
|
2998
|
+
clientTools: processClientTools(params.clientToolsResolver?.() ?? params.clientTools)
|
|
2990
2999
|
};
|
|
2991
3000
|
const { readable, controller: readableController, signal } = this.createCancellableStream(params.abortSignal);
|
|
2992
3001
|
const response = await this.processStreamResponse(processedParams, readableController, "approve-tool-call", signal);
|
|
@@ -3017,7 +3026,8 @@ var Agent = class extends BaseResource {
|
|
|
3017
3026
|
const { requestContext, ...rest } = params;
|
|
3018
3027
|
const processedParams = {
|
|
3019
3028
|
...rest,
|
|
3020
|
-
requestContext: parseClientRequestContext(requestContext)
|
|
3029
|
+
requestContext: parseClientRequestContext(requestContext),
|
|
3030
|
+
clientTools: processClientTools(params.clientToolsResolver?.() ?? params.clientTools)
|
|
3021
3031
|
};
|
|
3022
3032
|
const { readable, controller: readableController, signal } = this.createCancellableStream(params.abortSignal);
|
|
3023
3033
|
const response = await this.processStreamResponse(processedParams, readableController, "decline-tool-call", signal);
|
|
@@ -3174,28 +3184,70 @@ var Agent = class extends BaseResource {
|
|
|
3174
3184
|
* Used when `requireToolApproval` is enabled with generate() to allow the agent to proceed.
|
|
3175
3185
|
*/
|
|
3176
3186
|
async approveToolCallGenerate(params) {
|
|
3177
|
-
const { requestContext, ...rest } = params;
|
|
3178
|
-
|
|
3187
|
+
const { requestContext, clientTools, clientToolsResolver, memory, ...rest } = params;
|
|
3188
|
+
const response = await this.request(`/agents/${this.agentId}/approve-tool-call-generate`, {
|
|
3179
3189
|
method: "POST",
|
|
3180
3190
|
body: {
|
|
3181
3191
|
...rest,
|
|
3182
|
-
requestContext: parseClientRequestContext(requestContext)
|
|
3192
|
+
requestContext: parseClientRequestContext(requestContext),
|
|
3193
|
+
clientTools: processClientTools(clientToolsResolver?.() ?? clientTools)
|
|
3183
3194
|
}
|
|
3184
3195
|
});
|
|
3196
|
+
return this.continueResumedGenerate(response, {
|
|
3197
|
+
requestContext,
|
|
3198
|
+
clientTools,
|
|
3199
|
+
clientToolsResolver,
|
|
3200
|
+
memory
|
|
3201
|
+
});
|
|
3185
3202
|
}
|
|
3186
3203
|
/**
|
|
3187
3204
|
* Declines a pending tool call and returns the complete response (non-streaming).
|
|
3188
3205
|
* Used when `requireToolApproval` is enabled with generate() to prevent tool execution.
|
|
3189
3206
|
*/
|
|
3190
3207
|
async declineToolCallGenerate(params) {
|
|
3191
|
-
const { requestContext, ...rest } = params;
|
|
3192
|
-
|
|
3208
|
+
const { requestContext, clientTools, clientToolsResolver, memory, ...rest } = params;
|
|
3209
|
+
const response = await this.request(`/agents/${this.agentId}/decline-tool-call-generate`, {
|
|
3193
3210
|
method: "POST",
|
|
3194
3211
|
body: {
|
|
3195
3212
|
...rest,
|
|
3196
|
-
requestContext: parseClientRequestContext(requestContext)
|
|
3213
|
+
requestContext: parseClientRequestContext(requestContext),
|
|
3214
|
+
clientTools: processClientTools(clientToolsResolver?.() ?? clientTools)
|
|
3197
3215
|
}
|
|
3198
3216
|
});
|
|
3217
|
+
return this.continueResumedGenerate(response, {
|
|
3218
|
+
requestContext,
|
|
3219
|
+
clientTools,
|
|
3220
|
+
clientToolsResolver,
|
|
3221
|
+
memory
|
|
3222
|
+
});
|
|
3223
|
+
}
|
|
3224
|
+
/**
|
|
3225
|
+
* Runs executable client tools the model called after an approval decision and continues on
|
|
3226
|
+
* /generate, like generate() does. With memory the continuation sends only the new messages to the
|
|
3227
|
+
* thread. Without memory it re-sends the conversation up to the last user turn, because the resume
|
|
3228
|
+
* routes keep the earlier history server-side and drop it once the run finishes.
|
|
3229
|
+
*/
|
|
3230
|
+
async continueResumedGenerate(response, { requestContext, clientTools, clientToolsResolver, memory }) {
|
|
3231
|
+
if (response.finishReason !== "tool-calls") return response;
|
|
3232
|
+
const context = requestContext === void 0 || requestContext instanceof RequestContext$1 ? requestContext : new RequestContext$1(Object.entries(requestContext));
|
|
3233
|
+
const threadId = typeof memory?.thread === "string" ? memory.thread : memory?.thread?.id;
|
|
3234
|
+
const history = response.messages ?? [];
|
|
3235
|
+
const priorTurns = history.slice(0, history.findLastIndex((message) => message.role === "user") + 1);
|
|
3236
|
+
return executeToolCallAndRespond({
|
|
3237
|
+
response,
|
|
3238
|
+
params: {
|
|
3239
|
+
messages: threadId ? [] : priorTurns,
|
|
3240
|
+
clientTools: clientToolsResolver?.() ?? clientTools,
|
|
3241
|
+
clientToolsResolver,
|
|
3242
|
+
requestContext: context,
|
|
3243
|
+
memory
|
|
3244
|
+
},
|
|
3245
|
+
agentId: this.agentId,
|
|
3246
|
+
resourceId: memory?.resource,
|
|
3247
|
+
threadId,
|
|
3248
|
+
requestContext: context,
|
|
3249
|
+
respondFn: (messages, options) => this.generate(messages, options)
|
|
3250
|
+
});
|
|
3199
3251
|
}
|
|
3200
3252
|
/**
|
|
3201
3253
|
* Processes the stream response and handles tool calls
|