@voltagent/core 0.1.37 → 0.1.38

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.d.ts CHANGED
@@ -2956,7 +2956,7 @@ declare class Agent<TProvider extends {
2956
2956
  */
2957
2957
  private _endOtelToolSpan;
2958
2958
  /**
2959
- * Create an enhanced fullStream that includes SubAgent events
2959
+ * Create an enhanced fullStream with real-time SubAgent event injection
2960
2960
  */
2961
2961
  private createEnhancedFullStream;
2962
2962
  /**
@@ -3335,34 +3335,6 @@ declare const updateSinglePackage: (packageName: string, packagePath?: string) =
3335
3335
  declare function safeJsonParse(value: string | null | undefined): any;
3336
3336
  declare function serializeValueForDebug(value: unknown): unknown;
3337
3337
 
3338
- /**
3339
- * Utility for merging multiple async streams with event queue integration
3340
- */
3341
- interface StreamMergerOptions {
3342
- /**
3343
- * Polling interval for checking events (in milliseconds)
3344
- * Default: 16ms (~60fps for smooth UI updates)
3345
- */
3346
- pollingInterval?: number;
3347
- /**
3348
- * Post-stream polling interval when main stream is finished (in milliseconds)
3349
- * Default: 10ms
3350
- */
3351
- postStreamInterval?: number;
3352
- }
3353
- /**
3354
- * Creates an enhanced stream that merges an original async iterable with events
3355
- * from a shared queue, ensuring chronological order and smooth UI updates.
3356
- *
3357
- * @param originalStream - The main stream to merge with
3358
- * @param eventsQueue - Shared array that other sources push events to
3359
- * @param options - Configuration options for polling intervals
3360
- * @returns Enhanced async iterable that yields events from both sources
3361
- */
3362
- declare function createMergedStream<T>(originalStream: AsyncIterable<T>, eventsQueue: T[], options?: StreamMergerOptions): AsyncIterable<T>;
3363
- /**
3364
- * Helper type for SubAgent events that can be merged into a main stream
3365
- */
3366
3338
  interface SubAgentEvent {
3367
3339
  type: string;
3368
3340
  data: any;
@@ -3370,6 +3342,23 @@ interface SubAgentEvent {
3370
3342
  subAgentId: string;
3371
3343
  subAgentName: string;
3372
3344
  }
3345
+ interface StreamEventForwarderOptions {
3346
+ forwarder?: (event: any) => Promise<void>;
3347
+ filterTypes?: string[];
3348
+ addSubAgentPrefix?: boolean;
3349
+ }
3350
+ /**
3351
+ * Forwards SubAgent events to a stream with optional filtering and prefixing
3352
+ * @param event - The SubAgent event to forward
3353
+ * @param options - Configuration options for forwarding
3354
+ */
3355
+ declare function streamEventForwarder(event: SubAgentEvent, options?: StreamEventForwarderOptions): Promise<void>;
3356
+ /**
3357
+ * Creates a configured streamEventForwarder function
3358
+ * @param options - Configuration options
3359
+ * @returns A configured forwarder function
3360
+ */
3361
+ declare function createStreamEventForwarder(options?: StreamEventForwarderOptions): (event: SubAgentEvent) => Promise<void>;
3373
3362
 
3374
3363
  /**
3375
3364
  * Creates an AgentTool from a retriever, allowing it to be used as a tool in an agent.
@@ -3972,4 +3961,4 @@ declare class VoltAgent {
3972
3961
  shutdownTelemetry(): Promise<void>;
3973
3962
  }
3974
3963
 
3975
- export { Agent, AgentErrorEvent, AgentHistoryEntry, AgentHookOnEnd, AgentHookOnHandoff, AgentHookOnStart, AgentHookOnToolEnd, AgentHookOnToolStart, AgentHooks, AgentOptions, AgentRegistry, AgentResponse, AgentStartEvent, AgentStartEventMetadata, AgentSuccessEvent, AgentSuccessEventMetadata, AgentTool, AllowedVariableValue, AnyToolConfig, AsyncIterableStream, BaseEventMetadata, BaseLLMOptions, BaseMessage, BaseRetriever, BaseTimelineEvent, BaseTool, BaseToolCall, ClientInfo, Conversation, ConversationQueryOptions, CreateConversationInput, CreateReasoningToolsOptions, CustomEndpointDefinition, CustomEndpointError, CustomEndpointHandler, DEFAULT_INSTRUCTIONS, DataContent, ErrorStreamPart, EventStatus, ExtractVariableNames, FEW_SHOT_EXAMPLES, FilePart, FinishStreamPart, GenerateObjectOptions, GenerateTextOptions, HTTPServerConfig, HistoryStatus, HttpMethod, ImagePart, InMemoryStorage, InferGenerateObjectResponse, InferGenerateTextResponse, InferMessage, InferModel, InferProviderParams, InferStreamResponse, InferTool, LLMProvider, LibSQLStorage, MCPClient, MCPClientConfig, MCPClientEvents, MCPConfiguration, MCPOptions, MCPServerConfig, MCPToolCall, MCPToolResult, Memory, MemoryEventMetadata, MemoryManager, MemoryMessage, MemoryOptions, MemoryReadErrorEvent, MemoryReadStartEvent, MemoryReadSuccessEvent, MemoryWriteErrorEvent, MemoryWriteStartEvent, MemoryWriteSuccessEvent, MessageContent, MessageFilterOptions, MessageRole, ModelToolCall, NewTimelineEvent, NextAction, NodeType, OnEndHookArgs, OnHandoffHookArgs, OnStartHookArgs, OnToolEndHookArgs, OnToolStartHookArgs, OperationContext, PackageUpdateInfo, PromptCreator, PromptTemplate, ProviderObjectResponse, ProviderObjectStreamResponse, ProviderParams, ProviderResponse, ProviderTextResponse, ProviderTextStreamResponse, ReadableStreamType, ReasoningStep, ReasoningStepSchema, ReasoningStreamPart, ReasoningToolExecuteOptions, RetrieveOptions, Retriever, RetrieverErrorEvent, RetrieverOptions, RetrieverStartEvent, RetrieverSuccessEvent, SSEServerConfig, ServerOptions, SourceStreamPart, StandardEventData, StandardTimelineEvent, StdioServerConfig, StepChunkCallback, StepFinishCallback, StepWithContent, StreamMergerOptions, StreamObjectFinishResult, StreamObjectOnFinishCallback, StreamObjectOptions, StreamPart, StreamTextFinishResult, StreamTextOnFinishCallback, StreamTextOptions, StreamableHTTPServerConfig, SubAgentEvent, TemplateVariables, TextDeltaStreamPart, TextPart, TimelineEventCoreLevel, TimelineEventCoreStatus, TimelineEventCoreType, Tool, ToolCall, ToolCallStreamPart, ToolErrorEvent, ToolErrorInfo, ToolExecuteOptions, ToolExecutionContext, ToolManager, ToolOptions, ToolResultStreamPart, ToolSchema, ToolStartEvent, ToolStatus, ToolStatusInfo, ToolSuccessEvent, Toolkit, ToolsetMap, ToolsetWithTools, TransportError, Usage, UsageInfo, Voice, VoiceEventData, VoiceEventType, VoiceMetadata, VoiceOptions, VoltAgent, VoltAgentError, VoltAgentExporter, VoltAgentExporterOptions, VoltAgentOptions, checkForUpdates, createAsyncIterableStream, createHooks, createMergedStream, createNodeId, createPrompt, createReasoningTools, createRetrieverTool, createTool, createToolkit, VoltAgent as default, getNodeTypeFromNodeId, registerCustomEndpoint, registerCustomEndpoints, safeJsonParse, serializeValueForDebug, tool, updateAllPackages, updateSinglePackage, zodSchemaToJsonUI };
3964
+ export { Agent, AgentErrorEvent, AgentHistoryEntry, AgentHookOnEnd, AgentHookOnHandoff, AgentHookOnStart, AgentHookOnToolEnd, AgentHookOnToolStart, AgentHooks, AgentOptions, AgentRegistry, AgentResponse, AgentStartEvent, AgentStartEventMetadata, AgentSuccessEvent, AgentSuccessEventMetadata, AgentTool, AllowedVariableValue, AnyToolConfig, AsyncIterableStream, BaseEventMetadata, BaseLLMOptions, BaseMessage, BaseRetriever, BaseTimelineEvent, BaseTool, BaseToolCall, ClientInfo, Conversation, ConversationQueryOptions, CreateConversationInput, CreateReasoningToolsOptions, CustomEndpointDefinition, CustomEndpointError, CustomEndpointHandler, DEFAULT_INSTRUCTIONS, DataContent, ErrorStreamPart, EventStatus, ExtractVariableNames, FEW_SHOT_EXAMPLES, FilePart, FinishStreamPart, GenerateObjectOptions, GenerateTextOptions, HTTPServerConfig, HistoryStatus, HttpMethod, ImagePart, InMemoryStorage, InferGenerateObjectResponse, InferGenerateTextResponse, InferMessage, InferModel, InferProviderParams, InferStreamResponse, InferTool, LLMProvider, LibSQLStorage, MCPClient, MCPClientConfig, MCPClientEvents, MCPConfiguration, MCPOptions, MCPServerConfig, MCPToolCall, MCPToolResult, Memory, MemoryEventMetadata, MemoryManager, MemoryMessage, MemoryOptions, MemoryReadErrorEvent, MemoryReadStartEvent, MemoryReadSuccessEvent, MemoryWriteErrorEvent, MemoryWriteStartEvent, MemoryWriteSuccessEvent, MessageContent, MessageFilterOptions, MessageRole, ModelToolCall, NewTimelineEvent, NextAction, NodeType, OnEndHookArgs, OnHandoffHookArgs, OnStartHookArgs, OnToolEndHookArgs, OnToolStartHookArgs, OperationContext, PackageUpdateInfo, PromptCreator, PromptTemplate, ProviderObjectResponse, ProviderObjectStreamResponse, ProviderParams, ProviderResponse, ProviderTextResponse, ProviderTextStreamResponse, ReadableStreamType, ReasoningStep, ReasoningStepSchema, ReasoningStreamPart, ReasoningToolExecuteOptions, RetrieveOptions, Retriever, RetrieverErrorEvent, RetrieverOptions, RetrieverStartEvent, RetrieverSuccessEvent, SSEServerConfig, ServerOptions, SourceStreamPart, StandardEventData, StandardTimelineEvent, StdioServerConfig, StepChunkCallback, StepFinishCallback, StepWithContent, StreamEventForwarderOptions, StreamObjectFinishResult, StreamObjectOnFinishCallback, StreamObjectOptions, StreamPart, StreamTextFinishResult, StreamTextOnFinishCallback, StreamTextOptions, StreamableHTTPServerConfig, SubAgentEvent, TemplateVariables, TextDeltaStreamPart, TextPart, TimelineEventCoreLevel, TimelineEventCoreStatus, TimelineEventCoreType, Tool, ToolCall, ToolCallStreamPart, ToolErrorEvent, ToolErrorInfo, ToolExecuteOptions, ToolExecutionContext, ToolManager, ToolOptions, ToolResultStreamPart, ToolSchema, ToolStartEvent, ToolStatus, ToolStatusInfo, ToolSuccessEvent, Toolkit, ToolsetMap, ToolsetWithTools, TransportError, Usage, UsageInfo, Voice, VoiceEventData, VoiceEventType, VoiceMetadata, VoiceOptions, VoltAgent, VoltAgentError, VoltAgentExporter, VoltAgentExporterOptions, VoltAgentOptions, checkForUpdates, createAsyncIterableStream, createHooks, createNodeId, createPrompt, createReasoningTools, createRetrieverTool, createStreamEventForwarder, createTool, createToolkit, VoltAgent as default, getNodeTypeFromNodeId, registerCustomEndpoint, registerCustomEndpoints, safeJsonParse, serializeValueForDebug, streamEventForwarder, tool, updateAllPackages, updateSinglePackage, zodSchemaToJsonUI };
package/dist/index.js CHANGED
@@ -57,11 +57,11 @@ __export(src_exports, {
57
57
  checkForUpdates: () => checkForUpdates,
58
58
  createAsyncIterableStream: () => createAsyncIterableStream,
59
59
  createHooks: () => createHooks,
60
- createMergedStream: () => createMergedStream,
61
60
  createNodeId: () => createNodeId,
62
61
  createPrompt: () => createPrompt,
63
62
  createReasoningTools: () => createReasoningTools,
64
63
  createRetrieverTool: () => createRetrieverTool,
64
+ createStreamEventForwarder: () => createStreamEventForwarder,
65
65
  createTool: () => createTool,
66
66
  createToolkit: () => createToolkit,
67
67
  default: () => src_default,
@@ -70,6 +70,7 @@ __export(src_exports, {
70
70
  registerCustomEndpoints: () => registerCustomEndpoints,
71
71
  safeJsonParse: () => safeJsonParse,
72
72
  serializeValueForDebug: () => serializeValueForDebug,
73
+ streamEventForwarder: () => streamEventForwarder,
73
74
  tool: () => tool,
74
75
  updateAllPackages: () => updateAllPackages,
75
76
  updateSinglePackage: () => updateSinglePackage,
@@ -1656,15 +1657,6 @@ app.openapi(streamRoute, async (c) => {
1656
1657
  }
1657
1658
  }
1658
1659
  if (!streamClosed) {
1659
- const completionData = {
1660
- done: true,
1661
- timestamp: (/* @__PURE__ */ new Date()).toISOString(),
1662
- type: "completion"
1663
- };
1664
- const completionMessage = `data: ${JSON.stringify(completionData)}
1665
-
1666
- `;
1667
- safeEnqueue(completionMessage);
1668
1660
  safeClose();
