ai 7.0.77 → 7.0.78

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/CHANGELOG.md CHANGED
@@ -1,5 +1,13 @@
1
1
  # ai
2
2
 
3
+ ## 7.0.78
4
+
5
+ ### Patch Changes
6
+
7
+ - 96970bb: Continue approved `generateText`, `streamText`, and `WorkflowAgent` turns with a model-visible tool error when revalidated tool input is invalid.
8
+ - Updated dependencies [e12e068]
9
+ - @ai-sdk/gateway@4.0.63
10
+
3
11
  ## 7.0.77
4
12
 
5
13
  ### Patch Changes
package/dist/index.js CHANGED
@@ -1143,7 +1143,7 @@ import {
1143
1143
  } from "@ai-sdk/provider-utils";
1144
1144
 
1145
1145
  // src/version.ts
1146
- var VERSION = true ? "7.0.77" : "0.0.0-test";
1146
+ var VERSION = true ? "7.0.78" : "0.0.0-test";
1147
1147
 
1148
1148
  // src/util/download/download.ts
1149
1149
  var download = async ({
@@ -5163,6 +5163,7 @@ async function validateApprovedToolApprovals({
5163
5163
  var _a23;
5164
5164
  const approved = [];
5165
5165
  const denied = [];
5166
+ const invalid = [];
5166
5167
  for (const approval of approvedToolApprovals) {
5167
5168
  const { toolCall, approvalRequest } = approval;
5168
5169
  const tool2 = getOwn(tools, toolCall.toolName);
@@ -5196,11 +5197,15 @@ async function validateApprovedToolApprovals({
5196
5197
  schema: asSchema4(tool2.inputSchema)
5197
5198
  });
5198
5199
  if (!validation.success) {
5199
- throw new InvalidToolInputError({
5200
- toolName: toolCall.toolName,
5201
- toolInput: JSON.stringify(toolCall.input),
5202
- cause: validation.error
5200
+ invalid.push({
5201
+ ...approval,
5202
+ error: new InvalidToolInputError({
5203
+ toolName: toolCall.toolName,
5204
+ toolInput: JSON.stringify(toolCall.input),
5205
+ cause: validation.error
5206
+ })
5203
5207
  });
5208
+ continue;
5204
5209
  }
5205
5210
  }
5206
5211
  const approvalStatus = await resolveToolApproval({
@@ -5224,7 +5229,11 @@ async function validateApprovedToolApprovals({
5224
5229
  approved.push(approval);
5225
5230
  }
5226
5231
  }
5227
- return { approvedToolApprovals: approved, deniedToolApprovals: denied };
5232
+ return {
5233
+ approvedToolApprovals: approved,
5234
+ deniedToolApprovals: denied,
5235
+ invalidToolApprovals: invalid
5236
+ };
5228
5237
  }
5229
5238
 
5230
5239
  // src/generate-text/generate-text.ts
@@ -5407,7 +5416,8 @@ async function generateText({
5407
5416
  } = collectToolApprovals({ messages: initialMessages });
5408
5417
  const {
5409
5418
  approvedToolApprovals: localApprovedToolApprovals,
5410
- deniedToolApprovals: revalidationDeniedToolApprovals
5419
+ deniedToolApprovals: revalidationDeniedToolApprovals,
5420
+ invalidToolApprovals
5411
5421
  } = await validateApprovedToolApprovals({
5412
5422
  approvedToolApprovals: approvedToolApprovals.filter(
5413
5423
  (toolApproval2) => !toolApproval2.toolCall.providerExecuted
@@ -5426,7 +5436,7 @@ async function generateText({
5426
5436
  const deniedToolApprovalsWithoutResults = deniedToolApprovals.filter(
5427
5437
  (toolApproval2) => toolApproval2.existingToolResult == null
5428
5438
  );
5429
- if (deniedToolApprovalsWithoutResults.length > 0 || localApprovedToolApprovals.length > 0) {
5439
+ if (deniedToolApprovalsWithoutResults.length > 0 || localApprovedToolApprovals.length > 0 || invalidToolApprovals.length > 0) {
5430
5440
  const toolResults2 = await executeTools({
5431
5441
  toolCalls: localApprovedToolApprovals.map(
5432
5442
  (toolApproval2) => toolApproval2.toolCall
@@ -5472,6 +5482,20 @@ async function generateText({
5472
5482
  output: modelOutput
5473
5483
  });
5474
5484
  }
5485
+ for (const toolApproval2 of invalidToolApprovals) {
5486
+ toolContent.push({
5487
+ type: "tool-result",
5488
+ toolCallId: toolApproval2.toolCall.toolCallId,
5489
+ toolName: toolApproval2.toolCall.toolName,
5490
+ output: await createToolModelOutput({
5491
+ toolCallId: toolApproval2.toolCall.toolCallId,
5492
+ input: toolApproval2.toolCall.input,
5493
+ tool: getOwn(tools, toolApproval2.toolCall.toolName),
5494
+ output: toolApproval2.error,
5495
+ errorMode: "text"
5496
+ })
5497
+ });
5498
+ }
5475
5499
  for (const toolApproval2 of deniedToolApprovalsWithoutResults) {
5476
5500
  toolContent.push({
5477
5501
  type: "tool-result",
@@ -9533,7 +9557,8 @@ var DefaultStreamTextResult = class {
9533
9557
  if (deniedToolApprovals.length > 0 || approvedToolApprovals.length > 0) {
9534
9558
  const {
9535
9559
  approvedToolApprovals: localApprovedToolApprovals,
9536
- deniedToolApprovals: revalidationDeniedToolApprovals
9560
+ deniedToolApprovals: revalidationDeniedToolApprovals,
9561
+ invalidToolApprovals
9537
9562
  } = await validateApprovedToolApprovals({
9538
9563
  approvedToolApprovals: approvedToolApprovals.filter(
9539
9564
  (toolApproval2) => !toolApproval2.toolCall.providerExecuted
@@ -9575,6 +9600,18 @@ var DefaultStreamTextResult = class {
9575
9600
  toolName: toolApproval2.toolCall.toolName
9576
9601
  });
9577
9602
  }
9603
+ for (const toolApproval2 of invalidToolApprovals) {
9604
+ toolExecutionStepStreamController == null ? void 0 : toolExecutionStepStreamController.enqueue({
9605
+ type: "tool-error",
9606
+ toolCallId: toolApproval2.toolCall.toolCallId,
9607
+ toolName: toolApproval2.toolCall.toolName,
9608
+ input: toolApproval2.toolCall.input,
9609
+ error: getErrorMessage6(toolApproval2.error),
9610
+ title: toolApproval2.toolCall.title,
9611
+ ...toolApproval2.toolCall.dynamic === true ? { dynamic: true } : {},
9612
+ ...toolApproval2.toolCall.toolMetadata != null ? { toolMetadata: toolApproval2.toolCall.toolMetadata } : {}
9613
+ });
9614
+ }
9578
9615
  const toolOutputs = [];
9579
9616
  await Promise.all(
9580
9617
  localApprovedToolApprovals.map(async (toolApproval2) => {
@@ -9607,7 +9644,7 @@ var DefaultStreamTextResult = class {
9607
9644
  }
9608
9645
  })
9609
9646
  );
9610
- if (toolOutputs.length > 0 || localDeniedToolApprovalsWithoutResults.length > 0) {
9647
+ if (toolOutputs.length > 0 || localDeniedToolApprovalsWithoutResults.length > 0 || invalidToolApprovals.length > 0) {
9611
9648
  const localToolContent = [];
9612
9649
  for (const output2 of toolOutputs) {
9613
9650
  localToolContent.push({
@@ -9623,6 +9660,20 @@ var DefaultStreamTextResult = class {
9623
9660
  })
9624
9661
  });
9625
9662
  }
9663
+ for (const toolApproval2 of invalidToolApprovals) {
9664
+ localToolContent.push({
9665
+ type: "tool-result",
9666
+ toolCallId: toolApproval2.toolCall.toolCallId,
9667
+ toolName: toolApproval2.toolCall.toolName,
9668
+ output: await createToolModelOutput({
9669
+ toolCallId: toolApproval2.toolCall.toolCallId,
9670
+ input: toolApproval2.toolCall.input,
9671
+ tool: getOwn(tools, toolApproval2.toolCall.toolName),
9672
+ output: toolApproval2.error,
9673
+ errorMode: "text"
9674
+ })
9675
+ });
9676
+ }
9626
9677
  for (const toolApproval2 of localDeniedToolApprovalsWithoutResults) {
9627
9678
  localToolContent.push({
9628
9679
  type: "tool-result",