@mastra/client-js 1.56.0-alpha.1 → 1.56.0-alpha.2
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/index.cjs +583 -7
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +577 -1
- package/dist/index.js.map +1 -1
- package/dist/resources/agent.d.ts +2 -2
- package/dist/resources/agent.d.ts.map +1 -1
- package/dist/route-types.generated.d.ts +33 -0
- package/dist/route-types.generated.d.ts.map +1 -1
- package/dist/types.d.ts +2 -2
- package/dist/types.d.ts.map +1 -1
- package/dist/utils/ai-sdk-v4/data-stream-parts.d.ts +89 -0
- package/dist/utils/ai-sdk-v4/data-stream-parts.d.ts.map +1 -0
- package/dist/utils/ai-sdk-v4/fix-json.d.ts +2 -0
- package/dist/utils/ai-sdk-v4/fix-json.d.ts.map +1 -0
- package/dist/utils/ai-sdk-v4/index.d.ts +5 -0
- package/dist/utils/ai-sdk-v4/index.d.ts.map +1 -0
- package/dist/utils/ai-sdk-v4/parse-partial-json.d.ts +6 -0
- package/dist/utils/ai-sdk-v4/parse-partial-json.d.ts.map +1 -0
- package/dist/utils/ai-sdk-v4/process-data-stream.d.ts +53 -0
- package/dist/utils/ai-sdk-v4/process-data-stream.d.ts.map +1 -0
- package/dist/utils/ai-sdk-v4/types.d.ts +93 -0
- package/dist/utils/ai-sdk-v4/types.d.ts.map +1 -0
- package/package.json +4 -5
- package/dist/_types/@ai-sdk_provider/dist/index.d.ts +0 -1587
- package/dist/_types/@ai-sdk_provider/package.json +0 -1
- package/dist/_types/@ai-sdk_provider-utils/dist/index.d.ts +0 -379
- package/dist/_types/@ai-sdk_provider-utils/package.json +0 -1
- package/dist/_types/@ai-sdk_ui-utils/dist/index.d.ts +0 -820
- package/dist/_types/@ai-sdk_ui-utils/package.json +0 -1
package/dist/docs/SKILL.md
CHANGED
|
@@ -3,7 +3,7 @@ name: mastra-client-js
|
|
|
3
3
|
description: Documentation for @mastra/client-js. Use when working with @mastra/client-js APIs, configuration, or implementation.
|
|
4
4
|
metadata:
|
|
5
5
|
package: "@mastra/client-js"
|
|
6
|
-
version: "1.56.0-alpha.
|
|
6
|
+
version: "1.56.0-alpha.2"
|
|
7
7
|
---
|
|
8
8
|
|
|
9
9
|
## When to use
|
package/dist/index.cjs
CHANGED
|
@@ -21,7 +21,6 @@ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__ge
|
|
|
21
21
|
enumerable: true
|
|
22
22
|
}) : target, mod));
|
|
23
23
|
//#endregion
|
|
24
|
-
let _ai_sdk_ui_utils = require("@ai-sdk/ui-utils");
|
|
25
24
|
let _lukeed_uuid = require("@lukeed/uuid");
|
|
26
25
|
let _mastra_core_error = require("@mastra/core/error");
|
|
27
26
|
let _mastra_schema_compat_schema = require("@mastra/schema-compat/schema");
|
|
@@ -410,6 +409,583 @@ function isTerminalReconnectError(error) {
|
|
|
410
409
|
return isTerminalHttpError(error) && status !== 408 && status !== 429;
|
|
411
410
|
}
|
|
412
411
|
//#endregion
|
|
412
|
+
//#region src/utils/ai-sdk-v4/data-stream-parts.ts
|
|
413
|
+
const dataStreamParts = [
|
|
414
|
+
{
|
|
415
|
+
code: "0",
|
|
416
|
+
name: "text",
|
|
417
|
+
parse: (value) => {
|
|
418
|
+
if (typeof value !== "string") throw new Error("\"text\" parts expect a string value.");
|
|
419
|
+
return {
|
|
420
|
+
type: "text",
|
|
421
|
+
value
|
|
422
|
+
};
|
|
423
|
+
}
|
|
424
|
+
},
|
|
425
|
+
{
|
|
426
|
+
code: "2",
|
|
427
|
+
name: "data",
|
|
428
|
+
parse: (value) => {
|
|
429
|
+
if (!Array.isArray(value)) throw new Error("\"data\" parts expect an array value.");
|
|
430
|
+
return {
|
|
431
|
+
type: "data",
|
|
432
|
+
value
|
|
433
|
+
};
|
|
434
|
+
}
|
|
435
|
+
},
|
|
436
|
+
{
|
|
437
|
+
code: "3",
|
|
438
|
+
name: "error",
|
|
439
|
+
parse: (value) => {
|
|
440
|
+
if (typeof value !== "string") throw new Error("\"error\" parts expect a string value.");
|
|
441
|
+
return {
|
|
442
|
+
type: "error",
|
|
443
|
+
value
|
|
444
|
+
};
|
|
445
|
+
}
|
|
446
|
+
},
|
|
447
|
+
{
|
|
448
|
+
code: "8",
|
|
449
|
+
name: "message_annotations",
|
|
450
|
+
parse: (value) => {
|
|
451
|
+
if (!Array.isArray(value)) throw new Error("\"message_annotations\" parts expect an array value.");
|
|
452
|
+
return {
|
|
453
|
+
type: "message_annotations",
|
|
454
|
+
value
|
|
455
|
+
};
|
|
456
|
+
}
|
|
457
|
+
},
|
|
458
|
+
{
|
|
459
|
+
code: "9",
|
|
460
|
+
name: "tool_call",
|
|
461
|
+
parse: (value) => {
|
|
462
|
+
if (value == null || typeof value !== "object" || !("toolCallId" in value) || typeof value.toolCallId !== "string" || !("toolName" in value) || typeof value.toolName !== "string" || !("args" in value) || typeof value.args !== "object") throw new Error("\"tool_call\" parts expect an object with a \"toolCallId\", \"toolName\", and \"args\" property.");
|
|
463
|
+
return {
|
|
464
|
+
type: "tool_call",
|
|
465
|
+
value
|
|
466
|
+
};
|
|
467
|
+
}
|
|
468
|
+
},
|
|
469
|
+
{
|
|
470
|
+
code: "a",
|
|
471
|
+
name: "tool_result",
|
|
472
|
+
parse: (value) => {
|
|
473
|
+
if (value == null || typeof value !== "object" || !("toolCallId" in value) || typeof value.toolCallId !== "string" || !("result" in value)) throw new Error("\"tool_result\" parts expect an object with a \"toolCallId\" and a \"result\" property.");
|
|
474
|
+
return {
|
|
475
|
+
type: "tool_result",
|
|
476
|
+
value
|
|
477
|
+
};
|
|
478
|
+
}
|
|
479
|
+
},
|
|
480
|
+
{
|
|
481
|
+
code: "b",
|
|
482
|
+
name: "tool_call_streaming_start",
|
|
483
|
+
parse: (value) => {
|
|
484
|
+
if (value == null || typeof value !== "object" || !("toolCallId" in value) || typeof value.toolCallId !== "string" || !("toolName" in value) || typeof value.toolName !== "string") throw new Error("\"tool_call_streaming_start\" parts expect an object with a \"toolCallId\" and \"toolName\" property.");
|
|
485
|
+
return {
|
|
486
|
+
type: "tool_call_streaming_start",
|
|
487
|
+
value
|
|
488
|
+
};
|
|
489
|
+
}
|
|
490
|
+
},
|
|
491
|
+
{
|
|
492
|
+
code: "c",
|
|
493
|
+
name: "tool_call_delta",
|
|
494
|
+
parse: (value) => {
|
|
495
|
+
if (value == null || typeof value !== "object" || !("toolCallId" in value) || typeof value.toolCallId !== "string" || !("argsTextDelta" in value) || typeof value.argsTextDelta !== "string") throw new Error("\"tool_call_delta\" parts expect an object with a \"toolCallId\" and \"argsTextDelta\" property.");
|
|
496
|
+
return {
|
|
497
|
+
type: "tool_call_delta",
|
|
498
|
+
value
|
|
499
|
+
};
|
|
500
|
+
}
|
|
501
|
+
},
|
|
502
|
+
{
|
|
503
|
+
code: "d",
|
|
504
|
+
name: "finish_message",
|
|
505
|
+
parse: (value) => {
|
|
506
|
+
if (value == null || typeof value !== "object" || !("finishReason" in value) || typeof value.finishReason !== "string") throw new Error("\"finish_message\" parts expect an object with a \"finishReason\" property.");
|
|
507
|
+
const result = { finishReason: value.finishReason };
|
|
508
|
+
if ("usage" in value && value.usage != null && typeof value.usage === "object" && "promptTokens" in value.usage && "completionTokens" in value.usage) result.usage = {
|
|
509
|
+
promptTokens: typeof value.usage.promptTokens === "number" ? value.usage.promptTokens : NaN,
|
|
510
|
+
completionTokens: typeof value.usage.completionTokens === "number" ? value.usage.completionTokens : NaN
|
|
511
|
+
};
|
|
512
|
+
return {
|
|
513
|
+
type: "finish_message",
|
|
514
|
+
value: result
|
|
515
|
+
};
|
|
516
|
+
}
|
|
517
|
+
},
|
|
518
|
+
{
|
|
519
|
+
code: "e",
|
|
520
|
+
name: "finish_step",
|
|
521
|
+
parse: (value) => {
|
|
522
|
+
if (value == null || typeof value !== "object" || !("finishReason" in value) || typeof value.finishReason !== "string") throw new Error("\"finish_step\" parts expect an object with a \"finishReason\" property.");
|
|
523
|
+
const result = {
|
|
524
|
+
finishReason: value.finishReason,
|
|
525
|
+
isContinued: false
|
|
526
|
+
};
|
|
527
|
+
if ("usage" in value && value.usage != null && typeof value.usage === "object" && "promptTokens" in value.usage && "completionTokens" in value.usage) result.usage = {
|
|
528
|
+
promptTokens: typeof value.usage.promptTokens === "number" ? value.usage.promptTokens : NaN,
|
|
529
|
+
completionTokens: typeof value.usage.completionTokens === "number" ? value.usage.completionTokens : NaN
|
|
530
|
+
};
|
|
531
|
+
if ("isContinued" in value && typeof value.isContinued === "boolean") result.isContinued = value.isContinued;
|
|
532
|
+
return {
|
|
533
|
+
type: "finish_step",
|
|
534
|
+
value: result
|
|
535
|
+
};
|
|
536
|
+
}
|
|
537
|
+
},
|
|
538
|
+
{
|
|
539
|
+
code: "f",
|
|
540
|
+
name: "start_step",
|
|
541
|
+
parse: (value) => {
|
|
542
|
+
if (value == null || typeof value !== "object" || !("messageId" in value) || typeof value.messageId !== "string") throw new Error("\"start_step\" parts expect an object with an \"id\" property.");
|
|
543
|
+
return {
|
|
544
|
+
type: "start_step",
|
|
545
|
+
value: { messageId: value.messageId }
|
|
546
|
+
};
|
|
547
|
+
}
|
|
548
|
+
},
|
|
549
|
+
{
|
|
550
|
+
code: "g",
|
|
551
|
+
name: "reasoning",
|
|
552
|
+
parse: (value) => {
|
|
553
|
+
if (typeof value !== "string") throw new Error("\"reasoning\" parts expect a string value.");
|
|
554
|
+
return {
|
|
555
|
+
type: "reasoning",
|
|
556
|
+
value
|
|
557
|
+
};
|
|
558
|
+
}
|
|
559
|
+
},
|
|
560
|
+
{
|
|
561
|
+
code: "h",
|
|
562
|
+
name: "source",
|
|
563
|
+
parse: (value) => {
|
|
564
|
+
if (value == null || typeof value !== "object") throw new Error("\"source\" parts expect a Source object.");
|
|
565
|
+
return {
|
|
566
|
+
type: "source",
|
|
567
|
+
value
|
|
568
|
+
};
|
|
569
|
+
}
|
|
570
|
+
},
|
|
571
|
+
{
|
|
572
|
+
code: "i",
|
|
573
|
+
name: "redacted_reasoning",
|
|
574
|
+
parse: (value) => {
|
|
575
|
+
if (value == null || typeof value !== "object" || !("data" in value) || typeof value.data !== "string") throw new Error("\"redacted_reasoning\" parts expect an object with a \"data\" property.");
|
|
576
|
+
return {
|
|
577
|
+
type: "redacted_reasoning",
|
|
578
|
+
value: { data: value.data }
|
|
579
|
+
};
|
|
580
|
+
}
|
|
581
|
+
},
|
|
582
|
+
{
|
|
583
|
+
code: "j",
|
|
584
|
+
name: "reasoning_signature",
|
|
585
|
+
parse: (value) => {
|
|
586
|
+
if (value == null || typeof value !== "object" || !("signature" in value) || typeof value.signature !== "string") throw new Error("\"reasoning_signature\" parts expect an object with a \"signature\" property.");
|
|
587
|
+
return {
|
|
588
|
+
type: "reasoning_signature",
|
|
589
|
+
value: { signature: value.signature }
|
|
590
|
+
};
|
|
591
|
+
}
|
|
592
|
+
},
|
|
593
|
+
{
|
|
594
|
+
code: "k",
|
|
595
|
+
name: "file",
|
|
596
|
+
parse: (value) => {
|
|
597
|
+
if (value == null || typeof value !== "object" || !("data" in value) || typeof value.data !== "string" || !("mimeType" in value) || typeof value.mimeType !== "string") throw new Error("\"file\" parts expect an object with a \"data\" and \"mimeType\" property.");
|
|
598
|
+
return {
|
|
599
|
+
type: "file",
|
|
600
|
+
value
|
|
601
|
+
};
|
|
602
|
+
}
|
|
603
|
+
}
|
|
604
|
+
];
|
|
605
|
+
const dataStreamPartsByCode = Object.fromEntries(dataStreamParts.map((part) => [part.code, part]));
|
|
606
|
+
Object.fromEntries(dataStreamParts.map((part) => [part.name, part.code]));
|
|
607
|
+
const validCodes = dataStreamParts.map((part) => part.code);
|
|
608
|
+
/**
|
|
609
|
+
Parses a stream part from a string.
|
|
610
|
+
|
|
611
|
+
@param line The string to parse.
|
|
612
|
+
@returns The parsed stream part.
|
|
613
|
+
@throws An error if the string cannot be parsed.
|
|
614
|
+
*/
|
|
615
|
+
const parseDataStreamPart = (line) => {
|
|
616
|
+
const firstSeparatorIndex = line.indexOf(":");
|
|
617
|
+
if (firstSeparatorIndex === -1) throw new Error("Failed to parse stream string. No separator found.");
|
|
618
|
+
const prefix = line.slice(0, firstSeparatorIndex);
|
|
619
|
+
if (!validCodes.includes(prefix)) throw new Error(`Failed to parse stream string. Invalid code ${prefix}.`);
|
|
620
|
+
const code = prefix;
|
|
621
|
+
const textValue = line.slice(firstSeparatorIndex + 1);
|
|
622
|
+
const jsonValue = JSON.parse(textValue);
|
|
623
|
+
return dataStreamPartsByCode[code].parse(jsonValue);
|
|
624
|
+
};
|
|
625
|
+
//#endregion
|
|
626
|
+
//#region src/utils/ai-sdk-v4/fix-json.ts
|
|
627
|
+
function fixJson(input) {
|
|
628
|
+
const stack = ["ROOT"];
|
|
629
|
+
let lastValidIndex = -1;
|
|
630
|
+
let literalStart = null;
|
|
631
|
+
function processValueStart(char, i, swapState) {
|
|
632
|
+
switch (char) {
|
|
633
|
+
case "\"":
|
|
634
|
+
lastValidIndex = i;
|
|
635
|
+
stack.pop();
|
|
636
|
+
stack.push(swapState);
|
|
637
|
+
stack.push("INSIDE_STRING");
|
|
638
|
+
break;
|
|
639
|
+
case "f":
|
|
640
|
+
case "t":
|
|
641
|
+
case "n":
|
|
642
|
+
lastValidIndex = i;
|
|
643
|
+
literalStart = i;
|
|
644
|
+
stack.pop();
|
|
645
|
+
stack.push(swapState);
|
|
646
|
+
stack.push("INSIDE_LITERAL");
|
|
647
|
+
break;
|
|
648
|
+
case "-":
|
|
649
|
+
stack.pop();
|
|
650
|
+
stack.push(swapState);
|
|
651
|
+
stack.push("INSIDE_NUMBER");
|
|
652
|
+
break;
|
|
653
|
+
case "0":
|
|
654
|
+
case "1":
|
|
655
|
+
case "2":
|
|
656
|
+
case "3":
|
|
657
|
+
case "4":
|
|
658
|
+
case "5":
|
|
659
|
+
case "6":
|
|
660
|
+
case "7":
|
|
661
|
+
case "8":
|
|
662
|
+
case "9":
|
|
663
|
+
lastValidIndex = i;
|
|
664
|
+
stack.pop();
|
|
665
|
+
stack.push(swapState);
|
|
666
|
+
stack.push("INSIDE_NUMBER");
|
|
667
|
+
break;
|
|
668
|
+
case "{":
|
|
669
|
+
lastValidIndex = i;
|
|
670
|
+
stack.pop();
|
|
671
|
+
stack.push(swapState);
|
|
672
|
+
stack.push("INSIDE_OBJECT_START");
|
|
673
|
+
break;
|
|
674
|
+
case "[":
|
|
675
|
+
lastValidIndex = i;
|
|
676
|
+
stack.pop();
|
|
677
|
+
stack.push(swapState);
|
|
678
|
+
stack.push("INSIDE_ARRAY_START");
|
|
679
|
+
break;
|
|
680
|
+
}
|
|
681
|
+
}
|
|
682
|
+
function processAfterObjectValue(char, i) {
|
|
683
|
+
switch (char) {
|
|
684
|
+
case ",":
|
|
685
|
+
stack.pop();
|
|
686
|
+
stack.push("INSIDE_OBJECT_AFTER_COMMA");
|
|
687
|
+
break;
|
|
688
|
+
case "}":
|
|
689
|
+
lastValidIndex = i;
|
|
690
|
+
stack.pop();
|
|
691
|
+
break;
|
|
692
|
+
}
|
|
693
|
+
}
|
|
694
|
+
function processAfterArrayValue(char, i) {
|
|
695
|
+
switch (char) {
|
|
696
|
+
case ",":
|
|
697
|
+
stack.pop();
|
|
698
|
+
stack.push("INSIDE_ARRAY_AFTER_COMMA");
|
|
699
|
+
break;
|
|
700
|
+
case "]":
|
|
701
|
+
lastValidIndex = i;
|
|
702
|
+
stack.pop();
|
|
703
|
+
break;
|
|
704
|
+
}
|
|
705
|
+
}
|
|
706
|
+
for (let i = 0; i < input.length; i++) {
|
|
707
|
+
const char = input[i];
|
|
708
|
+
switch (stack[stack.length - 1]) {
|
|
709
|
+
case "ROOT":
|
|
710
|
+
processValueStart(char, i, "FINISH");
|
|
711
|
+
break;
|
|
712
|
+
case "INSIDE_OBJECT_START":
|
|
713
|
+
switch (char) {
|
|
714
|
+
case "\"":
|
|
715
|
+
stack.pop();
|
|
716
|
+
stack.push("INSIDE_OBJECT_KEY");
|
|
717
|
+
break;
|
|
718
|
+
case "}":
|
|
719
|
+
lastValidIndex = i;
|
|
720
|
+
stack.pop();
|
|
721
|
+
break;
|
|
722
|
+
}
|
|
723
|
+
break;
|
|
724
|
+
case "INSIDE_OBJECT_AFTER_COMMA":
|
|
725
|
+
switch (char) {
|
|
726
|
+
case "\"":
|
|
727
|
+
stack.pop();
|
|
728
|
+
stack.push("INSIDE_OBJECT_KEY");
|
|
729
|
+
break;
|
|
730
|
+
}
|
|
731
|
+
break;
|
|
732
|
+
case "INSIDE_OBJECT_KEY":
|
|
733
|
+
switch (char) {
|
|
734
|
+
case "\"":
|
|
735
|
+
stack.pop();
|
|
736
|
+
stack.push("INSIDE_OBJECT_AFTER_KEY");
|
|
737
|
+
break;
|
|
738
|
+
}
|
|
739
|
+
break;
|
|
740
|
+
case "INSIDE_OBJECT_AFTER_KEY":
|
|
741
|
+
switch (char) {
|
|
742
|
+
case ":":
|
|
743
|
+
stack.pop();
|
|
744
|
+
stack.push("INSIDE_OBJECT_BEFORE_VALUE");
|
|
745
|
+
break;
|
|
746
|
+
}
|
|
747
|
+
break;
|
|
748
|
+
case "INSIDE_OBJECT_BEFORE_VALUE":
|
|
749
|
+
processValueStart(char, i, "INSIDE_OBJECT_AFTER_VALUE");
|
|
750
|
+
break;
|
|
751
|
+
case "INSIDE_OBJECT_AFTER_VALUE":
|
|
752
|
+
processAfterObjectValue(char, i);
|
|
753
|
+
break;
|
|
754
|
+
case "INSIDE_STRING":
|
|
755
|
+
switch (char) {
|
|
756
|
+
case "\"":
|
|
757
|
+
stack.pop();
|
|
758
|
+
lastValidIndex = i;
|
|
759
|
+
break;
|
|
760
|
+
case "\\":
|
|
761
|
+
stack.push("INSIDE_STRING_ESCAPE");
|
|
762
|
+
break;
|
|
763
|
+
default: lastValidIndex = i;
|
|
764
|
+
}
|
|
765
|
+
break;
|
|
766
|
+
case "INSIDE_ARRAY_START":
|
|
767
|
+
switch (char) {
|
|
768
|
+
case "]":
|
|
769
|
+
lastValidIndex = i;
|
|
770
|
+
stack.pop();
|
|
771
|
+
break;
|
|
772
|
+
default:
|
|
773
|
+
lastValidIndex = i;
|
|
774
|
+
processValueStart(char, i, "INSIDE_ARRAY_AFTER_VALUE");
|
|
775
|
+
break;
|
|
776
|
+
}
|
|
777
|
+
break;
|
|
778
|
+
case "INSIDE_ARRAY_AFTER_VALUE":
|
|
779
|
+
switch (char) {
|
|
780
|
+
case ",":
|
|
781
|
+
stack.pop();
|
|
782
|
+
stack.push("INSIDE_ARRAY_AFTER_COMMA");
|
|
783
|
+
break;
|
|
784
|
+
case "]":
|
|
785
|
+
lastValidIndex = i;
|
|
786
|
+
stack.pop();
|
|
787
|
+
break;
|
|
788
|
+
default:
|
|
789
|
+
lastValidIndex = i;
|
|
790
|
+
break;
|
|
791
|
+
}
|
|
792
|
+
break;
|
|
793
|
+
case "INSIDE_ARRAY_AFTER_COMMA":
|
|
794
|
+
processValueStart(char, i, "INSIDE_ARRAY_AFTER_VALUE");
|
|
795
|
+
break;
|
|
796
|
+
case "INSIDE_STRING_ESCAPE":
|
|
797
|
+
stack.pop();
|
|
798
|
+
lastValidIndex = i;
|
|
799
|
+
break;
|
|
800
|
+
case "INSIDE_NUMBER":
|
|
801
|
+
switch (char) {
|
|
802
|
+
case "0":
|
|
803
|
+
case "1":
|
|
804
|
+
case "2":
|
|
805
|
+
case "3":
|
|
806
|
+
case "4":
|
|
807
|
+
case "5":
|
|
808
|
+
case "6":
|
|
809
|
+
case "7":
|
|
810
|
+
case "8":
|
|
811
|
+
case "9":
|
|
812
|
+
lastValidIndex = i;
|
|
813
|
+
break;
|
|
814
|
+
case "e":
|
|
815
|
+
case "E":
|
|
816
|
+
case "-":
|
|
817
|
+
case ".": break;
|
|
818
|
+
case ",":
|
|
819
|
+
stack.pop();
|
|
820
|
+
if (stack[stack.length - 1] === "INSIDE_ARRAY_AFTER_VALUE") processAfterArrayValue(char, i);
|
|
821
|
+
if (stack[stack.length - 1] === "INSIDE_OBJECT_AFTER_VALUE") processAfterObjectValue(char, i);
|
|
822
|
+
break;
|
|
823
|
+
case "}":
|
|
824
|
+
stack.pop();
|
|
825
|
+
if (stack[stack.length - 1] === "INSIDE_OBJECT_AFTER_VALUE") processAfterObjectValue(char, i);
|
|
826
|
+
break;
|
|
827
|
+
case "]":
|
|
828
|
+
stack.pop();
|
|
829
|
+
if (stack[stack.length - 1] === "INSIDE_ARRAY_AFTER_VALUE") processAfterArrayValue(char, i);
|
|
830
|
+
break;
|
|
831
|
+
default:
|
|
832
|
+
stack.pop();
|
|
833
|
+
break;
|
|
834
|
+
}
|
|
835
|
+
break;
|
|
836
|
+
case "INSIDE_LITERAL": {
|
|
837
|
+
const partialLiteral = input.substring(literalStart, i + 1);
|
|
838
|
+
if (!"false".startsWith(partialLiteral) && !"true".startsWith(partialLiteral) && !"null".startsWith(partialLiteral)) {
|
|
839
|
+
stack.pop();
|
|
840
|
+
if (stack[stack.length - 1] === "INSIDE_OBJECT_AFTER_VALUE") processAfterObjectValue(char, i);
|
|
841
|
+
else if (stack[stack.length - 1] === "INSIDE_ARRAY_AFTER_VALUE") processAfterArrayValue(char, i);
|
|
842
|
+
} else lastValidIndex = i;
|
|
843
|
+
break;
|
|
844
|
+
}
|
|
845
|
+
}
|
|
846
|
+
}
|
|
847
|
+
let result = input.slice(0, lastValidIndex + 1);
|
|
848
|
+
for (let i = stack.length - 1; i >= 0; i--) switch (stack[i]) {
|
|
849
|
+
case "INSIDE_STRING":
|
|
850
|
+
result += "\"";
|
|
851
|
+
break;
|
|
852
|
+
case "INSIDE_OBJECT_KEY":
|
|
853
|
+
case "INSIDE_OBJECT_AFTER_KEY":
|
|
854
|
+
case "INSIDE_OBJECT_AFTER_COMMA":
|
|
855
|
+
case "INSIDE_OBJECT_START":
|
|
856
|
+
case "INSIDE_OBJECT_BEFORE_VALUE":
|
|
857
|
+
case "INSIDE_OBJECT_AFTER_VALUE":
|
|
858
|
+
result += "}";
|
|
859
|
+
break;
|
|
860
|
+
case "INSIDE_ARRAY_START":
|
|
861
|
+
case "INSIDE_ARRAY_AFTER_COMMA":
|
|
862
|
+
case "INSIDE_ARRAY_AFTER_VALUE":
|
|
863
|
+
result += "]";
|
|
864
|
+
break;
|
|
865
|
+
case "INSIDE_LITERAL": {
|
|
866
|
+
const partialLiteral = input.substring(literalStart, input.length);
|
|
867
|
+
if ("true".startsWith(partialLiteral)) result += "true".slice(partialLiteral.length);
|
|
868
|
+
else if ("false".startsWith(partialLiteral)) result += "false".slice(partialLiteral.length);
|
|
869
|
+
else if ("null".startsWith(partialLiteral)) result += "null".slice(partialLiteral.length);
|
|
870
|
+
}
|
|
871
|
+
}
|
|
872
|
+
return result;
|
|
873
|
+
}
|
|
874
|
+
//#endregion
|
|
875
|
+
//#region src/utils/ai-sdk-v4/parse-partial-json.ts
|
|
876
|
+
function tryParse(text) {
|
|
877
|
+
try {
|
|
878
|
+
return {
|
|
879
|
+
success: true,
|
|
880
|
+
value: JSON.parse(text)
|
|
881
|
+
};
|
|
882
|
+
} catch {
|
|
883
|
+
return { success: false };
|
|
884
|
+
}
|
|
885
|
+
}
|
|
886
|
+
function parsePartialJson(jsonText) {
|
|
887
|
+
if (jsonText === void 0) return {
|
|
888
|
+
value: void 0,
|
|
889
|
+
state: "undefined-input"
|
|
890
|
+
};
|
|
891
|
+
let result = tryParse(jsonText);
|
|
892
|
+
if (result.success) return {
|
|
893
|
+
value: result.value,
|
|
894
|
+
state: "successful-parse"
|
|
895
|
+
};
|
|
896
|
+
result = tryParse(fixJson(jsonText));
|
|
897
|
+
if (result.success) return {
|
|
898
|
+
value: result.value,
|
|
899
|
+
state: "repaired-parse"
|
|
900
|
+
};
|
|
901
|
+
return {
|
|
902
|
+
value: void 0,
|
|
903
|
+
state: "failed-parse"
|
|
904
|
+
};
|
|
905
|
+
}
|
|
906
|
+
//#endregion
|
|
907
|
+
//#region src/utils/ai-sdk-v4/process-data-stream.ts
|
|
908
|
+
const NEWLINE = "\n".charCodeAt(0);
|
|
909
|
+
function concatChunks(chunks, totalLength) {
|
|
910
|
+
const concatenatedChunks = new Uint8Array(totalLength);
|
|
911
|
+
let offset = 0;
|
|
912
|
+
for (const chunk of chunks) {
|
|
913
|
+
concatenatedChunks.set(chunk, offset);
|
|
914
|
+
offset += chunk.length;
|
|
915
|
+
}
|
|
916
|
+
chunks.length = 0;
|
|
917
|
+
return concatenatedChunks;
|
|
918
|
+
}
|
|
919
|
+
async function processDataStream({ stream, onTextPart, onReasoningPart, onReasoningSignaturePart, onRedactedReasoningPart, onSourcePart, onFilePart, onDataPart, onErrorPart, onToolCallStreamingStartPart, onToolCallDeltaPart, onToolCallPart, onToolResultPart, onMessageAnnotationsPart, onFinishMessagePart, onFinishStepPart, onStartStepPart }) {
|
|
920
|
+
const reader = stream.getReader();
|
|
921
|
+
const decoder = new TextDecoder();
|
|
922
|
+
const chunks = [];
|
|
923
|
+
let totalLength = 0;
|
|
924
|
+
while (true) {
|
|
925
|
+
const { value } = await reader.read();
|
|
926
|
+
if (value) {
|
|
927
|
+
chunks.push(value);
|
|
928
|
+
totalLength += value.length;
|
|
929
|
+
if (value[value.length - 1] !== NEWLINE) continue;
|
|
930
|
+
}
|
|
931
|
+
if (chunks.length === 0) break;
|
|
932
|
+
const concatenatedChunks = concatChunks(chunks, totalLength);
|
|
933
|
+
totalLength = 0;
|
|
934
|
+
const streamParts = decoder.decode(concatenatedChunks, { stream: true }).split("\n").filter((line) => line !== "").map(parseDataStreamPart);
|
|
935
|
+
for (const { type, value } of streamParts) switch (type) {
|
|
936
|
+
case "text":
|
|
937
|
+
await onTextPart?.(value);
|
|
938
|
+
break;
|
|
939
|
+
case "reasoning":
|
|
940
|
+
await onReasoningPart?.(value);
|
|
941
|
+
break;
|
|
942
|
+
case "reasoning_signature":
|
|
943
|
+
await onReasoningSignaturePart?.(value);
|
|
944
|
+
break;
|
|
945
|
+
case "redacted_reasoning":
|
|
946
|
+
await onRedactedReasoningPart?.(value);
|
|
947
|
+
break;
|
|
948
|
+
case "file":
|
|
949
|
+
await onFilePart?.(value);
|
|
950
|
+
break;
|
|
951
|
+
case "source":
|
|
952
|
+
await onSourcePart?.(value);
|
|
953
|
+
break;
|
|
954
|
+
case "data":
|
|
955
|
+
await onDataPart?.(value);
|
|
956
|
+
break;
|
|
957
|
+
case "error":
|
|
958
|
+
await onErrorPart?.(value);
|
|
959
|
+
break;
|
|
960
|
+
case "message_annotations":
|
|
961
|
+
await onMessageAnnotationsPart?.(value);
|
|
962
|
+
break;
|
|
963
|
+
case "tool_call_streaming_start":
|
|
964
|
+
await onToolCallStreamingStartPart?.(value);
|
|
965
|
+
break;
|
|
966
|
+
case "tool_call_delta":
|
|
967
|
+
await onToolCallDeltaPart?.(value);
|
|
968
|
+
break;
|
|
969
|
+
case "tool_call":
|
|
970
|
+
await onToolCallPart?.(value);
|
|
971
|
+
break;
|
|
972
|
+
case "tool_result":
|
|
973
|
+
await onToolResultPart?.(value);
|
|
974
|
+
break;
|
|
975
|
+
case "finish_message":
|
|
976
|
+
await onFinishMessagePart?.(value);
|
|
977
|
+
break;
|
|
978
|
+
case "finish_step":
|
|
979
|
+
await onFinishStepPart?.(value);
|
|
980
|
+
break;
|
|
981
|
+
case "start_step":
|
|
982
|
+
await onStartStepPart?.(value);
|
|
983
|
+
break;
|
|
984
|
+
default: throw new Error(`Unknown stream part type: ${type}`);
|
|
985
|
+
}
|
|
986
|
+
}
|
|
987
|
+
}
|
|
988
|
+
//#endregion
|
|
413
989
|
//#region src/utils/client-tool-model-output.ts
|
|
414
990
|
/**
|
|
415
991
|
* Normalize modelOutput from toModelOutput() to the AI SDK V2 tool result
|
|
@@ -1543,7 +2119,7 @@ var Agent = class extends BaseResource {
|
|
|
1543
2119
|
replaceLastMessage
|
|
1544
2120
|
});
|
|
1545
2121
|
}
|
|
1546
|
-
await
|
|
2122
|
+
await processDataStream({
|
|
1547
2123
|
stream,
|
|
1548
2124
|
onTextPart(value) {
|
|
1549
2125
|
if (currentTextPart == null) {
|
|
@@ -1634,7 +2210,7 @@ var Agent = class extends BaseResource {
|
|
|
1634
2210
|
onToolCallDeltaPart(value) {
|
|
1635
2211
|
const partialToolCall = partialToolCalls[value.toolCallId];
|
|
1636
2212
|
partialToolCall.text += value.argsTextDelta;
|
|
1637
|
-
const { value: partialArgs } =
|
|
2213
|
+
const { value: partialArgs } = parsePartialJson(partialToolCall.text);
|
|
1638
2214
|
const invocation = {
|
|
1639
2215
|
state: "partial-call",
|
|
1640
2216
|
step: partialToolCall.step,
|
|
@@ -1649,7 +2225,7 @@ var Agent = class extends BaseResource {
|
|
|
1649
2225
|
},
|
|
1650
2226
|
async onToolCallPart(value) {
|
|
1651
2227
|
const partialToolCall = partialToolCalls[value.toolCallId];
|
|
1652
|
-
const streamedArgs = partialToolCall?.text ?
|
|
2228
|
+
const streamedArgs = partialToolCall?.text ? parsePartialJson(partialToolCall.text).value : void 0;
|
|
1653
2229
|
const toolCall = streamedArgs === void 0 ? value : {
|
|
1654
2230
|
...value,
|
|
1655
2231
|
args: streamedArgs
|
|
@@ -1764,7 +2340,7 @@ var Agent = class extends BaseResource {
|
|
|
1764
2340
|
headers: response.headers
|
|
1765
2341
|
});
|
|
1766
2342
|
streamResponse.processDataStream = async (options = {}) => {
|
|
1767
|
-
await
|
|
2343
|
+
await processDataStream({
|
|
1768
2344
|
stream: streamResponse.body,
|
|
1769
2345
|
...options
|
|
1770
2346
|
});
|
|
@@ -1888,7 +2464,7 @@ var Agent = class extends BaseResource {
|
|
|
1888
2464
|
break;
|
|
1889
2465
|
case "tool-call": {
|
|
1890
2466
|
const partialToolCall = partialToolCalls[chunk.payload.toolCallId];
|
|
1891
|
-
const streamedArgs = partialToolCall?.text ?
|
|
2467
|
+
const streamedArgs = partialToolCall?.text ? parsePartialJson(partialToolCall.text).value : void 0;
|
|
1892
2468
|
const toolCall = streamedArgs === void 0 ? chunk.payload : {
|
|
1893
2469
|
...chunk.payload,
|
|
1894
2470
|
args: streamedArgs
|
|
@@ -1947,7 +2523,7 @@ var Agent = class extends BaseResource {
|
|
|
1947
2523
|
case "tool-call-delta": {
|
|
1948
2524
|
const partialToolCall = partialToolCalls[chunk.payload.toolCallId];
|
|
1949
2525
|
partialToolCall.text += chunk.payload.argsTextDelta;
|
|
1950
|
-
const { value: partialArgs } =
|
|
2526
|
+
const { value: partialArgs } = parsePartialJson(partialToolCall.text);
|
|
1951
2527
|
const invocation = {
|
|
1952
2528
|
state: "partial-call",
|
|
1953
2529
|
step: partialToolCall.step,
|