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