@mastra/ai-sdk 0.0.0-toolOptionTypes-20250917085558 → 0.0.0-unified-sidebar-20251010130811

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/index.js CHANGED
@@ -1,6 +1,823 @@
1
1
  import { registerApiRoute } from '@mastra/core/server';
2
+ import { createUIMessageStream, createUIMessageStreamResponse } from 'ai';
3
+ import { DefaultGeneratedFile, DefaultGeneratedFileWithType } from '@mastra/core/stream';
2
4
 
3
- // src/index.ts
5
+ // src/chat-route.ts
6
+ function convertMastraChunkToAISDKv5({
7
+ chunk,
8
+ mode = "stream"
9
+ }) {
10
+ switch (chunk.type) {
11
+ case "start":
12
+ return {
13
+ type: "start"
14
+ };
15
+ case "step-start":
16
+ const { messageId: _messageId, ...rest } = chunk.payload;
17
+ return {
18
+ type: "start-step",
19
+ request: rest.request,
20
+ warnings: rest.warnings || []
21
+ };
22
+ case "raw":
23
+ return {
24
+ type: "raw",
25
+ rawValue: chunk.payload
26
+ };
27
+ case "finish": {
28
+ return {
29
+ type: "finish",
30
+ finishReason: chunk.payload.stepResult.reason,
31
+ totalUsage: chunk.payload.output.usage
32
+ };
33
+ }
34
+ case "reasoning-start":
35
+ return {
36
+ type: "reasoning-start",
37
+ id: chunk.payload.id,
38
+ providerMetadata: chunk.payload.providerMetadata
39
+ };
40
+ case "reasoning-delta":
41
+ return {
42
+ type: "reasoning-delta",
43
+ id: chunk.payload.id,
44
+ text: chunk.payload.text,
45
+ providerMetadata: chunk.payload.providerMetadata
46
+ };
47
+ case "reasoning-signature":
48
+ throw new Error('AISDKv5 chunk type "reasoning-signature" not supported');
49
+ // return {
50
+ // type: 'reasoning-signature' as const,
51
+ // id: chunk.payload.id,
52
+ // signature: chunk.payload.signature,
53
+ // };
54
+ case "redacted-reasoning":
55
+ throw new Error('AISDKv5 chunk type "redacted-reasoning" not supported');
56
+ // return {
57
+ // type: 'redacted-reasoning',
58
+ // id: chunk.payload.id,
59
+ // data: chunk.payload.data,
60
+ // };
61
+ case "reasoning-end":
62
+ return {
63
+ type: "reasoning-end",
64
+ id: chunk.payload.id,
65
+ providerMetadata: chunk.payload.providerMetadata
66
+ };
67
+ case "source":
68
+ if (chunk.payload.sourceType === "url") {
69
+ return {
70
+ type: "source",
71
+ sourceType: "url",
72
+ id: chunk.payload.id,
73
+ url: chunk.payload.url,
74
+ title: chunk.payload.title,
75
+ providerMetadata: chunk.payload.providerMetadata
76
+ };
77
+ } else {
78
+ return {
79
+ type: "source",
80
+ sourceType: "document",
81
+ id: chunk.payload.id,
82
+ mediaType: chunk.payload.mimeType,
83
+ title: chunk.payload.title,
84
+ filename: chunk.payload.filename,
85
+ providerMetadata: chunk.payload.providerMetadata
86
+ };
87
+ }
88
+ case "file":
89
+ if (mode === "generate") {
90
+ return {
91
+ type: "file",
92
+ file: new DefaultGeneratedFile({
93
+ data: chunk.payload.data,
94
+ mediaType: chunk.payload.mimeType
95
+ })
96
+ };
97
+ }
98
+ return {
99
+ type: "file",
100
+ file: new DefaultGeneratedFileWithType({
101
+ data: chunk.payload.data,
102
+ mediaType: chunk.payload.mimeType
103
+ })
104
+ };
105
+ case "tool-call":
106
+ return {
107
+ type: "tool-call",
108
+ toolCallId: chunk.payload.toolCallId,
109
+ providerMetadata: chunk.payload.providerMetadata,
110
+ providerExecuted: chunk.payload.providerExecuted,
111
+ toolName: chunk.payload.toolName,
112
+ input: chunk.payload.args
113
+ };
114
+ case "tool-call-input-streaming-start":
115
+ return {
116
+ type: "tool-input-start",
117
+ id: chunk.payload.toolCallId,
118
+ toolName: chunk.payload.toolName,
119
+ dynamic: !!chunk.payload.dynamic,
120
+ providerMetadata: chunk.payload.providerMetadata,
121
+ providerExecuted: chunk.payload.providerExecuted
122
+ };
123
+ case "tool-call-input-streaming-end":
124
+ return {
125
+ type: "tool-input-end",
126
+ id: chunk.payload.toolCallId,
127
+ providerMetadata: chunk.payload.providerMetadata
128
+ };
129
+ case "tool-call-delta":
130
+ return {
131
+ type: "tool-input-delta",
132
+ id: chunk.payload.toolCallId,
133
+ delta: chunk.payload.argsTextDelta,
134
+ providerMetadata: chunk.payload.providerMetadata
135
+ };
136
+ case "step-finish": {
137
+ const { request: _request, providerMetadata, ...rest2 } = chunk.payload.metadata;
138
+ return {
139
+ type: "finish-step",
140
+ response: {
141
+ id: chunk.payload.id || "",
142
+ timestamp: /* @__PURE__ */ new Date(),
143
+ modelId: rest2.modelId || "",
144
+ ...rest2
145
+ },
146
+ usage: chunk.payload.output.usage,
147
+ finishReason: chunk.payload.stepResult.reason,
148
+ providerMetadata
149
+ };
150
+ }
151
+ case "text-delta":
152
+ return {
153
+ type: "text-delta",
154
+ id: chunk.payload.id,
155
+ text: chunk.payload.text,
156
+ providerMetadata: chunk.payload.providerMetadata
157
+ };
158
+ case "text-end":
159
+ return {
160
+ type: "text-end",
161
+ id: chunk.payload.id,
162
+ providerMetadata: chunk.payload.providerMetadata
163
+ };
164
+ case "text-start":
165
+ return {
166
+ type: "text-start",
167
+ id: chunk.payload.id,
168
+ providerMetadata: chunk.payload.providerMetadata
169
+ };
170
+ case "tool-result":
171
+ return {
172
+ type: "tool-result",
173
+ input: chunk.payload.args,
174
+ toolCallId: chunk.payload.toolCallId,
175
+ providerExecuted: chunk.payload.providerExecuted,
176
+ toolName: chunk.payload.toolName,
177
+ output: chunk.payload.result
178
+ // providerMetadata: chunk.payload.providerMetadata, // AI v5 types don't show this?
179
+ };
180
+ case "tool-error":
181
+ return {
182
+ type: "tool-error",
183
+ error: chunk.payload.error,
184
+ input: chunk.payload.args,
185
+ toolCallId: chunk.payload.toolCallId,
186
+ providerExecuted: chunk.payload.providerExecuted,
187
+ toolName: chunk.payload.toolName
188
+ // providerMetadata: chunk.payload.providerMetadata, // AI v5 types don't show this?
189
+ };
190
+ case "abort":
191
+ return {
192
+ type: "abort"
193
+ };
194
+ case "error":
195
+ return {
196
+ type: "error",
197
+ error: chunk.payload.error
198
+ };
199
+ case "object":
200
+ return {
201
+ type: "object",
202
+ object: chunk.object
203
+ };
204
+ default:
205
+ if (chunk.type && "payload" in chunk && chunk.payload) {
206
+ return {
207
+ type: chunk.type,
208
+ ...chunk.payload || {}
209
+ };
210
+ }
211
+ return;
212
+ }
213
+ }
214
+ function convertFullStreamChunkToUIMessageStream({
215
+ part,
216
+ messageMetadataValue,
217
+ sendReasoning,
218
+ sendSources,
219
+ onError,
220
+ sendStart,
221
+ sendFinish,
222
+ responseMessageId
223
+ }) {
224
+ const partType = part.type;
225
+ switch (partType) {
226
+ case "text-start": {
227
+ return {
228
+ type: "text-start",
229
+ id: part.id,
230
+ ...part.providerMetadata != null ? { providerMetadata: part.providerMetadata } : {}
231
+ };
232
+ }
233
+ case "text-delta": {
234
+ return {
235
+ type: "text-delta",
236
+ id: part.id,
237
+ delta: part.text,
238
+ ...part.providerMetadata != null ? { providerMetadata: part.providerMetadata } : {}
239
+ };
240
+ }
241
+ case "text-end": {
242
+ return {
243
+ type: "text-end",
244
+ id: part.id,
245
+ ...part.providerMetadata != null ? { providerMetadata: part.providerMetadata } : {}
246
+ };
247
+ }
248
+ case "reasoning-start": {
249
+ return {
250
+ type: "reasoning-start",
251
+ id: part.id,
252
+ ...part.providerMetadata != null ? { providerMetadata: part.providerMetadata } : {}
253
+ };
254
+ }
255
+ case "reasoning-delta": {
256
+ return;
257
+ }
258
+ case "reasoning-end": {
259
+ return {
260
+ type: "reasoning-end",
261
+ id: part.id,
262
+ ...part.providerMetadata != null ? { providerMetadata: part.providerMetadata } : {}
263
+ };
264
+ }
265
+ case "file": {
266
+ return {
267
+ type: "file",
268
+ mediaType: part.file.mediaType,
269
+ url: `data:${part.file.mediaType};base64,${part.file.base64}`
270
+ };
271
+ }
272
+ case "source": {
273
+ return;
274
+ }
275
+ case "tool-input-start": {
276
+ return {
277
+ type: "tool-input-start",
278
+ toolCallId: part.id,
279
+ toolName: part.toolName,
280
+ ...part.providerExecuted != null ? { providerExecuted: part.providerExecuted } : {},
281
+ ...part.dynamic != null ? { dynamic: part.dynamic } : {}
282
+ };
283
+ }
284
+ case "tool-input-delta": {
285
+ return {
286
+ type: "tool-input-delta",
287
+ toolCallId: part.id,
288
+ inputTextDelta: part.delta
289
+ };
290
+ }
291
+ case "tool-call": {
292
+ return {
293
+ type: "tool-input-available",
294
+ toolCallId: part.toolCallId,
295
+ toolName: part.toolName,
296
+ input: part.input,
297
+ ...part.providerExecuted != null ? { providerExecuted: part.providerExecuted } : {},
298
+ ...part.providerMetadata != null ? { providerMetadata: part.providerMetadata } : {},
299
+ ...part.dynamic != null ? { dynamic: part.dynamic } : {}
300
+ };
301
+ }
302
+ case "tool-result": {
303
+ return {
304
+ type: "tool-output-available",
305
+ toolCallId: part.toolCallId,
306
+ output: part.output,
307
+ ...part.providerExecuted != null ? { providerExecuted: part.providerExecuted } : {},
308
+ ...part.dynamic != null ? { dynamic: part.dynamic } : {}
309
+ };
310
+ }
311
+ case "tool-output": {
312
+ if (part.output.from === "AGENT") {
313
+ return {
314
+ type: "tool-agent",
315
+ toolCallId: part.toolCallId,
316
+ payload: part.output
317
+ };
318
+ } else if (part.output.from === "WORKFLOW") {
319
+ return {
320
+ type: "tool-workflow",
321
+ toolCallId: part.toolCallId,
322
+ payload: part.output
323
+ };
324
+ } else if (part.output.from === "NETWORK") {
325
+ return {
326
+ type: "tool-network",
327
+ toolCallId: part.toolCallId,
328
+ payload: part.output
329
+ };
330
+ }
331
+ return;
332
+ }
333
+ case "tool-error": {
334
+ return {
335
+ type: "tool-output-error",
336
+ toolCallId: part.toolCallId,
337
+ errorText: onError(part.error),
338
+ ...part.providerExecuted != null ? { providerExecuted: part.providerExecuted } : {},
339
+ ...part.dynamic != null ? { dynamic: part.dynamic } : {}
340
+ };
341
+ }
342
+ case "error": {
343
+ return {
344
+ type: "error",
345
+ errorText: onError(part.error)
346
+ };
347
+ }
348
+ case "start-step": {
349
+ return { type: "start-step" };
350
+ }
351
+ case "finish-step": {
352
+ return { type: "finish-step" };
353
+ }
354
+ case "start": {
355
+ {
356
+ return {
357
+ type: "start",
358
+ ...messageMetadataValue != null ? { messageMetadata: messageMetadataValue } : {},
359
+ ...responseMessageId != null ? { messageId: responseMessageId } : {}
360
+ };
361
+ }
362
+ }
363
+ case "finish": {
364
+ {
365
+ return {
366
+ type: "finish",
367
+ ...messageMetadataValue != null ? { messageMetadata: messageMetadataValue } : {}
368
+ };
369
+ }
370
+ }
371
+ case "abort": {
372
+ return part;
373
+ }
374
+ case "tool-input-end": {
375
+ return;
376
+ }
377
+ case "raw": {
378
+ return;
379
+ }
380
+ default: {
381
+ const exhaustiveCheck = partType;
382
+ throw new Error(`Unknown chunk type: ${exhaustiveCheck}`);
383
+ }
384
+ }
385
+ }
386
+
387
+ // src/transformers.ts
388
+ function WorkflowStreamToAISDKTransformer() {
389
+ const bufferedWorkflows = /* @__PURE__ */ new Map();
390
+ return new TransformStream({
391
+ start(controller) {
392
+ controller.enqueue({
393
+ data: JSON.stringify({
394
+ type: "start",
395
+ messageId: "1"
396
+ })
397
+ });
398
+ },
399
+ flush(controller) {
400
+ controller.enqueue({
401
+ data: JSON.stringify({
402
+ type: "finish"
403
+ })
404
+ });
405
+ controller.enqueue({
406
+ data: "[DONE]"
407
+ });
408
+ },
409
+ transform(chunk, controller) {
410
+ const transformed = transformWorkflow(chunk, bufferedWorkflows);
411
+ if (transformed) controller.enqueue(transformed);
412
+ }
413
+ });
414
+ }
415
+ function AgentStreamToAISDKTransformer() {
416
+ let bufferedSteps = /* @__PURE__ */ new Map();
417
+ return new TransformStream({
418
+ transform(chunk, controller) {
419
+ const part = convertMastraChunkToAISDKv5({ chunk, mode: "stream" });
420
+ const transformedChunk = convertFullStreamChunkToUIMessageStream({
421
+ part,
422
+ sendReasoning: false,
423
+ sendSources: false,
424
+ sendStart: true,
425
+ sendFinish: true,
426
+ responseMessageId: chunk.runId,
427
+ onError() {
428
+ return "Error";
429
+ }
430
+ });
431
+ if (transformedChunk) {
432
+ if (transformedChunk.type === "tool-agent") {
433
+ const payload = transformedChunk.payload;
434
+ const agentTransformed = transformAgent(payload, bufferedSteps);
435
+ if (agentTransformed) controller.enqueue(agentTransformed);
436
+ } else if (transformedChunk.type === "tool-workflow") {
437
+ const payload = transformedChunk.payload;
438
+ const workflowChunk = transformWorkflow(payload, bufferedSteps);
439
+ if (workflowChunk) controller.enqueue(workflowChunk);
440
+ } else if (transformedChunk.type === "tool-network") {
441
+ const payload = transformedChunk.payload;
442
+ const networkChunk = transformNetwork(payload, bufferedSteps);
443
+ if (networkChunk) controller.enqueue(networkChunk);
444
+ } else {
445
+ controller.enqueue(transformedChunk);
446
+ }
447
+ }
448
+ }
449
+ });
450
+ }
451
+ function transformAgent(payload, bufferedSteps) {
452
+ let hasChanged = false;
453
+ switch (payload.type) {
454
+ case "start":
455
+ bufferedSteps.set(payload.runId, {
456
+ id: payload.payload.id,
457
+ object: null,
458
+ finishReason: null,
459
+ usage: null,
460
+ warnings: [],
461
+ text: "",
462
+ reasoning: [],
463
+ sources: [],
464
+ files: [],
465
+ toolCalls: [],
466
+ toolResults: [],
467
+ request: {},
468
+ response: {
469
+ id: "",
470
+ timestamp: /* @__PURE__ */ new Date(),
471
+ modelId: "",
472
+ messages: []
473
+ },
474
+ providerMetadata: void 0,
475
+ steps: [],
476
+ status: "running"
477
+ });
478
+ hasChanged = true;
479
+ break;
480
+ case "finish":
481
+ bufferedSteps.set(payload.runId, {
482
+ ...bufferedSteps.get(payload.runId),
483
+ finishReason: payload.payload.stepResult.reason,
484
+ usage: payload.payload?.output?.usage,
485
+ warnings: payload.payload?.stepResult?.warnings,
486
+ steps: bufferedSteps.get(payload.runId).steps,
487
+ status: "finished"
488
+ });
489
+ hasChanged = true;
490
+ break;
491
+ case "text-delta":
492
+ const prevData = bufferedSteps.get(payload.runId);
493
+ bufferedSteps.set(payload.runId, {
494
+ ...prevData,
495
+ text: `${prevData.text}${payload.payload.text}`
496
+ });
497
+ hasChanged = true;
498
+ break;
499
+ case "reasoning-delta":
500
+ bufferedSteps.set(payload.runId, {
501
+ ...bufferedSteps.get(payload.runId),
502
+ reasoning: [...bufferedSteps.get(payload.runId).reasoning, payload.payload.text]
503
+ });
504
+ hasChanged = true;
505
+ break;
506
+ case "source":
507
+ bufferedSteps.set(payload.runId, {
508
+ ...bufferedSteps.get(payload.runId),
509
+ sources: [...bufferedSteps.get(payload.runId).sources, payload.payload]
510
+ });
511
+ hasChanged = true;
512
+ break;
513
+ case "file":
514
+ bufferedSteps.set(payload.runId, {
515
+ ...bufferedSteps.get(payload.runId),
516
+ files: [...bufferedSteps.get(payload.runId).files, payload.payload]
517
+ });
518
+ hasChanged = true;
519
+ break;
520
+ case "tool-call":
521
+ bufferedSteps.set(payload.runId, {
522
+ ...bufferedSteps.get(payload.runId),
523
+ toolCalls: [...bufferedSteps.get(payload.runId).toolCalls, payload.payload]
524
+ });
525
+ hasChanged = true;
526
+ break;
527
+ case "tool-result":
528
+ bufferedSteps.set(payload.runId, {
529
+ ...bufferedSteps.get(payload.runId),
530
+ toolResults: [...bufferedSteps.get(payload.runId).toolResults, payload.payload]
531
+ });
532
+ hasChanged = true;
533
+ break;
534
+ case "object-result":
535
+ bufferedSteps.set(payload.runId, {
536
+ ...bufferedSteps.get(payload.runId),
537
+ object: payload.object
538
+ });
539
+ hasChanged = true;
540
+ break;
541
+ case "object":
542
+ bufferedSteps.set(payload.runId, {
543
+ ...bufferedSteps.get(payload.runId),
544
+ object: payload.object
545
+ });
546
+ hasChanged = true;
547
+ break;
548
+ case "step-finish":
549
+ const currentRun = bufferedSteps.get(payload.runId);
550
+ const stepResult = {
551
+ ...bufferedSteps.get(payload.runId),
552
+ stepType: currentRun.steps.length === 0 ? "initial" : "tool-result",
553
+ reasoningText: bufferedSteps.get(payload.runId).reasoning.join(""),
554
+ staticToolCalls: bufferedSteps.get(payload.runId).toolCalls.filter((part) => part.type === "tool-call" && part.payload?.dynamic === false),
555
+ dynamicToolCalls: bufferedSteps.get(payload.runId).toolCalls.filter((part) => part.type === "tool-call" && part.payload?.dynamic === true),
556
+ staticToolResults: bufferedSteps.get(payload.runId).toolResults.filter((part) => part.type === "tool-result" && part.payload?.dynamic === false),
557
+ dynamicToolResults: bufferedSteps.get(payload.runId).toolResults.filter((part) => part.type === "tool-result" && part.payload?.dynamic === true),
558
+ finishReason: payload.payload.stepResult.reason,
559
+ usage: payload.payload.output.usage,
560
+ warnings: payload.payload.stepResult.warnings || [],
561
+ response: {
562
+ id: payload.payload.id || "",
563
+ timestamp: payload.payload.metadata?.timestamp || /* @__PURE__ */ new Date(),
564
+ modelId: payload.payload.metadata?.modelId || payload.payload.metadata?.model || "",
565
+ ...bufferedSteps.get(payload.runId).response,
566
+ messages: bufferedSteps.get(payload.runId).response.messages || []
567
+ }
568
+ };
569
+ bufferedSteps.set(payload.runId, {
570
+ ...bufferedSteps.get(payload.runId),
571
+ usage: payload.payload.output.usage,
572
+ warnings: payload.payload.stepResult.warnings || [],
573
+ steps: [...bufferedSteps.get(payload.runId).steps, stepResult]
574
+ });
575
+ hasChanged = true;
576
+ break;
577
+ }
578
+ if (hasChanged) {
579
+ return {
580
+ type: "data-tool-agent",
581
+ id: payload.runId,
582
+ data: bufferedSteps.get(payload.runId)
583
+ };
584
+ }
585
+ return null;
586
+ }
587
+ function transformWorkflow(payload, bufferedWorkflows) {
588
+ switch (payload.type) {
589
+ case "workflow-start":
590
+ bufferedWorkflows.set(payload.runId, {
591
+ name: payload.payload.workflowId,
592
+ steps: {}
593
+ });
594
+ return {
595
+ type: "data-workflow",
596
+ id: payload.runId,
597
+ data: {
598
+ name: bufferedWorkflows.get(payload.runId).name,
599
+ status: "running",
600
+ steps: bufferedWorkflows.get(payload.runId).steps,
601
+ output: null
602
+ }
603
+ };
604
+ case "workflow-step-start": {
605
+ const current = bufferedWorkflows.get(payload.runId) || { name: "", steps: {} };
606
+ current.steps[payload.payload.id] = {
607
+ name: payload.payload.id,
608
+ status: payload.payload.status,
609
+ input: payload.payload.payload ?? null,
610
+ output: null
611
+ };
612
+ bufferedWorkflows.set(payload.runId, current);
613
+ return {
614
+ type: "data-workflow",
615
+ id: payload.runId,
616
+ data: {
617
+ name: current.name,
618
+ status: "running",
619
+ steps: current.steps,
620
+ output: null
621
+ }
622
+ };
623
+ }
624
+ case "workflow-step-result": {
625
+ const current = bufferedWorkflows.get(payload.runId);
626
+ if (!current) return null;
627
+ current.steps[payload.payload.id] = {
628
+ ...current.steps[payload.payload.id],
629
+ status: payload.payload.status,
630
+ output: payload.payload.output ?? null
631
+ };
632
+ return {
633
+ type: "data-workflow",
634
+ id: payload.runId,
635
+ data: {
636
+ name: current.name,
637
+ status: "running",
638
+ steps: current.steps,
639
+ output: null
640
+ }
641
+ };
642
+ }
643
+ case "workflow-finish": {
644
+ const current = bufferedWorkflows.get(payload.runId);
645
+ if (!current) return null;
646
+ return {
647
+ type: "data-workflow",
648
+ id: payload.runId,
649
+ data: {
650
+ name: current.name,
651
+ steps: current.steps,
652
+ output: payload.payload.output ?? null,
653
+ status: payload.payload.workflowStatus
654
+ }
655
+ };
656
+ }
657
+ default:
658
+ return null;
659
+ }
660
+ }
661
+ function transformNetwork(payload, bufferedNetworks) {
662
+ switch (payload.type) {
663
+ case "routing-agent-start": {
664
+ bufferedNetworks.set(payload.payload.runId, {
665
+ name: payload.payload.agentId,
666
+ steps: []
667
+ });
668
+ return {
669
+ type: "data-network",
670
+ id: payload.payload.runId,
671
+ data: {
672
+ name: bufferedNetworks.get(payload.payload.runId).name,
673
+ status: "running",
674
+ steps: bufferedNetworks.get(payload.payload.runId).steps,
675
+ output: null
676
+ }
677
+ };
678
+ }
679
+ case "agent-execution-start": {
680
+ const current = bufferedNetworks.get(payload.payload.runId) || { name: "", steps: [] };
681
+ current.steps.push({
682
+ name: payload.payload.agentId,
683
+ status: "running",
684
+ input: payload.payload.args || null,
685
+ output: null
686
+ });
687
+ bufferedNetworks.set(payload.payload.runId, current);
688
+ return {
689
+ type: "data-network",
690
+ id: payload.payload.runId,
691
+ data: {
692
+ name: current.name,
693
+ status: "running",
694
+ steps: current.steps,
695
+ output: null
696
+ }
697
+ };
698
+ }
699
+ case "workflow-execution-start": {
700
+ const current = bufferedNetworks.get(payload.payload.runId) || { name: "", steps: [] };
701
+ current.steps.push({
702
+ name: payload.payload.name,
703
+ status: "running",
704
+ input: payload.payload.args || null,
705
+ output: null
706
+ });
707
+ bufferedNetworks.set(payload.payload.runId, current);
708
+ return {
709
+ type: "data-network",
710
+ id: payload.payload.runId,
711
+ data: {
712
+ name: current.name,
713
+ status: "running",
714
+ steps: current.steps,
715
+ output: null
716
+ }
717
+ };
718
+ }
719
+ case "tool-execution-start": {
720
+ const current = bufferedNetworks.get(payload.payload.runId) || { name: "", steps: [] };
721
+ current.steps.push({
722
+ name: payload.payload.args?.toolName,
723
+ status: "running",
724
+ input: payload.payload.args?.args || null,
725
+ output: null
726
+ });
727
+ bufferedNetworks.set(payload.payload.runId, current);
728
+ return {
729
+ type: "data-network",
730
+ id: payload.payload.runId,
731
+ data: {
732
+ name: current.name,
733
+ status: "running",
734
+ steps: current.steps,
735
+ output: null
736
+ }
737
+ };
738
+ }
739
+ case "agent-execution-end":
740
+ case "tool-execution-end": {
741
+ const current = bufferedNetworks.get(payload.runId);
742
+ if (!current) return null;
743
+ return {
744
+ type: "data-network",
745
+ id: payload.runId,
746
+ data: {
747
+ name: current.name,
748
+ status: "running",
749
+ steps: current.steps,
750
+ output: null
751
+ }
752
+ };
753
+ }
754
+ case "workflow-execution-end": {
755
+ const current = bufferedNetworks.get(payload.runId);
756
+ if (!current) return null;
757
+ return {
758
+ type: "data-network",
759
+ id: payload.runId,
760
+ data: {
761
+ name: current.name,
762
+ status: "running",
763
+ steps: current.steps,
764
+ output: null
765
+ }
766
+ };
767
+ }
768
+ case "routing-agent-end": {
769
+ const current = bufferedNetworks.get(payload.payload.runId);
770
+ if (!current) return null;
771
+ return {
772
+ type: "data-network",
773
+ id: payload.payload.runId,
774
+ data: {
775
+ name: current.name,
776
+ status: "finished",
777
+ steps: current.steps,
778
+ output: payload.payload?.result ?? null
779
+ }
780
+ };
781
+ }
782
+ case "network-execution-event-step-finish": {
783
+ const current = bufferedNetworks.get(payload.payload.runId);
784
+ if (!current) return null;
785
+ return {
786
+ type: "data-network",
787
+ id: payload.payload.runId,
788
+ data: {
789
+ name: current.name,
790
+ status: "finished",
791
+ steps: current.steps,
792
+ output: payload.payload?.result ?? null
793
+ }
794
+ };
795
+ }
796
+ case "network-execution-event-finish": {
797
+ const current = bufferedNetworks.get(payload.runId);
798
+ if (!current) return null;
799
+ return {
800
+ type: "data-network",
801
+ id: payload.runId,
802
+ data: {
803
+ name: current.name,
804
+ status: "finished",
805
+ steps: current.steps,
806
+ output: payload.payload?.result ?? null
807
+ }
808
+ };
809
+ }
810
+ default:
811
+ return null;
812
+ }
813
+ }
814
+
815
+ // src/to-ai-sdk-format.ts
816
+ function toAISdkFormat(stream) {
817
+ return stream.fullStream.pipeThrough(AgentStreamToAISDKTransformer());
818
+ }
819
+
820
+ // src/chat-route.ts
4
821
  function chatRoute({
5
822
  path = "/chat/:agentId",
6
823
  agent,
@@ -122,16 +939,24 @@ function chatRoute({
122
939
  if (!agentObj) {
123
940
  throw new Error(`Agent ${agentToUse} not found`);
124
941
  }
125
- const result = await agentObj.streamVNext(messages, {
942
+ const result = await agentObj.stream(messages, {
126
943
  ...defaultOptions,
127
- ...rest,
128
- format: "aisdk"
944
+ ...rest
945
+ });
946
+ const uiMessageStream = createUIMessageStream({
947
+ execute: async ({ writer }) => {
948
+ for await (const part of toAISdkFormat(result)) {
949
+ writer.write(part);
950
+ }
951
+ }
952
+ });
953
+ return createUIMessageStreamResponse({
954
+ stream: uiMessageStream
129
955
  });
130
- return result.toUIMessageStreamResponse();
131
956
  }
132
957
  });
133
958
  }
134
959
 
135
- export { chatRoute };
960
+ export { WorkflowStreamToAISDKTransformer, chatRoute, toAISdkFormat };
136
961
  //# sourceMappingURL=index.js.map
137
962
  //# sourceMappingURL=index.js.map