{"version":3,"file":"stream.cjs","sources":["../../src/stream.ts"],"sourcesContent":["// src/stream.ts\nimport type { ChatOpenAIReasoningSummary } from '@langchain/openai';\nimport type { AIMessageChunk } from '@langchain/core/messages';\nimport type { ToolCall } from '@langchain/core/messages/tool';\nimport type { AgentContext } from '@/agents/AgentContext';\nimport type { StandardGraph } from '@/graphs';\nimport type * as t from '@/types';\nimport {\n  ToolCallTypes,\n  ContentTypes,\n  GraphEvents,\n  StepTypes,\n  Providers,\n} from '@/common';\nimport {\n  handleServerToolResult,\n  handleToolCallChunks,\n  handleToolCalls,\n} from '@/tools/handlers';\nimport { getMessageId } from '@/messages';\n\n/**\n * Parses content to extract thinking sections enclosed in <think> tags using string operations\n * @param content The content to parse\n * @returns An object with separated text and thinking content\n */\nfunction parseThinkingContent(content: string): {\n  text: string;\n  thinking: string;\n} {\n  // If no think tags, return the original content as text\n  if (!content.includes('<think>')) {\n    return { text: content, thinking: '' };\n  }\n\n  let textResult = '';\n  const thinkingResult: string[] = [];\n  let position = 0;\n\n  while (position < content.length) {\n    const thinkStart = content.indexOf('<think>', position);\n\n    if (thinkStart === -1) {\n      // No more think tags, add the rest and break\n      textResult += content.slice(position);\n      break;\n    }\n\n    // Add text before the think tag\n    textResult += content.slice(position, thinkStart);\n\n    const thinkEnd = content.indexOf('</think>', thinkStart);\n    if (thinkEnd === -1) {\n      // Malformed input, no closing tag\n      textResult += content.slice(thinkStart);\n      break;\n    }\n\n    // Add the thinking content\n    const thinkContent = content.slice(thinkStart + 7, thinkEnd);\n    thinkingResult.push(thinkContent);\n\n    // Move position to after the think tag\n    position = thinkEnd + 8; // 8 is the length of '</think>'\n  }\n\n  return {\n    text: textResult.trim(),\n    thinking: thinkingResult.join('\\n').trim(),\n  };\n}\n\nfunction getNonEmptyValue(possibleValues: string[]): string | undefined {\n  for (const value of possibleValues) {\n    if (value && value.trim() !== '') {\n      return value;\n    }\n  }\n  return undefined;\n}\n\nexport function getChunkContent({\n  chunk,\n  provider,\n  reasoningKey,\n}: {\n  chunk?: Partial<AIMessageChunk>;\n  provider?: Providers;\n  reasoningKey: 'reasoning_content' | 'reasoning';\n}): string | t.MessageContentComplex[] | undefined {\n  if (\n    (provider === Providers.OPENAI || provider === Providers.AZURE) &&\n    (\n      chunk?.additional_kwargs?.reasoning as\n        | Partial<ChatOpenAIReasoningSummary>\n        | undefined\n    )?.summary?.[0]?.text != null &&\n    ((\n      chunk?.additional_kwargs?.reasoning as\n        | Partial<ChatOpenAIReasoningSummary>\n        | undefined\n    )?.summary?.[0]?.text?.length ?? 0) > 0\n  ) {\n    return (\n      chunk?.additional_kwargs?.reasoning as\n        | Partial<ChatOpenAIReasoningSummary>\n        | undefined\n    )?.summary?.[0]?.text;\n  }\n  /**\n   * For OpenRouter, reasoning is stored in additional_kwargs.reasoning (not reasoning_content).\n   * NOTE: We intentionally do NOT extract text from reasoning_details here.\n   * The reasoning_details array contains the FULL accumulated reasoning text (set only on final chunk),\n   * but individual reasoning tokens are already streamed via additional_kwargs.reasoning.\n   * Extracting from reasoning_details would cause duplication.\n   * The reasoning_details is only used for:\n   * 1. Detecting reasoning mode in handleReasoning()\n   * 2. Final message storage (for thought signatures)\n   */\n  if (provider === Providers.OPENROUTER) {\n    // Content presence signals end of reasoning phase - prefer content over reasoning\n    // This handles transitional chunks that may have both reasoning and content\n    if (typeof chunk?.content === 'string' && chunk.content !== '') {\n      return chunk.content;\n    }\n    const reasoning = chunk?.additional_kwargs?.reasoning as string | undefined;\n    if (reasoning != null && reasoning !== '') {\n      return reasoning;\n    }\n    return chunk?.content;\n  }\n  return (\n    ((chunk?.additional_kwargs?.[reasoningKey] as string | undefined) ?? '') ||\n    chunk?.content\n  );\n}\n\nexport class ChatModelStreamHandler implements t.EventHandler {\n  async handle(\n    event: string,\n    data: t.StreamEventData,\n    metadata?: Record<string, unknown>,\n    graph?: StandardGraph\n  ): Promise<void> {\n    if (!graph) {\n      throw new Error('Graph not found');\n    }\n    if (!graph.config) {\n      throw new Error('Config not found in graph');\n    }\n    if (!data.chunk) {\n      console.warn(`No chunk found in ${event} event`);\n      return;\n    }\n\n    const agentContext = graph.getAgentContext(metadata);\n\n    const chunk = data.chunk as Partial<AIMessageChunk>;\n    const content = getChunkContent({\n      chunk,\n      reasoningKey: agentContext.reasoningKey,\n      provider: agentContext.provider,\n    });\n    const skipHandling = await handleServerToolResult({\n      graph,\n      content,\n      metadata,\n      agentContext,\n    });\n    if (skipHandling) {\n      return;\n    }\n    this.handleReasoning(chunk, agentContext);\n    let hasToolCalls = false;\n\n    if (\n      chunk.tool_calls &&\n      chunk.tool_calls.length > 0 &&\n      chunk.tool_calls.every(\n        (tc) =>\n          tc.id != null &&\n          tc.id !== '' &&\n          (tc as Partial<ToolCall>).name != null &&\n          tc.name !== ''\n      )\n    ) {\n      hasToolCalls = true;\n      await handleToolCalls(chunk.tool_calls, metadata, graph);\n    }\n\n    const hasToolCallChunks =\n      (chunk.tool_call_chunks && chunk.tool_call_chunks.length > 0) ?? false;\n    const isEmptyContent =\n      typeof content === 'undefined' ||\n      !content.length ||\n      (typeof content === 'string' && !content);\n\n    /** Set a preliminary message ID if found in empty chunk */\n    const isEmptyChunk = isEmptyContent && !hasToolCallChunks;\n    if (\n      isEmptyChunk &&\n      (chunk.id ?? '') !== '' &&\n      !graph.prelimMessageIdsByStepKey.has(chunk.id ?? '')\n    ) {\n      const stepKey = graph.getStepKey(metadata);\n      graph.prelimMessageIdsByStepKey.set(stepKey, chunk.id ?? '');\n    } else if (isEmptyChunk) {\n      return;\n    }\n\n    const stepKey = graph.getStepKey(metadata);\n\n    if (\n      hasToolCallChunks &&\n      chunk.tool_call_chunks &&\n      chunk.tool_call_chunks.length &&\n      typeof chunk.tool_call_chunks[0]?.index === 'number'\n    ) {\n      await handleToolCallChunks({\n        graph,\n        stepKey,\n        toolCallChunks: chunk.tool_call_chunks,\n        metadata,\n      });\n    }\n\n    if (isEmptyContent) {\n      return;\n    }\n\n    const message_id = getMessageId(stepKey, graph) ?? '';\n    if (message_id) {\n      await graph.dispatchRunStep(\n        stepKey,\n        {\n          type: StepTypes.MESSAGE_CREATION,\n          message_creation: {\n            message_id,\n          },\n        },\n        metadata\n      );\n    }\n\n    const stepId = graph.getStepIdByKey(stepKey);\n    const runStep = graph.getRunStep(stepId);\n    if (!runStep) {\n      console.warn(`\\n\n==============================================================\n\n\nRun step for ${stepId} does not exist, cannot dispatch delta event.\n\nevent: ${event}\nstepId: ${stepId}\nstepKey: ${stepKey}\nmessage_id: ${message_id}\nhasToolCalls: ${hasToolCalls}\nhasToolCallChunks: ${hasToolCallChunks}\n\n==============================================================\n\\n`);\n      return;\n    }\n\n    /* Note: tool call chunks may have non-empty content that matches the current tool chunk generation */\n    if (typeof content === 'string' && runStep.type === StepTypes.TOOL_CALLS) {\n      return;\n    } else if (\n      hasToolCallChunks &&\n      (chunk.tool_call_chunks?.some((tc) => tc.args === content) ?? false)\n    ) {\n      return;\n    } else if (typeof content === 'string') {\n      if (agentContext.currentTokenType === ContentTypes.TEXT) {\n        await graph.dispatchMessageDelta(stepId, {\n          content: [\n            {\n              type: ContentTypes.TEXT,\n              text: content,\n            },\n          ],\n        });\n      } else if (agentContext.currentTokenType === 'think_and_text') {\n        const { text, thinking } = parseThinkingContent(content);\n        if (thinking) {\n          await graph.dispatchReasoningDelta(stepId, {\n            content: [\n              {\n                type: ContentTypes.THINK,\n                think: thinking,\n              },\n            ],\n          });\n        }\n        if (text) {\n          agentContext.currentTokenType = ContentTypes.TEXT;\n          agentContext.tokenTypeSwitch = 'content';\n          const newStepKey = graph.getStepKey(metadata);\n          const message_id = getMessageId(newStepKey, graph) ?? '';\n          await graph.dispatchRunStep(\n            newStepKey,\n            {\n              type: StepTypes.MESSAGE_CREATION,\n              message_creation: {\n                message_id,\n              },\n            },\n            metadata\n          );\n\n          const newStepId = graph.getStepIdByKey(newStepKey);\n          await graph.dispatchMessageDelta(newStepId, {\n            content: [\n              {\n                type: ContentTypes.TEXT,\n                text: text,\n              },\n            ],\n          });\n        }\n      } else {\n        await graph.dispatchReasoningDelta(stepId, {\n          content: [\n            {\n              type: ContentTypes.THINK,\n              think: content,\n            },\n          ],\n        });\n      }\n    } else if (\n      content.every((c) => c.type?.startsWith(ContentTypes.TEXT) ?? false)\n    ) {\n      await graph.dispatchMessageDelta(stepId, {\n        content,\n      });\n    } else if (\n      content.every(\n        (c) =>\n          (c.type?.startsWith(ContentTypes.THINKING) ?? false) ||\n          (c.type?.startsWith(ContentTypes.REASONING) ?? false) ||\n          (c.type?.startsWith(ContentTypes.REASONING_CONTENT) ?? false) ||\n          c.type === 'redacted_thinking'\n      )\n    ) {\n      await graph.dispatchReasoningDelta(stepId, {\n        content: content.map((c) => ({\n          type: ContentTypes.THINK,\n          think:\n            (c as t.ThinkingContentText).thinking ??\n            (c as Partial<t.GoogleReasoningContentText>).reasoning ??\n            (c as Partial<t.BedrockReasoningContentText>).reasoningText?.text ??\n            '',\n        })),\n      });\n    }\n  }\n  handleReasoning(\n    chunk: Partial<AIMessageChunk>,\n    agentContext: AgentContext\n  ): void {\n    let reasoning_content = chunk.additional_kwargs?.[\n      agentContext.reasoningKey\n    ] as string | Partial<ChatOpenAIReasoningSummary> | undefined;\n    if (\n      Array.isArray(chunk.content) &&\n      (chunk.content[0]?.type === ContentTypes.THINKING ||\n        chunk.content[0]?.type === ContentTypes.REASONING ||\n        chunk.content[0]?.type === ContentTypes.REASONING_CONTENT ||\n        chunk.content[0]?.type === 'redacted_thinking')\n    ) {\n      reasoning_content = 'valid';\n    } else if (\n      (agentContext.provider === Providers.OPENAI ||\n        agentContext.provider === Providers.AZURE) &&\n      reasoning_content != null &&\n      typeof reasoning_content !== 'string' &&\n      reasoning_content.summary?.[0]?.text != null &&\n      reasoning_content.summary[0].text\n    ) {\n      reasoning_content = 'valid';\n    } else if (\n      agentContext.provider === Providers.OPENROUTER &&\n      // Only set reasoning as valid if content is NOT present (content signals end of reasoning)\n      (chunk.content == null || chunk.content === '') &&\n      // Check for reasoning_details (final chunk) OR reasoning string (intermediate chunks)\n      ((chunk.additional_kwargs?.reasoning_details != null &&\n        Array.isArray(chunk.additional_kwargs.reasoning_details) &&\n        chunk.additional_kwargs.reasoning_details.length > 0) ||\n        (typeof chunk.additional_kwargs?.reasoning === 'string' &&\n          chunk.additional_kwargs.reasoning !== ''))\n    ) {\n      reasoning_content = 'valid';\n    }\n    if (\n      reasoning_content != null &&\n      reasoning_content !== '' &&\n      (chunk.content == null ||\n        chunk.content === '' ||\n        reasoning_content === 'valid')\n    ) {\n      agentContext.currentTokenType = ContentTypes.THINK;\n      agentContext.tokenTypeSwitch = 'reasoning';\n      return;\n    } else if (\n      agentContext.tokenTypeSwitch === 'reasoning' &&\n      agentContext.currentTokenType !== ContentTypes.TEXT &&\n      ((chunk.content != null && chunk.content !== '') ||\n        (chunk.tool_calls?.length ?? 0) > 0 ||\n        (chunk.tool_call_chunks?.length ?? 0) > 0)\n    ) {\n      agentContext.currentTokenType = ContentTypes.TEXT;\n      agentContext.tokenTypeSwitch = 'content';\n      agentContext.reasoningTransitionCount++;\n    } else if (\n      chunk.content != null &&\n      typeof chunk.content === 'string' &&\n      chunk.content.includes('<think>') &&\n      chunk.content.includes('</think>')\n    ) {\n      agentContext.currentTokenType = 'think_and_text';\n      agentContext.tokenTypeSwitch = 'content';\n    } else if (\n      chunk.content != null &&\n      typeof chunk.content === 'string' &&\n      chunk.content.includes('<think>')\n    ) {\n      agentContext.currentTokenType = ContentTypes.THINK;\n      agentContext.tokenTypeSwitch = 'content';\n    } else if (\n      agentContext.lastToken != null &&\n      agentContext.lastToken.includes('</think>')\n    ) {\n      agentContext.currentTokenType = ContentTypes.TEXT;\n      agentContext.tokenTypeSwitch = 'content';\n    }\n    if (typeof chunk.content !== 'string') {\n      return;\n    }\n    agentContext.lastToken = chunk.content;\n  }\n}\n\nexport function createContentAggregator(): t.ContentAggregatorResult {\n  const contentParts: Array<t.MessageContentComplex | undefined> = [];\n  const stepMap = new Map<string, t.RunStep>();\n  const toolCallIdMap = new Map<string, string>();\n  // Track step IDs for structured output tool calls that should be skipped\n  const skippedStructuredOutputSteps = new Set<string>();\n  // Track agentId and groupId for each content index (applied to content parts)\n  const contentMetaMap = new Map<\n    number,\n    { agentId?: string; groupId?: number }\n  >();\n\n  const updateContent = (\n    index: number,\n    contentPart?: t.MessageContentComplex,\n    finalUpdate = false\n  ): void => {\n    if (!contentPart) {\n      console.warn(\"No content part found in 'updateContent'\");\n      return;\n    }\n    const partType = contentPart.type ?? '';\n    if (!partType) {\n      console.warn('No content type found in content part');\n      return;\n    }\n\n    if (!contentParts[index] && partType !== ContentTypes.TOOL_CALL) {\n      contentParts[index] = { type: partType };\n    }\n\n    if (!partType.startsWith(contentParts[index]?.type ?? '')) {\n      console.warn('Content type mismatch');\n      return;\n    }\n\n    if (\n      partType.startsWith(ContentTypes.TEXT) &&\n      ContentTypes.TEXT in contentPart &&\n      typeof contentPart.text === 'string'\n    ) {\n      // TODO: update this!!\n      const currentContent = contentParts[index] as t.MessageDeltaUpdate;\n      const update: t.MessageDeltaUpdate = {\n        type: ContentTypes.TEXT,\n        text: (currentContent.text || '') + contentPart.text,\n      };\n\n      if (contentPart.tool_call_ids) {\n        update.tool_call_ids = contentPart.tool_call_ids;\n      }\n      contentParts[index] = update;\n    } else if (\n      partType.startsWith(ContentTypes.THINK) &&\n      ContentTypes.THINK in contentPart &&\n      typeof contentPart.think === 'string'\n    ) {\n      const currentContent = contentParts[index] as t.ReasoningDeltaUpdate;\n      const update: t.ReasoningDeltaUpdate = {\n        type: ContentTypes.THINK,\n        think: (currentContent.think || '') + contentPart.think,\n      };\n      contentParts[index] = update;\n    } else if (\n      partType.startsWith(ContentTypes.AGENT_UPDATE) &&\n      ContentTypes.AGENT_UPDATE in contentPart &&\n      contentPart.agent_update != null\n    ) {\n      const update: t.AgentUpdate = {\n        type: ContentTypes.AGENT_UPDATE,\n        agent_update: contentPart.agent_update,\n      };\n\n      contentParts[index] = update;\n    } else if (\n      partType === ContentTypes.IMAGE_URL &&\n      'image_url' in contentPart\n    ) {\n      const currentContent = contentParts[index] as {\n        type: 'image_url';\n        image_url: string;\n      };\n      contentParts[index] = {\n        ...currentContent,\n      };\n    } else if (\n      partType === ContentTypes.TOOL_CALL &&\n      'tool_call' in contentPart\n    ) {\n      const incomingName = contentPart.tool_call.name;\n      const incomingId = contentPart.tool_call.id;\n      const toolCallArgs = (contentPart.tool_call as t.ToolCallPart).args;\n\n      // When we receive a tool call with a name, it's the complete tool call\n      // Consolidate with any previously accumulated args from chunks\n      const hasValidName = incomingName != null && incomingName !== '';\n\n      const existingContent = contentParts[index] as\n        | (Omit<t.ToolCallContent, 'tool_call'> & {\n            tool_call?: t.ToolCallPart;\n          })\n        | undefined;\n\n      // Allow processing if:\n      // 1. Incoming has a valid name (initial tool call setup), OR\n      // 2. It's a final update (ON_RUN_STEP_COMPLETED), OR\n      // 3. Existing content already has a name (delta streaming — grows args progressively)\n      const existingHasName =\n        existingContent?.tool_call?.name != null &&\n        existingContent.tool_call.name !== '';\n      if (!hasValidName && !finalUpdate && !existingHasName) {\n        return;\n      }\n\n      /** Concatenate string args for progressive streaming; replace when object (complete).\n       *  When incoming delta has a valid name, treat as a complete replacement —\n       *  this handles the Bedrock case where handleToolCalls sends complete args\n       *  as a delta to an existing step that already has partial args from chunks. */\n      const existingArgs = existingContent?.tool_call?.args;\n      const existingIsEmptyObj =\n        typeof existingArgs === 'object' &&\n        Object.keys(existingArgs as Record<string, unknown>).length === 0;\n      const existingIsString =\n        typeof existingArgs === 'string' || existingIsEmptyObj;\n      let args =\n        finalUpdate ||\n        hasValidName ||\n        (!existingIsString && typeof existingArgs === 'object') ||\n        typeof toolCallArgs === 'object'\n          ? contentPart.tool_call.args\n          : ((existingIsEmptyObj ? '' : existingArgs) ?? '') +\n            (toolCallArgs ?? '');\n      if (\n        finalUpdate &&\n        args == null &&\n        existingContent?.tool_call?.args != null\n      ) {\n        args = existingContent.tool_call.args;\n      }\n\n      const id =\n        getNonEmptyValue([incomingId, existingContent?.tool_call?.id]) ?? '';\n      const name =\n        getNonEmptyValue([incomingName, existingContent?.tool_call?.name]) ??\n        '';\n\n      const newToolCall: ToolCall & t.PartMetadata = {\n        id,\n        name,\n        args,\n        type: ToolCallTypes.TOOL_CALL,\n      };\n\n      if (finalUpdate) {\n        newToolCall.progress = 1;\n        newToolCall.output = contentPart.tool_call.output;\n      }\n\n      contentParts[index] = {\n        type: ContentTypes.TOOL_CALL,\n        tool_call: newToolCall,\n      };\n    }\n\n    // Apply agentId (for MultiAgentGraph) and groupId (for parallel execution) to content parts\n    // - agentId present → MultiAgentGraph (show agent labels)\n    // - groupId present → parallel execution (render columns)\n    const meta = contentMetaMap.get(index);\n    if (meta?.agentId != null) {\n      (contentParts[index] as t.MessageContentComplex).agentId = meta.agentId;\n    }\n    if (meta?.groupId != null) {\n      (contentParts[index] as t.MessageContentComplex).groupId = meta.groupId;\n    }\n  };\n\n  const aggregateContent = ({\n    event,\n    data,\n  }: {\n    event: GraphEvents;\n    data:\n      | t.RunStep\n      | t.AgentUpdate\n      | t.MessageDeltaEvent\n      | t.RunStepDeltaEvent\n      | { result: t.ToolEndEvent }\n      | {\n          structuredResponse: Record<string, unknown>;\n          schema: Record<string, unknown>;\n        };\n  }): void => {\n    // Handle structured output - add the JSON response as a text content part\n    if (event === GraphEvents.ON_STRUCTURED_OUTPUT) {\n      const structuredData = data as {\n        structuredResponse: Record<string, unknown>;\n        schema: Record<string, unknown>;\n      };\n      const contentPart: t.MessageContentComplex = {\n        type: ContentTypes.TEXT,\n        text: JSON.stringify(structuredData.structuredResponse, null, 2),\n      };\n      // Use the next available index\n      const nextIndex = contentParts.length;\n      updateContent(nextIndex, contentPart);\n      return;\n    }\n\n    if (event === GraphEvents.ON_RUN_STEP) {\n      const runStep = data as t.RunStep;\n      stepMap.set(runStep.id, runStep);\n\n      // Track agentId (MultiAgentGraph) and groupId (parallel execution) separately\n      // - agentId: present for all MultiAgentGraph runs (enables agent labels in UI)\n      // - groupId: present only for parallel execution (enables column rendering)\n      const hasAgentId = runStep.agentId != null && runStep.agentId !== '';\n      const hasGroupId = runStep.groupId != null;\n      if (hasAgentId || hasGroupId) {\n        const existingMeta = contentMetaMap.get(runStep.index) ?? {};\n        if (hasAgentId) {\n          existingMeta.agentId = runStep.agentId;\n        }\n        if (hasGroupId) {\n          existingMeta.groupId = runStep.groupId;\n        }\n        contentMetaMap.set(runStep.index, existingMeta);\n      }\n\n      // Store tool call IDs if present\n      if (\n        runStep.stepDetails.type === StepTypes.TOOL_CALLS &&\n        runStep.stepDetails.tool_calls\n      ) {\n        // Check if ALL tool calls are structured output tool calls\n        const toolCalls = runStep.stepDetails.tool_calls as ToolCall[];\n        const allAreStructuredOutput =\n          toolCalls.length > 0 &&\n          toolCalls.every((toolCall) => {\n            const toolName = toolCall.name.toLowerCase();\n            return (\n              toolName === 'response' ||\n              toolName === 'structuredresponse' ||\n              toolName === 'structured_response'\n            );\n          });\n\n        // If all tool calls are structured output, skip this entire step\n        if (allAreStructuredOutput) {\n          skippedStructuredOutputSteps.add(runStep.id);\n          return;\n        }\n\n        // When tool_calls is empty (Bedrock sends name/args only at model end),\n        // initialize a placeholder so contentParts[index] is not null.\n        // ON_RUN_STEP_COMPLETED or ON_RUN_STEP_DELTA will fill in the real data.\n        if (toolCalls.length === 0) {\n          contentParts[runStep.index] = {\n            type: ContentTypes.TOOL_CALL,\n            tool_call: {\n              args: '',\n              name: '',\n              id: '',\n              type: ToolCallTypes.TOOL_CALL,\n            },\n          };\n        }\n\n        toolCalls.forEach((toolCall) => {\n          // Skip structured output tool calls - these are synthetic tool calls\n          // used by withStructuredOutput() to extract JSON, not real tools\n          const toolName = toolCall.name.toLowerCase();\n          if (\n            toolName === 'response' ||\n            toolName === 'structuredresponse' ||\n            toolName === 'structured_response'\n          ) {\n            return;\n          }\n\n          const toolCallId = toolCall.id ?? '';\n          if ('id' in toolCall && toolCallId) {\n            toolCallIdMap.set(runStep.id, toolCallId);\n          }\n          const contentPart: t.MessageContentComplex = {\n            type: ContentTypes.TOOL_CALL,\n            tool_call: {\n              args: toolCall.args,\n              name: toolCall.name,\n              id: toolCallId,\n            },\n          };\n\n          updateContent(runStep.index, contentPart);\n        });\n      }\n    } else if (event === GraphEvents.ON_MESSAGE_DELTA) {\n      const messageDelta = data as t.MessageDeltaEvent;\n      const runStep = stepMap.get(messageDelta.id);\n      if (!runStep) {\n        // Expected in handoff subgraphs — reasoning/message deltas can arrive before ON_RUN_STEP\n        return;\n      }\n\n      if (messageDelta.delta.content) {\n        const contentPart = Array.isArray(messageDelta.delta.content)\n          ? messageDelta.delta.content[0]\n          : messageDelta.delta.content;\n\n        updateContent(runStep.index, contentPart);\n      }\n    } else if (\n      event === GraphEvents.ON_AGENT_UPDATE &&\n      (data as t.AgentUpdate | undefined)?.agent_update\n    ) {\n      const contentPart = data as t.AgentUpdate | undefined;\n      if (!contentPart) {\n        return;\n      }\n      updateContent(contentPart.agent_update.index, contentPart);\n    } else if (event === GraphEvents.ON_REASONING_DELTA) {\n      const reasoningDelta = data as t.ReasoningDeltaEvent;\n      const runStep = stepMap.get(reasoningDelta.id);\n      if (!runStep) {\n        // Expected in handoff subgraphs — reasoning deltas arrive before ON_RUN_STEP\n        return;\n      }\n\n      if (reasoningDelta.delta.content) {\n        const contentPart = Array.isArray(reasoningDelta.delta.content)\n          ? reasoningDelta.delta.content[0]\n          : reasoningDelta.delta.content;\n\n        updateContent(runStep.index, contentPart);\n      }\n    } else if (event === GraphEvents.ON_RUN_STEP_DELTA) {\n      const runStepDelta = data as t.RunStepDeltaEvent;\n\n      // Skip deltas for structured output tool calls\n      if (skippedStructuredOutputSteps.has(runStepDelta.id)) {\n        return;\n      }\n\n      const runStep = stepMap.get(runStepDelta.id);\n      if (!runStep) {\n        // Expected in handoff subgraphs — step deltas can arrive before ON_RUN_STEP\n        return;\n      }\n\n      if (\n        runStepDelta.delta.type === StepTypes.TOOL_CALLS &&\n        runStepDelta.delta.tool_calls\n      ) {\n        runStepDelta.delta.tool_calls.forEach((toolCallDelta) => {\n          /** Use toolCallIdMap first; fall back to the delta's own id\n           *  (Bedrock sends complete tool call data as a delta via handleToolCalls,\n           *   which includes the id, but the map was never populated because\n           *   the initial on_run_step had tool_calls: []) */\n          const toolCallId =\n            toolCallIdMap.get(runStepDelta.id) ??\n            (toolCallDelta.id != null && toolCallDelta.id !== ''\n              ? toolCallDelta.id\n              : undefined);\n\n          // Store the mapping for future lookups (e.g. on_run_step_completed)\n          if (\n            toolCallId != null &&\n            toolCallId !== '' &&\n            !toolCallIdMap.has(runStepDelta.id)\n          ) {\n            toolCallIdMap.set(runStepDelta.id, toolCallId);\n          }\n\n          const contentPart: t.MessageContentComplex = {\n            type: ContentTypes.TOOL_CALL,\n            tool_call: {\n              args: toolCallDelta.args ?? '',\n              name: toolCallDelta.name,\n              id: toolCallId,\n            },\n          };\n\n          updateContent(runStep.index, contentPart);\n        });\n      }\n    } else if (event === GraphEvents.ON_RUN_STEP_COMPLETED) {\n      const { result } = data as unknown as { result: t.ToolEndEvent };\n\n      const { id: stepId } = result;\n\n      // Skip completion events for structured output tool calls\n      if (skippedStructuredOutputSteps.has(stepId)) {\n        return;\n      }\n\n      const runStep = stepMap.get(stepId);\n      if (!runStep) {\n        // Expected in handoff subgraphs — completion can arrive for untracked steps\n        return;\n      }\n\n      const contentPart: t.MessageContentComplex = {\n        type: ContentTypes.TOOL_CALL,\n        tool_call: result.tool_call,\n      };\n\n      updateContent(runStep.index, contentPart, true);\n    }\n  };\n\n  return { contentParts, aggregateContent, stepMap };\n}\n"],"names":["Providers","handleServerToolResult","handleToolCalls","handleToolCallChunks","getMessageId","StepTypes","ContentTypes","ToolCallTypes","GraphEvents"],"mappings":"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"}