1669
1661
  }
1670
1662
  } catch (iterationError) {
@@ -3074,46 +3066,74 @@ function serializeValueForDebug(value) {
3074
3066
  }
3075
3067
  __name(serializeValueForDebug, "serializeValueForDebug");
3076
3068
 
3077
- // src/utils/stream-merger/index.ts
3078
- async function* createMergedStream(originalStream, eventsQueue, options = {}) {
3069
+ // src/utils/stream-event-forwarder/index.ts
3070
+ async function streamEventForwarder(event, options = {}) {
3079
3071
  const {
3080
- pollingInterval = 16,
3081
- // ~60fps
3082
- postStreamInterval = 10
3072
+ forwarder,
3073
+ filterTypes = ["text", "reasoning", "source"],
3074
+ addSubAgentPrefix = true
3083
3075
  } = options;
3084
- const originalIterator = originalStream[Symbol.asyncIterator]();
3085
- let originalStreamPromise = originalIterator.next();
3086
- let streamFinished = false;
3087
- let processedEventCount = 0;
3088
- while (true) {
3089
- while (processedEventCount < eventsQueue.length) {
3090
- const event = eventsQueue[processedEventCount];
3091
- processedEventCount++;
3092
- yield event;
3093
- }
3094
- if (!streamFinished) {
3095
- const timeoutPromise = new Promise(
3096
- (resolve) => setTimeout(() => resolve("timeout"), pollingInterval)
3076
+ try {
3077
+ if (!event || typeof event !== "object") {
3078
+ dev_logger_default.warn("[StreamEventForwarder] Invalid event structure:", event);
3079
+ return;
3080
+ }
3081
+ if (!event.type || !event.subAgentId || !event.subAgentName) {
3082
+ dev_logger_default.warn("[StreamEventForwarder] Missing required event fields:", {
3083
+ type: event.type,
3084
+ subAgentId: event.subAgentId,
3085
+ subAgentName: event.subAgentName
3086
+ });
3087
+ return;
3088
+ }
3089
+ if (filterTypes.includes(event.type)) {
3090
+ dev_logger_default.info(
3091
+ "[StreamEventForwarder] Filtered out",
3092
+ event.type,
3093
+ "event from",
3094
+ event.subAgentName
3097
3095
  );
3098
- const result = await Promise.race([originalStreamPromise, timeoutPromise]);
3099
- if (result === "timeout") {
3100
- continue;
3101
- }
3102
- if (result.done) {
3103
- streamFinished = true;
3104
- continue;
3105
- }
3106
- yield result.value;
3107
- originalStreamPromise = originalIterator.next();
3108
- } else {
3109
- if (processedEventCount >= eventsQueue.length) {
3110
- break;
3096
+ return;
3097
+ }
3098
+ if (!forwarder) {
3099
+ return;
3100
+ }
3101
+ const prefixedData = {
3102
+ ...event.data,
3103
+ timestamp: event.timestamp,
3104
+ type: event.type,
3105
+ subAgentId: event.subAgentId,
3106
+ subAgentName: event.subAgentName
3107
+ };
3108
+ if (addSubAgentPrefix) {
3109
+ if (event.type === "tool-call" && prefixedData.toolCall) {
3110
+ prefixedData.toolCall = {
3111
+ ...prefixedData.toolCall,
3112
+ toolName: `${event.subAgentName}: ${prefixedData.toolCall.toolName}`
3113
+ };
3114
+ } else if (event.type === "tool-result" && prefixedData.toolResult) {
3115
+ prefixedData.toolResult = {
3116
+ ...prefixedData.toolResult,
3117
+ toolName: `${event.subAgentName}: ${prefixedData.toolResult.toolName}`
3118
+ };
3111
3119
  }
3112
- await new Promise((resolve) => setTimeout(resolve, postStreamInterval));
3113
3120
  }
3121
+ await forwarder(prefixedData);
3122
+ dev_logger_default.info(
3123
+ "[StreamEventForwarder] Forwarded",
3124
+ event.type,
3125
+ "event from",
3126
+ event.subAgentName
3127
+ );
3128
+ } catch (error) {
3129
+ dev_logger_default.error("[StreamEventForwarder] Error forwarding event:", error);
3114
3130
  }
3115
3131
  }
3116
- __name(createMergedStream, "createMergedStream");
3132
+ __name(streamEventForwarder, "streamEventForwarder");
3133
+ function createStreamEventForwarder(options = {}) {
3134
+ return (event) => streamEventForwarder(event, options);
3135
+ }
3136
+ __name(createStreamEventForwarder, "createStreamEventForwarder");
3117
3137
 
3118
3138
  // src/memory/libsql/index.ts
3119
3139
  async function debugDelay() {
@@ -7199,23 +7219,15 @@ ${context}`;
7199
7219
  });
7200
7220
  if (this.subAgentManager.hasSubAgents()) {
7201
7221
  const forwardEvent = /* @__PURE__ */ __name(async (event) => {
7202
- if (internalStreamForwarder) {
7203
- try {
7204
- dev_logger_default.info(
7205
- `[Agent ${this.id}] Received SubAgent event: ${event.type} from ${event.subAgentName}`
7206
- );
7207
- const prefixedData = {
7208
- ...event.data,
7209
- timestamp: event.timestamp,
7210
- type: event.type,
7211
- subAgentId: event.subAgentId,
7212
- subAgentName: event.subAgentName
7213
- };
7214
- await internalStreamForwarder(prefixedData);
7215
- } catch (error) {
7216
- dev_logger_default.error(`Error forwarding SubAgent event: ${error}`);
7217
- }
7218
- }
7222
+ dev_logger_default.info(
7223
+ `[Agent ${this.id}] Received SubAgent event: ${event.type} from ${event.subAgentName}`
7224
+ );
7225
+ await streamEventForwarder(event, {
7226
+ forwarder: internalStreamForwarder,
7227
+ filterTypes: [],
7228
+ // Don't filter any events in this context
7229
+ addSubAgentPrefix: true
7230
+ });
7219
7231
  }, "forwardEvent");
7220
7232
  const delegateTool = this.subAgentManager.createDelegateTool({
7221
7233
  sourceAgent: this,
@@ -7394,61 +7406,45 @@ ${context}`;
7394
7406
  }
7395
7407
  }
7396
7408
  /**
7397
- * Create an enhanced fullStream that includes SubAgent events
7409
+ * Create an enhanced fullStream with real-time SubAgent event injection
7398
7410
  */
7399
- createEnhancedFullStream(originalStream, subAgentEventsQueue) {
7400
- const processedEvents = [];
7411
+ createEnhancedFullStream(originalStream, streamController, subAgentStatus) {
7401
7412
  return {
7402
7413
  async *[Symbol.asyncIterator]() {
7403
- let lastProcessedCount = 0;
7404
- const enhancedStream = createMergedStream(originalStream, processedEvents, {
7405
- pollingInterval: 16,
7406
- // ~60fps
7407
- postStreamInterval: 10
7408
- });
7409
- for await (const event of enhancedStream) {
7410
- while (lastProcessedCount < subAgentEventsQueue.length) {
7411
- const subAgentEvent = subAgentEventsQueue[lastProcessedCount];
7412
- lastProcessedCount++;
7413
- let enhancedEvent = {
7414
- type: subAgentEvent.event.type,
7415
- subAgentId: subAgentEvent.event.subAgentId,
7416
- subAgentName: subAgentEvent.event.subAgentName,
7417
- timestamp: subAgentEvent.timestamp
7418
- };
7419
- switch (subAgentEvent.event.type) {
7420
- case "tool-call":
7421
- if (subAgentEvent.event.toolCall) {
7422
- enhancedEvent = {
7423
- ...enhancedEvent,
7424
- toolCallId: subAgentEvent.event.toolCall.toolCallId,
7425
- toolName: subAgentEvent.event.toolCall.toolName,
7426
- args: subAgentEvent.event.toolCall.args
7427
- };
7414
+ const mergedStream = new ReadableStream({
7415
+ start(controller) {
7416
+ streamController.current = controller;
7417
+ (async () => {
7418
+ try {
7419
+ for await (const chunk of originalStream) {
7420
+ controller.enqueue(chunk);
7428
7421
  }
7429
- break;
7430
- case "tool-result":
7431
- if (subAgentEvent.event.toolResult) {
7432
- enhancedEvent = {
7433
- ...enhancedEvent,
7434
- toolCallId: subAgentEvent.event.toolResult.toolCallId,
7435
- toolName: subAgentEvent.event.toolResult.toolName,
7436
- result: subAgentEvent.event.toolResult.result
7437
- };
7422
+ await new Promise((resolve) => setTimeout(resolve, 100));
7423
+ for (const [subAgentId, status] of subAgentStatus.entries()) {
7424
+ if (status.isActive && !status.isCompleted) {
7425
+ status.isCompleted = true;
7426
+ dev_logger_default.info(`[Enhanced Stream] SubAgent ${subAgentId} marked as completed`);
7427
+ }
7438
7428
  }
7439
- break;
7440
- default: {
7441
- const { subAgentId, subAgentName, type, timestamp: timestamp2, ...eventData } = subAgentEvent.event;
7442
- enhancedEvent = {
7443
- ...enhancedEvent,
7444
- ...eventData
7445
- };
7446
- break;
7429
+ controller.close();
7430
+ } catch (error) {
7431
+ controller.error(error);
7432
+ } finally {
7433
+ streamController.current = null;
7447
7434
  }
7448
- }
7449
- processedEvents.push(enhancedEvent);
7435
+ })();
7436
+ }
7437
+ });
7438
+ const reader = mergedStream.getReader();
7439
+ try {
7440
+ while (true) {
7441
+ const { done, value } = await reader.read();
7442
+ if (done)
7443
+ break;
7444
+ yield value;
7450
7445
  }
7451
- yield event;
7446
+ } finally {
7447
+ reader.releaseLock();
7452
7448
  }
7453
7449
  }
7454
7450
  };
@@ -7900,20 +7896,101 @@ ${context}`;
7900
7896
  userId,
7901
7897
  finalConversationId
7902
7898
  );
7903
- const subAgentEventsQueue = [];
7904
- const streamEventForwarder = /* @__PURE__ */ __name(async (event) => {
7905
- subAgentEventsQueue.push({
7906
- type: "subagent-event",
7907
- event,
7908
- timestamp: (/* @__PURE__ */ new Date()).toISOString()
7899
+ const subAgentStatus = /* @__PURE__ */ new Map();
7900
+ const streamController = {
7901
+ current: null
7902
+ };
7903
+ const streamEventForwarder2 = /* @__PURE__ */ __name(async (event) => {
7904
+ dev_logger_default.info("[Real-time Stream] Received SubAgent event:", {
7905
+ eventType: event.type,
7906
+ subAgentId: event.subAgentId,
7907
+ subAgentName: event.subAgentName
7909
7908
  });
7909
+ if (!subAgentStatus.has(event.subAgentId)) {
7910
+ subAgentStatus.set(event.subAgentId, { isActive: true, isCompleted: false });
7911
+ }
7912
+ if (event.type === "finish" || event.type === "error" || event.type === "text-delta" && event.data?.textDelta?.includes(".")) {
7913
+ dev_logger_default.info(
7914
+ `[Real-time Stream] Potential completion event from ${event.subAgentId}:`,
7915
+ event.type
7916
+ );
7917
+ }
7918
+ let streamEvent = {
7919
+ type: event.type,
7920
+ subAgentId: event.subAgentId,
7921
+ subAgentName: event.subAgentName,
7922
+ timestamp: event.timestamp
7923
+ };
7924
+ switch (event.type) {
7925
+ case "tool-call":
7926
+ if (event?.toolCall) {
7927
+ streamEvent = {
7928
+ ...streamEvent,
7929
+ toolCallId: event.toolCall.toolCallId,
7930
+ toolName: event.toolCall.toolName,
7931
+ args: event.toolCall.args
7932
+ };
7933
+ }
7934
+ break;
7935
+ case "tool-result":
7936
+ if (event?.toolResult) {
7937
+ streamEvent = {
7938
+ ...streamEvent,
7939
+ toolCallId: event.toolResult.toolCallId,
7940
+ toolName: event.toolResult.toolName,
7941
+ result: event.toolResult.result
7942
+ };
7943
+ }
7944
+ break;
7945
+ case "text-delta":
7946
+ if (event?.textDelta) {
7947
+ streamEvent = {
7948
+ ...streamEvent,
7949
+ textDelta: event.data.textDelta
7950
+ };
7951
+ }
7952
+ break;
7953
+ case "reasoning":
7954
+ if (event?.reasoning) {
7955
+ streamEvent = {
7956
+ ...streamEvent,
7957
+ reasoning: event.reasoning
7958
+ };
7959
+ }
7960
+ break;
7961
+ case "source":
7962
+ if (event?.source) {
7963
+ streamEvent = {
7964
+ ...streamEvent,
7965
+ source: event.source
7966
+ };
7967
+ }
7968
+ break;
7969
+ default:
7970
+ streamEvent = {
7971
+ ...streamEvent,
7972
+ ...event || {}
7973
+ };
7974
+ break;
7975
+ }
7976
+ if (streamController.current) {
7977
+ try {
7978
+ streamController.current.enqueue(streamEvent);
7979
+ dev_logger_default.info("[Real-time Stream] Event injected into stream:", {
7980
+ eventType: event.type,
7981
+ subAgentId: event.subAgentId
7982
+ });
7983
+ } catch (error) {
7984
+ dev_logger_default.error("[Real-time Stream] Failed to inject event:", error);
7985
+ }
7986
+ }
7910
7987
  }, "streamEventForwarder");
7911
7988
  const { tools, maxSteps } = this.prepareTextOptions({
7912
7989
  ...internalOptions,
7913
7990
  conversationId: finalConversationId,
7914
7991
  historyEntryId: operationContext.historyEntry.id,
7915
7992
  operationContext,
7916
- internalStreamForwarder: streamEventForwarder
7993
+ internalStreamForwarder: streamEventForwarder2
7917
7994
  // Pass the internal forwarder to tools
7918
7995
  });
7919
7996
  const response = await this.llm.streamText({
@@ -8256,7 +8333,7 @@ ${context}`;
8256
8333
  });
8257
8334
  const wrappedResponse = {
8258
8335
  ...response,
8259
- fullStream: response.fullStream ? this.createEnhancedFullStream(response.fullStream, subAgentEventsQueue) : void 0
8336
+ fullStream: response.fullStream ? this.createEnhancedFullStream(response.fullStream, streamController, subAgentStatus) : void 0
8260
8337
  };
8261
8338
  return wrappedResponse;
8262
8339
  }
@@ -10256,11 +10333,11 @@ if (typeof require !== "undefined" && typeof module !== "undefined" && require.m
10256
10333
  checkForUpdates,
10257
10334
  createAsyncIterableStream,
10258
10335
  createHooks,
10259
- createMergedStream,
10260
10336
  createNodeId,
10261
10337
  createPrompt,
10262
10338
  createReasoningTools,
10263
10339
  createRetrieverTool,
10340
+ createStreamEventForwarder,
10264
10341
  createTool,
10265
10342
  createToolkit,
10266
10343
  getNodeTypeFromNodeId,
@@ -10268,6 +10345,7 @@ if (typeof require !== "undefined" && typeof module !== "undefined" && require.m
10268
10345
  registerCustomEndpoints,
10269
10346
  safeJsonParse,
10270
10347
  serializeValueForDebug,
10348
+ streamEventForwarder,
10271
10349
  tool,
10272
10350
  updateAllPackages,
10273
10351
  updateSinglePackage,