@mastra/client-js 1.56.0-alpha.1 → 1.56.0-alpha.3

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.
Files changed (34) hide show
  1. package/dist/docs/SKILL.md +1 -1
  2. package/dist/docs/assets/SOURCE_MAP.json +1 -1
  3. package/dist/docs/references/docs-harness-signals.md +3 -1
  4. package/dist/index.cjs +584 -7
  5. package/dist/index.cjs.map +1 -1
  6. package/dist/index.js +578 -1
  7. package/dist/index.js.map +1 -1
  8. package/dist/resources/agent-controller.d.ts +4 -1
  9. package/dist/resources/agent-controller.d.ts.map +1 -1
  10. package/dist/resources/agent.d.ts +2 -2
  11. package/dist/resources/agent.d.ts.map +1 -1
  12. package/dist/route-types.generated.d.ts +34 -0
  13. package/dist/route-types.generated.d.ts.map +1 -1
  14. package/dist/types.d.ts +2 -2
  15. package/dist/types.d.ts.map +1 -1
  16. package/dist/utils/ai-sdk-v4/data-stream-parts.d.ts +89 -0
  17. package/dist/utils/ai-sdk-v4/data-stream-parts.d.ts.map +1 -0
  18. package/dist/utils/ai-sdk-v4/fix-json.d.ts +2 -0
  19. package/dist/utils/ai-sdk-v4/fix-json.d.ts.map +1 -0
  20. package/dist/utils/ai-sdk-v4/index.d.ts +5 -0
  21. package/dist/utils/ai-sdk-v4/index.d.ts.map +1 -0
  22. package/dist/utils/ai-sdk-v4/parse-partial-json.d.ts +6 -0
  23. package/dist/utils/ai-sdk-v4/parse-partial-json.d.ts.map +1 -0
  24. package/dist/utils/ai-sdk-v4/process-data-stream.d.ts +53 -0
  25. package/dist/utils/ai-sdk-v4/process-data-stream.d.ts.map +1 -0
  26. package/dist/utils/ai-sdk-v4/types.d.ts +93 -0
  27. package/dist/utils/ai-sdk-v4/types.d.ts.map +1 -0
  28. package/package.json +6 -7
  29. package/dist/_types/@ai-sdk_provider/dist/index.d.ts +0 -1587
  30. package/dist/_types/@ai-sdk_provider/package.json +0 -1
  31. package/dist/_types/@ai-sdk_provider-utils/dist/index.d.ts +0 -379
  32. package/dist/_types/@ai-sdk_provider-utils/package.json +0 -1
  33. package/dist/_types/@ai-sdk_ui-utils/dist/index.d.ts +0 -820
  34. package/dist/_types/@ai-sdk_ui-utils/package.json +0 -1
@@ -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.1"
6
+ version: "1.56.0-alpha.3"
7
7
  ---
8
8
 
9
9
  ## When to use
@@ -1,5 +1,5 @@
1
1
  {
2
- "version": "1.56.0-alpha.1",
2
+ "version": "1.56.0-alpha.3",
3
3
  "package": "@mastra/client-js",
4
4
  "exports": {},
5
5
  "modules": {}
@@ -416,7 +416,9 @@ Use the connection tools for distinct operations:
416
416
 
417
417
  Saved connections remain in the sender thread until explicitly disconnected. Every send independently refreshes discovery and verifies the exact endpoint before routing begins. A saved connection therefore records collaboration intent. It doesn't indicate current presence.
418
418
 
419
- After a send attempt reaches Core routing, the routing result is authoritative. The result can be `wake`, `deliver`, `persist`, `blocked`, or `discard`, depending on the target thread and notification policy. A send that isn't acknowledged by the advertised thread owner returns an error and doesn't consume its `messageId`, so the sender can retry it.
419
+ After a send attempt reaches Core routing, the routing result is authoritative. The result can be `wake`, `deliver`, `persist`, `blocked`, or `discard`, depending on the target thread and notification policy. A send that fails a direct delivery because no thread owner acknowledged it isn't lost: the signal stays pending in the target's notification inbox and the send reports `persist` instead of claiming delivery. The notification dispatcher retries that delivery on its own, so the sender doesn't need to resend it. The `messageId` isn't recorded in sent history and isn't rejected as a duplicate, although the pending notification still matches on it. A resend with the same `messageId` merges into that notification while it's pending, and delivers a second copy once the retry has succeeded. A send made with `expectsReply: true` returns an error there, because the reply obligation isn't established until the signal is delivered.
420
+
421
+ When the delivery policy routes a signal to a notification summary rather than delivering it directly, the send records the `messageId`, so retrying with the same id reports a duplicate instead of routing again. A low-priority send always takes this route and reports `persist`. A high- or medium-priority send to an active thread takes it too, but there the summary signal is emitted immediately, so the send reports that signal's routing result (`wake`, `deliver`, or `persist`) and records the `messageId` the same way, including when `expectsReply: true`. Only when the policy schedules a summary without emitting a signal at send time does an `expectsReply: true` send fail to establish its reply obligation: it returns an error and doesn't record the send in sent history, so establishing the reply obligation takes a new signal at a priority that routes directly.
420
422
 
421
423
  ### Discover agents in other projects
422
424
 
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 (0, _ai_sdk_ui_utils.processDataStream)({
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 } = (0, _ai_sdk_ui_utils.parsePartialJson)(partialToolCall.text);
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 ? (0, _ai_sdk_ui_utils.parsePartialJson)(partialToolCall.text).value : void 0;
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 (0, _ai_sdk_ui_utils.processDataStream)({
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 ? (0, _ai_sdk_ui_utils.parsePartialJson)(partialToolCall.text).value : void 0;
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 } = (0, _ai_sdk_ui_utils.parsePartialJson)(partialToolCall.text);
2526
+ const { value: partialArgs } = parsePartialJson(partialToolCall.text);
1951
2527
  const invocation = {
1952
2528
  state: "partial-call",
1953
2529
  step: partialToolCall.step,
@@ -6430,6 +7006,7 @@ var AgentControllerSession = class extends BaseResource {
6430
7006
  body: {
6431
7007
  toolCallId,
6432
7008
  approved,
7009
+ ...options?.alwaysAllowCategory ? { alwaysAllowCategory: true } : {},
6433
7010
  ...requestContext ? { requestContext } : {}
6434
7011
  }
6435
7012
  });