@mastra/ai-sdk 0.0.0-ai-sdk-workflow-route-20251010135341 → 0.0.0-allow-to-pass-a-mastra-url-instance-20251105224938
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 +169 -5
- package/README.md +65 -1
- package/dist/chat-route.d.ts.map +1 -1
- package/dist/convert-messages.d.ts +10 -0
- package/dist/convert-messages.d.ts.map +1 -0
- package/dist/convert-streams.d.ts +18 -0
- package/dist/convert-streams.d.ts.map +1 -0
- package/dist/helpers.d.ts +2 -3
- package/dist/helpers.d.ts.map +1 -1
- package/dist/index.cjs +236 -96
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.ts +4 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +236 -97
- package/dist/index.js.map +1 -1
- package/dist/network-route.d.ts +1 -1
- package/dist/network-route.d.ts.map +1 -1
- package/dist/to-ai-sdk-format.d.ts +15 -14
- package/dist/to-ai-sdk-format.d.ts.map +1 -1
- package/dist/transformers.d.ts +67 -35
- package/dist/transformers.d.ts.map +1 -1
- package/dist/ui.cjs +16 -0
- package/dist/ui.cjs.map +1 -0
- package/dist/ui.d.ts +2 -0
- package/dist/ui.d.ts.map +1 -0
- package/dist/ui.js +13 -0
- package/dist/ui.js.map +1 -0
- package/dist/utils.d.ts +10 -0
- package/dist/utils.d.ts.map +1 -0
- package/dist/workflow-route.d.ts +1 -1
- package/dist/workflow-route.d.ts.map +1 -1
- package/package.json +19 -6
package/dist/index.cjs
CHANGED
|
@@ -5,6 +5,33 @@ var ai = require('ai');
|
|
|
5
5
|
var stream = require('@mastra/core/stream');
|
|
6
6
|
|
|
7
7
|
// src/chat-route.ts
|
|
8
|
+
|
|
9
|
+
// src/utils.ts
|
|
10
|
+
var isDataChunkType = (chunk) => {
|
|
11
|
+
return chunk && typeof chunk === "object" && "type" in chunk && chunk.type?.startsWith("data-");
|
|
12
|
+
};
|
|
13
|
+
function safeParseErrorObject(obj) {
|
|
14
|
+
if (typeof obj !== "object" || obj === null) {
|
|
15
|
+
return String(obj);
|
|
16
|
+
}
|
|
17
|
+
try {
|
|
18
|
+
const stringified = JSON.stringify(obj);
|
|
19
|
+
if (stringified === "{}") {
|
|
20
|
+
return String(obj);
|
|
21
|
+
}
|
|
22
|
+
return stringified;
|
|
23
|
+
} catch {
|
|
24
|
+
return String(obj);
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
var isAgentExecutionDataChunkType = (chunk) => {
|
|
28
|
+
return chunk && typeof chunk === "object" && "type" in chunk && chunk.type?.startsWith("agent-execution-event-") && "payload" in chunk && typeof chunk.payload === "object" && "type" in chunk.payload && chunk.payload.type?.startsWith("data-");
|
|
29
|
+
};
|
|
30
|
+
var isWorkflowExecutionDataChunkType = (chunk) => {
|
|
31
|
+
return chunk && typeof chunk === "object" && "type" in chunk && chunk.type?.startsWith("workflow-execution-event-") && "payload" in chunk && typeof chunk.payload === "object" && "type" in chunk.payload && chunk.payload.type?.startsWith("data-");
|
|
32
|
+
};
|
|
33
|
+
|
|
34
|
+
// src/helpers.ts
|
|
8
35
|
function convertMastraChunkToAISDKv5({
|
|
9
36
|
chunk,
|
|
10
37
|
mode = "stream"
|
|
@@ -210,6 +237,9 @@ function convertMastraChunkToAISDKv5({
|
|
|
210
237
|
...chunk.payload || {}
|
|
211
238
|
};
|
|
212
239
|
}
|
|
240
|
+
if ("type" in chunk && chunk.type?.startsWith("data-")) {
|
|
241
|
+
return chunk;
|
|
242
|
+
}
|
|
213
243
|
return;
|
|
214
244
|
}
|
|
215
245
|
}
|
|
@@ -223,7 +253,7 @@ function convertFullStreamChunkToUIMessageStream({
|
|
|
223
253
|
sendFinish,
|
|
224
254
|
responseMessageId
|
|
225
255
|
}) {
|
|
226
|
-
const partType = part
|
|
256
|
+
const partType = part?.type;
|
|
227
257
|
switch (partType) {
|
|
228
258
|
case "text-start": {
|
|
229
259
|
return {
|
|
@@ -380,8 +410,16 @@ function convertFullStreamChunkToUIMessageStream({
|
|
|
380
410
|
return;
|
|
381
411
|
}
|
|
382
412
|
default: {
|
|
383
|
-
|
|
384
|
-
|
|
413
|
+
if (isDataChunkType(part)) {
|
|
414
|
+
if (!("data" in part)) {
|
|
415
|
+
throw new Error(
|
|
416
|
+
`UI Messages require a data property when using data- prefixed chunks
|
|
417
|
+
${JSON.stringify(part)}`
|
|
418
|
+
);
|
|
419
|
+
}
|
|
420
|
+
return part;
|
|
421
|
+
}
|
|
422
|
+
return;
|
|
385
423
|
}
|
|
386
424
|
}
|
|
387
425
|
}
|
|
@@ -425,7 +463,7 @@ function AgentNetworkToAISDKTransformer() {
|
|
|
425
463
|
}
|
|
426
464
|
});
|
|
427
465
|
}
|
|
428
|
-
function AgentStreamToAISDKTransformer() {
|
|
466
|
+
function AgentStreamToAISDKTransformer(lastMessageId) {
|
|
429
467
|
let bufferedSteps = /* @__PURE__ */ new Map();
|
|
430
468
|
return new TransformStream({
|
|
431
469
|
transform(chunk, controller) {
|
|
@@ -436,9 +474,9 @@ function AgentStreamToAISDKTransformer() {
|
|
|
436
474
|
sendSources: false,
|
|
437
475
|
sendStart: true,
|
|
438
476
|
sendFinish: true,
|
|
439
|
-
responseMessageId:
|
|
440
|
-
onError() {
|
|
441
|
-
return
|
|
477
|
+
responseMessageId: lastMessageId,
|
|
478
|
+
onError(error) {
|
|
479
|
+
return safeParseErrorObject(error);
|
|
442
480
|
}
|
|
443
481
|
});
|
|
444
482
|
if (transformedChunk) {
|
|
@@ -448,11 +486,11 @@ function AgentStreamToAISDKTransformer() {
|
|
|
448
486
|
if (agentTransformed) controller.enqueue(agentTransformed);
|
|
449
487
|
} else if (transformedChunk.type === "tool-workflow") {
|
|
450
488
|
const payload = transformedChunk.payload;
|
|
451
|
-
const workflowChunk = transformWorkflow(payload, bufferedSteps);
|
|
489
|
+
const workflowChunk = transformWorkflow(payload, bufferedSteps, true);
|
|
452
490
|
if (workflowChunk) controller.enqueue(workflowChunk);
|
|
453
491
|
} else if (transformedChunk.type === "tool-network") {
|
|
454
492
|
const payload = transformedChunk.payload;
|
|
455
|
-
const networkChunk = transformNetwork(payload, bufferedSteps);
|
|
493
|
+
const networkChunk = transformNetwork(payload, bufferedSteps, true);
|
|
456
494
|
if (networkChunk) controller.enqueue(networkChunk);
|
|
457
495
|
} else {
|
|
458
496
|
controller.enqueue(transformedChunk);
|
|
@@ -597,7 +635,7 @@ function transformAgent(payload, bufferedSteps) {
|
|
|
597
635
|
}
|
|
598
636
|
return null;
|
|
599
637
|
}
|
|
600
|
-
function transformWorkflow(payload, bufferedWorkflows) {
|
|
638
|
+
function transformWorkflow(payload, bufferedWorkflows, isNested) {
|
|
601
639
|
switch (payload.type) {
|
|
602
640
|
case "workflow-start":
|
|
603
641
|
bufferedWorkflows.set(payload.runId, {
|
|
@@ -605,7 +643,7 @@ function transformWorkflow(payload, bufferedWorkflows) {
|
|
|
605
643
|
steps: {}
|
|
606
644
|
});
|
|
607
645
|
return {
|
|
608
|
-
type: "data-workflow",
|
|
646
|
+
type: isNested ? "data-tool-workflow" : "data-workflow",
|
|
609
647
|
id: payload.runId,
|
|
610
648
|
data: {
|
|
611
649
|
name: bufferedWorkflows.get(payload.runId).name,
|
|
@@ -620,11 +658,13 @@ function transformWorkflow(payload, bufferedWorkflows) {
|
|
|
620
658
|
name: payload.payload.id,
|
|
621
659
|
status: payload.payload.status,
|
|
622
660
|
input: payload.payload.payload ?? null,
|
|
623
|
-
output: null
|
|
661
|
+
output: null,
|
|
662
|
+
suspendPayload: null,
|
|
663
|
+
resumePayload: null
|
|
624
664
|
};
|
|
625
665
|
bufferedWorkflows.set(payload.runId, current);
|
|
626
666
|
return {
|
|
627
|
-
type: "data-workflow",
|
|
667
|
+
type: isNested ? "data-tool-workflow" : "data-workflow",
|
|
628
668
|
id: payload.runId,
|
|
629
669
|
data: {
|
|
630
670
|
name: current.name,
|
|
@@ -643,7 +683,7 @@ function transformWorkflow(payload, bufferedWorkflows) {
|
|
|
643
683
|
output: payload.payload.output ?? null
|
|
644
684
|
};
|
|
645
685
|
return {
|
|
646
|
-
type: "data-workflow",
|
|
686
|
+
type: isNested ? "data-tool-workflow" : "data-workflow",
|
|
647
687
|
id: payload.runId,
|
|
648
688
|
data: {
|
|
649
689
|
name: current.name,
|
|
@@ -653,11 +693,32 @@ function transformWorkflow(payload, bufferedWorkflows) {
|
|
|
653
693
|
}
|
|
654
694
|
};
|
|
655
695
|
}
|
|
696
|
+
case "workflow-step-suspended": {
|
|
697
|
+
const current = bufferedWorkflows.get(payload.runId);
|
|
698
|
+
if (!current) return null;
|
|
699
|
+
current.steps[payload.payload.id] = {
|
|
700
|
+
...current.steps[payload.payload.id],
|
|
701
|
+
status: payload.payload.status,
|
|
702
|
+
suspendPayload: payload.payload.suspendPayload ?? null,
|
|
703
|
+
resumePayload: payload.payload.resumePayload ?? null,
|
|
704
|
+
output: null
|
|
705
|
+
};
|
|
706
|
+
return {
|
|
707
|
+
type: isNested ? "data-tool-workflow" : "data-workflow",
|
|
708
|
+
id: payload.runId,
|
|
709
|
+
data: {
|
|
710
|
+
name: current.name,
|
|
711
|
+
status: "suspended",
|
|
712
|
+
steps: current.steps,
|
|
713
|
+
output: null
|
|
714
|
+
}
|
|
715
|
+
};
|
|
716
|
+
}
|
|
656
717
|
case "workflow-finish": {
|
|
657
718
|
const current = bufferedWorkflows.get(payload.runId);
|
|
658
719
|
if (!current) return null;
|
|
659
720
|
return {
|
|
660
|
-
type: "data-workflow",
|
|
721
|
+
type: isNested ? "data-tool-workflow" : "data-workflow",
|
|
661
722
|
id: payload.runId,
|
|
662
723
|
data: {
|
|
663
724
|
name: current.name,
|
|
@@ -667,87 +728,117 @@ function transformWorkflow(payload, bufferedWorkflows) {
|
|
|
667
728
|
}
|
|
668
729
|
};
|
|
669
730
|
}
|
|
670
|
-
default:
|
|
731
|
+
default: {
|
|
732
|
+
if (isDataChunkType(payload)) {
|
|
733
|
+
if (!("data" in payload)) {
|
|
734
|
+
throw new Error(
|
|
735
|
+
`UI Messages require a data property when using data- prefixed chunks
|
|
736
|
+
${JSON.stringify(payload)}`
|
|
737
|
+
);
|
|
738
|
+
}
|
|
739
|
+
return payload;
|
|
740
|
+
}
|
|
671
741
|
return null;
|
|
742
|
+
}
|
|
672
743
|
}
|
|
673
744
|
}
|
|
674
|
-
function transformNetwork(payload, bufferedNetworks) {
|
|
745
|
+
function transformNetwork(payload, bufferedNetworks, isNested) {
|
|
675
746
|
switch (payload.type) {
|
|
676
747
|
case "routing-agent-start": {
|
|
677
|
-
if (!bufferedNetworks.has(payload.
|
|
678
|
-
bufferedNetworks.set(payload.
|
|
748
|
+
if (!bufferedNetworks.has(payload.runId)) {
|
|
749
|
+
bufferedNetworks.set(payload.runId, {
|
|
679
750
|
name: payload.payload.agentId,
|
|
680
|
-
steps: []
|
|
751
|
+
steps: [],
|
|
752
|
+
usage: null,
|
|
753
|
+
output: null
|
|
681
754
|
});
|
|
682
755
|
}
|
|
683
756
|
return {
|
|
684
|
-
type: "data-network",
|
|
685
|
-
id: payload.
|
|
757
|
+
type: isNested ? "data-tool-network" : "data-network",
|
|
758
|
+
id: payload.runId,
|
|
686
759
|
data: {
|
|
687
|
-
name: bufferedNetworks.get(payload.
|
|
760
|
+
name: bufferedNetworks.get(payload.runId).name,
|
|
688
761
|
status: "running",
|
|
689
|
-
|
|
762
|
+
usage: null,
|
|
763
|
+
steps: bufferedNetworks.get(payload.runId).steps,
|
|
690
764
|
output: null
|
|
691
765
|
}
|
|
692
766
|
};
|
|
693
767
|
}
|
|
768
|
+
case "routing-agent-text-start": {
|
|
769
|
+
const current = bufferedNetworks.get(payload.runId);
|
|
770
|
+
if (!current) return null;
|
|
771
|
+
return {
|
|
772
|
+
type: "text-start",
|
|
773
|
+
id: payload.runId
|
|
774
|
+
};
|
|
775
|
+
}
|
|
776
|
+
case "routing-agent-text-delta": {
|
|
777
|
+
const current = bufferedNetworks.get(payload.runId);
|
|
778
|
+
if (!current) return null;
|
|
779
|
+
return {
|
|
780
|
+
type: "text-delta",
|
|
781
|
+
id: payload.runId,
|
|
782
|
+
delta: payload.payload.text
|
|
783
|
+
};
|
|
784
|
+
}
|
|
694
785
|
case "agent-execution-start": {
|
|
695
|
-
const current = bufferedNetworks.get(payload.
|
|
786
|
+
const current = bufferedNetworks.get(payload.runId) || { name: "", steps: [], usage: null, output: null };
|
|
696
787
|
current.steps.push({
|
|
697
788
|
name: payload.payload.agentId,
|
|
698
789
|
status: "running",
|
|
699
790
|
input: payload.payload.args || null,
|
|
700
|
-
output: null
|
|
791
|
+
output: null,
|
|
792
|
+
suspendPayload: null,
|
|
793
|
+
resumePayload: null
|
|
701
794
|
});
|
|
702
|
-
bufferedNetworks.set(payload.
|
|
795
|
+
bufferedNetworks.set(payload.runId, current);
|
|
703
796
|
return {
|
|
704
|
-
type: "data-network",
|
|
705
|
-
id: payload.
|
|
797
|
+
type: isNested ? "data-tool-network" : "data-network",
|
|
798
|
+
id: payload.runId,
|
|
706
799
|
data: {
|
|
707
|
-
|
|
708
|
-
status: "running"
|
|
709
|
-
steps: current.steps,
|
|
710
|
-
output: null
|
|
800
|
+
...current,
|
|
801
|
+
status: "running"
|
|
711
802
|
}
|
|
712
803
|
};
|
|
713
804
|
}
|
|
714
805
|
case "workflow-execution-start": {
|
|
715
|
-
const current = bufferedNetworks.get(payload.
|
|
806
|
+
const current = bufferedNetworks.get(payload.runId) || { name: "", steps: [], usage: null, output: null };
|
|
716
807
|
current.steps.push({
|
|
717
808
|
name: payload.payload.name,
|
|
718
809
|
status: "running",
|
|
719
810
|
input: payload.payload.args || null,
|
|
720
|
-
output: null
|
|
811
|
+
output: null,
|
|
812
|
+
suspendPayload: null,
|
|
813
|
+
resumePayload: null
|
|
721
814
|
});
|
|
722
|
-
bufferedNetworks.set(payload.
|
|
815
|
+
bufferedNetworks.set(payload.runId, current);
|
|
723
816
|
return {
|
|
724
|
-
type: "data-network",
|
|
725
|
-
id: payload.
|
|
817
|
+
type: isNested ? "data-tool-network" : "data-network",
|
|
818
|
+
id: payload.runId,
|
|
726
819
|
data: {
|
|
727
|
-
|
|
728
|
-
status: "running"
|
|
729
|
-
steps: current.steps,
|
|
730
|
-
output: null
|
|
820
|
+
...current,
|
|
821
|
+
status: "running"
|
|
731
822
|
}
|
|
732
823
|
};
|
|
733
824
|
}
|
|
734
825
|
case "tool-execution-start": {
|
|
735
|
-
const current = bufferedNetworks.get(payload.
|
|
826
|
+
const current = bufferedNetworks.get(payload.runId) || { name: "", steps: [], usage: null, output: null };
|
|
736
827
|
current.steps.push({
|
|
737
828
|
name: payload.payload.args?.toolName,
|
|
738
829
|
status: "running",
|
|
739
830
|
input: payload.payload.args?.args || null,
|
|
740
|
-
output: null
|
|
831
|
+
output: null,
|
|
832
|
+
suspendPayload: null,
|
|
833
|
+
resumePayload: null
|
|
741
834
|
});
|
|
742
|
-
bufferedNetworks.set(payload.
|
|
835
|
+
bufferedNetworks.set(payload.runId, current);
|
|
743
836
|
return {
|
|
744
|
-
type: "data-network",
|
|
745
|
-
id: payload.
|
|
837
|
+
type: isNested ? "data-tool-network" : "data-network",
|
|
838
|
+
id: payload.runId,
|
|
746
839
|
data: {
|
|
747
|
-
|
|
748
|
-
status: "running"
|
|
749
|
-
steps: current.steps,
|
|
750
|
-
output: null
|
|
840
|
+
...current,
|
|
841
|
+
status: "running"
|
|
751
842
|
}
|
|
752
843
|
};
|
|
753
844
|
}
|
|
@@ -758,16 +849,18 @@ function transformNetwork(payload, bufferedNetworks) {
|
|
|
758
849
|
name: payload.payload.agentId,
|
|
759
850
|
status: "success",
|
|
760
851
|
input: null,
|
|
761
|
-
output: payload.payload.result
|
|
852
|
+
output: payload.payload.result,
|
|
853
|
+
suspendPayload: null,
|
|
854
|
+
resumePayload: null
|
|
762
855
|
});
|
|
763
856
|
return {
|
|
764
|
-
type: "data-network",
|
|
857
|
+
type: isNested ? "data-tool-network" : "data-network",
|
|
765
858
|
id: payload.runId,
|
|
766
859
|
data: {
|
|
767
|
-
|
|
860
|
+
...current,
|
|
861
|
+
usage: payload.payload?.usage ?? current.usage,
|
|
768
862
|
status: "running",
|
|
769
|
-
|
|
770
|
-
output: payload.payload.result ?? null
|
|
863
|
+
output: payload.payload.result ?? current.output
|
|
771
864
|
}
|
|
772
865
|
};
|
|
773
866
|
}
|
|
@@ -778,16 +871,17 @@ function transformNetwork(payload, bufferedNetworks) {
|
|
|
778
871
|
name: payload.payload.toolName,
|
|
779
872
|
status: "success",
|
|
780
873
|
input: null,
|
|
781
|
-
output: payload.payload.result
|
|
874
|
+
output: payload.payload.result,
|
|
875
|
+
suspendPayload: null,
|
|
876
|
+
resumePayload: null
|
|
782
877
|
});
|
|
783
878
|
return {
|
|
784
|
-
type: "data-network",
|
|
879
|
+
type: isNested ? "data-tool-network" : "data-network",
|
|
785
880
|
id: payload.runId,
|
|
786
881
|
data: {
|
|
787
|
-
|
|
882
|
+
...current,
|
|
788
883
|
status: "running",
|
|
789
|
-
|
|
790
|
-
output: payload.payload.result ?? null
|
|
884
|
+
output: payload.payload.result ?? current.output
|
|
791
885
|
}
|
|
792
886
|
};
|
|
793
887
|
}
|
|
@@ -798,44 +892,45 @@ function transformNetwork(payload, bufferedNetworks) {
|
|
|
798
892
|
name: payload.payload.name,
|
|
799
893
|
status: "success",
|
|
800
894
|
input: null,
|
|
801
|
-
output: payload.payload.result
|
|
895
|
+
output: payload.payload.result,
|
|
896
|
+
suspendPayload: null,
|
|
897
|
+
resumePayload: null
|
|
802
898
|
});
|
|
803
899
|
return {
|
|
804
|
-
type: "data-network",
|
|
900
|
+
type: isNested ? "data-tool-network" : "data-network",
|
|
805
901
|
id: payload.runId,
|
|
806
902
|
data: {
|
|
807
|
-
|
|
903
|
+
...current,
|
|
904
|
+
usage: payload.payload?.usage ?? current.usage,
|
|
808
905
|
status: "running",
|
|
809
|
-
|
|
810
|
-
output: payload.payload.result ?? null
|
|
906
|
+
output: payload.payload.result ?? current.output
|
|
811
907
|
}
|
|
812
908
|
};
|
|
813
909
|
}
|
|
814
910
|
case "routing-agent-end": {
|
|
815
|
-
const current = bufferedNetworks.get(payload.
|
|
911
|
+
const current = bufferedNetworks.get(payload.runId);
|
|
816
912
|
if (!current) return null;
|
|
817
913
|
return {
|
|
818
|
-
type: "data-network",
|
|
819
|
-
id: payload.
|
|
914
|
+
type: isNested ? "data-tool-network" : "data-network",
|
|
915
|
+
id: payload.runId,
|
|
820
916
|
data: {
|
|
821
|
-
|
|
917
|
+
...current,
|
|
822
918
|
status: "finished",
|
|
823
|
-
|
|
824
|
-
output: payload.payload?.result ??
|
|
919
|
+
usage: payload.payload?.usage ?? current.usage,
|
|
920
|
+
output: payload.payload?.result ?? current.output
|
|
825
921
|
}
|
|
826
922
|
};
|
|
827
923
|
}
|
|
828
924
|
case "network-execution-event-step-finish": {
|
|
829
|
-
const current = bufferedNetworks.get(payload.
|
|
925
|
+
const current = bufferedNetworks.get(payload.runId);
|
|
830
926
|
if (!current) return null;
|
|
831
927
|
return {
|
|
832
|
-
type: "data-network",
|
|
833
|
-
id: payload.
|
|
928
|
+
type: isNested ? "data-tool-network" : "data-network",
|
|
929
|
+
id: payload.runId,
|
|
834
930
|
data: {
|
|
835
|
-
|
|
931
|
+
...current,
|
|
836
932
|
status: "finished",
|
|
837
|
-
|
|
838
|
-
output: payload.payload?.result ?? null
|
|
933
|
+
output: payload.payload?.result ?? current.output
|
|
839
934
|
}
|
|
840
935
|
};
|
|
841
936
|
}
|
|
@@ -843,23 +938,51 @@ function transformNetwork(payload, bufferedNetworks) {
|
|
|
843
938
|
const current = bufferedNetworks.get(payload.runId);
|
|
844
939
|
if (!current) return null;
|
|
845
940
|
return {
|
|
846
|
-
type: "data-network",
|
|
941
|
+
type: isNested ? "data-tool-network" : "data-network",
|
|
847
942
|
id: payload.runId,
|
|
848
943
|
data: {
|
|
849
|
-
|
|
944
|
+
...current,
|
|
945
|
+
usage: payload.payload?.usage ?? current.usage,
|
|
850
946
|
status: "finished",
|
|
851
|
-
|
|
852
|
-
output: payload.payload?.result ?? null
|
|
947
|
+
output: payload.payload?.result ?? current.output
|
|
853
948
|
}
|
|
854
949
|
};
|
|
855
950
|
}
|
|
856
|
-
default:
|
|
951
|
+
default: {
|
|
952
|
+
if (isDataChunkType(payload)) {
|
|
953
|
+
if (!("data" in payload)) {
|
|
954
|
+
throw new Error(
|
|
955
|
+
`UI Messages require a data property when using data- prefixed chunks
|
|
956
|
+
${JSON.stringify(payload)}`
|
|
957
|
+
);
|
|
958
|
+
}
|
|
959
|
+
return payload;
|
|
960
|
+
}
|
|
961
|
+
if (isAgentExecutionDataChunkType(payload)) {
|
|
962
|
+
if (!("data" in payload.payload)) {
|
|
963
|
+
throw new Error(
|
|
964
|
+
`UI Messages require a data property when using data- prefixed chunks
|
|
965
|
+
${JSON.stringify(payload)}`
|
|
966
|
+
);
|
|
967
|
+
}
|
|
968
|
+
return payload.payload;
|
|
969
|
+
}
|
|
970
|
+
if (isWorkflowExecutionDataChunkType(payload)) {
|
|
971
|
+
if (!("data" in payload.payload)) {
|
|
972
|
+
throw new Error(
|
|
973
|
+
`UI Messages require a data property when using data- prefixed chunks
|
|
974
|
+
${JSON.stringify(payload)}`
|
|
975
|
+
);
|
|
976
|
+
}
|
|
977
|
+
return payload.payload;
|
|
978
|
+
}
|
|
857
979
|
return null;
|
|
980
|
+
}
|
|
858
981
|
}
|
|
859
982
|
}
|
|
860
983
|
|
|
861
|
-
// src/
|
|
862
|
-
function
|
|
984
|
+
// src/convert-streams.ts
|
|
985
|
+
function toAISdkV5Stream(stream, options = { from: "agent" }) {
|
|
863
986
|
const from = options?.from;
|
|
864
987
|
if (from === "workflow") {
|
|
865
988
|
return stream.pipeThrough(WorkflowStreamToAISDKTransformer());
|
|
@@ -868,7 +991,7 @@ function toAISdkFormat(stream, options = { from: "agent" }) {
|
|
|
868
991
|
return stream.pipeThrough(AgentNetworkToAISDKTransformer());
|
|
869
992
|
}
|
|
870
993
|
const agentReadable = "fullStream" in stream ? stream.fullStream : stream;
|
|
871
|
-
return agentReadable.pipeThrough(AgentStreamToAISDKTransformer());
|
|
994
|
+
return agentReadable.pipeThrough(AgentStreamToAISDKTransformer(options?.lastMessageId));
|
|
872
995
|
}
|
|
873
996
|
|
|
874
997
|
// src/chat-route.ts
|
|
@@ -976,6 +1099,7 @@ function chatRoute({
|
|
|
976
1099
|
handler: async (c) => {
|
|
977
1100
|
const { messages, ...rest } = await c.req.json();
|
|
978
1101
|
const mastra = c.get("mastra");
|
|
1102
|
+
const requestContext = c.get("requestContext");
|
|
979
1103
|
let agentToUse = agent;
|
|
980
1104
|
if (!agent) {
|
|
981
1105
|
const agentId = c.req.param("agentId");
|
|
@@ -986,6 +1110,9 @@ function chatRoute({
|
|
|
986
1110
|
`Fixed agent ID was set together with an agentId path parameter. This can lead to unexpected behavior.`
|
|
987
1111
|
);
|
|
988
1112
|
}
|
|
1113
|
+
if (requestContext && defaultOptions?.requestContext) {
|
|
1114
|
+
mastra.getLogger()?.warn(`"requestContext" set in the route options will be overridden by the request's "requestContext".`);
|
|
1115
|
+
}
|
|
989
1116
|
if (!agentToUse) {
|
|
990
1117
|
throw new Error("Agent ID is required");
|
|
991
1118
|
}
|
|
@@ -995,11 +1122,17 @@ function chatRoute({
|
|
|
995
1122
|
}
|
|
996
1123
|
const result = await agentObj.stream(messages, {
|
|
997
1124
|
...defaultOptions,
|
|
998
|
-
...rest
|
|
1125
|
+
...rest,
|
|
1126
|
+
requestContext: requestContext || defaultOptions?.requestContext
|
|
999
1127
|
});
|
|
1128
|
+
let lastMessageId;
|
|
1129
|
+
if (messages.length > 0 && messages[messages.length - 1].role === "assistant") {
|
|
1130
|
+
lastMessageId = messages[messages.length - 1].id;
|
|
1131
|
+
}
|
|
1000
1132
|
const uiMessageStream = ai.createUIMessageStream({
|
|
1133
|
+
originalMessages: messages,
|
|
1001
1134
|
execute: async ({ writer }) => {
|
|
1002
|
-
for await (const part of
|
|
1135
|
+
for await (const part of toAISdkV5Stream(result, { from: "agent", lastMessageId })) {
|
|
1003
1136
|
writer.write(part);
|
|
1004
1137
|
}
|
|
1005
1138
|
}
|
|
@@ -1040,7 +1173,7 @@ function workflowRoute({
|
|
|
1040
1173
|
type: "object",
|
|
1041
1174
|
properties: {
|
|
1042
1175
|
inputData: { type: "object", additionalProperties: true },
|
|
1043
|
-
|
|
1176
|
+
requestContext: { type: "object", additionalProperties: true },
|
|
1044
1177
|
tracingOptions: { type: "object", additionalProperties: true }
|
|
1045
1178
|
}
|
|
1046
1179
|
}
|
|
@@ -1059,7 +1192,7 @@ function workflowRoute({
|
|
|
1059
1192
|
}
|
|
1060
1193
|
},
|
|
1061
1194
|
handler: async (c) => {
|
|
1062
|
-
const { inputData, ...rest } = await c.req.json();
|
|
1195
|
+
const { inputData, resumeData, ...rest } = await c.req.json();
|
|
1063
1196
|
const mastra = c.get("mastra");
|
|
1064
1197
|
let workflowToUse = workflow;
|
|
1065
1198
|
if (!workflow) {
|
|
@@ -1078,11 +1211,11 @@ function workflowRoute({
|
|
|
1078
1211
|
if (!workflowObj) {
|
|
1079
1212
|
throw new Error(`Workflow ${workflowToUse} not found`);
|
|
1080
1213
|
}
|
|
1081
|
-
const run = await workflowObj.
|
|
1082
|
-
const stream = run.
|
|
1214
|
+
const run = await workflowObj.createRun();
|
|
1215
|
+
const stream = resumeData ? run.resumeStream({ resumeData, ...rest }) : run.stream({ inputData, ...rest });
|
|
1083
1216
|
const uiMessageStream = ai.createUIMessageStream({
|
|
1084
1217
|
execute: async ({ writer }) => {
|
|
1085
|
-
for await (const part of
|
|
1218
|
+
for await (const part of toAISdkV5Stream(stream, { from: "workflow" })) {
|
|
1086
1219
|
writer.write(part);
|
|
1087
1220
|
}
|
|
1088
1221
|
}
|
|
@@ -1122,13 +1255,12 @@ function networkRoute({
|
|
|
1122
1255
|
type: "object",
|
|
1123
1256
|
properties: {
|
|
1124
1257
|
messages: { type: "array", items: { type: "object" } },
|
|
1125
|
-
|
|
1258
|
+
requestContext: { type: "object", additionalProperties: true },
|
|
1126
1259
|
runId: { type: "string" },
|
|
1127
1260
|
maxSteps: { type: "number" },
|
|
1128
1261
|
threadId: { type: "string" },
|
|
1129
1262
|
resourceId: { type: "string" },
|
|
1130
1263
|
modelSettings: { type: "object", additionalProperties: true },
|
|
1131
|
-
telemetry: { type: "object", additionalProperties: true },
|
|
1132
1264
|
tools: { type: "array", items: { type: "object" } }
|
|
1133
1265
|
},
|
|
1134
1266
|
required: ["messages"]
|
|
@@ -1177,7 +1309,7 @@ function networkRoute({
|
|
|
1177
1309
|
});
|
|
1178
1310
|
const uiMessageStream = ai.createUIMessageStream({
|
|
1179
1311
|
execute: async ({ writer }) => {
|
|
1180
|
-
for await (const part of
|
|
1312
|
+
for await (const part of toAISdkV5Stream(result, { from: "network" })) {
|
|
1181
1313
|
writer.write(part);
|
|
1182
1314
|
}
|
|
1183
1315
|
}
|
|
@@ -1187,9 +1319,17 @@ function networkRoute({
|
|
|
1187
1319
|
});
|
|
1188
1320
|
}
|
|
1189
1321
|
|
|
1322
|
+
// src/to-ai-sdk-format.ts
|
|
1323
|
+
function toAISdkFormat() {
|
|
1324
|
+
throw new Error(
|
|
1325
|
+
'toAISdkFormat() has been deprecated. Please use toAISdkStream() instead.\n\nMigration:\n import { toAISdkFormat } from "@mastra/ai-sdk";\n // Change to:\n import { toAISdkStream } from "@mastra/ai-sdk";\n\nThe function signature remains the same.'
|
|
1326
|
+
);
|
|
1327
|
+
}
|
|
1328
|
+
|
|
1190
1329
|
exports.chatRoute = chatRoute;
|
|
1191
1330
|
exports.networkRoute = networkRoute;
|
|
1192
1331
|
exports.toAISdkFormat = toAISdkFormat;
|
|
1332
|
+
exports.toAISdkStream = toAISdkV5Stream;
|
|
1193
1333
|
exports.workflowRoute = workflowRoute;
|
|
1194
1334
|
//# sourceMappingURL=index.cjs.map
|
|
1195
1335
|
//# sourceMappingURL=index.cjs.map
|