@tdesign-react/chat 1.0.2-alpha.5 → 1.0.2-alpha.6

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.
Files changed (125) hide show
  1. package/es/_util/reactify.js +1 -1
  2. package/es/_util/useDynamicStyle.js +1 -1
  3. package/es/attachments/index.js +1 -1
  4. package/es/chat-actionbar/index.js +1 -1
  5. package/es/chat-attachments/index.js +1 -1
  6. package/es/chat-engine/components/activity/index.d.ts +4 -0
  7. package/es/chat-engine/components/activity/index.js +18 -0
  8. package/es/chat-engine/components/activity/index.js.map +1 -0
  9. package/es/chat-engine/components/activity/registry.d.ts +44 -0
  10. package/es/chat-engine/components/activity/registry.js +85 -0
  11. package/es/chat-engine/components/activity/registry.js.map +1 -0
  12. package/es/chat-engine/components/activity/render.d.ts +11 -0
  13. package/es/chat-engine/components/activity/render.js +107 -0
  14. package/es/chat-engine/components/activity/render.js.map +1 -0
  15. package/es/chat-engine/components/activity/types.d.ts +32 -0
  16. package/es/chat-engine/components/activity/types.js +7 -0
  17. package/es/chat-engine/components/activity/types.js.map +1 -0
  18. package/es/chat-engine/components/index.d.ts +3 -0
  19. package/es/chat-engine/components/index.js +30 -0
  20. package/es/chat-engine/components/index.js.map +1 -0
  21. package/es/chat-engine/components/provider/agent-state.js +6 -2
  22. package/es/chat-engine/components/provider/agent-state.js.map +1 -1
  23. package/es/chat-engine/components/toolcall/index.js +7 -2
  24. package/es/chat-engine/components/toolcall/index.js.map +1 -1
  25. package/es/chat-engine/components/toolcall/registry.js +1 -1
  26. package/es/chat-engine/components/toolcall/render.d.ts +1 -1
  27. package/es/chat-engine/components/toolcall/render.js +57 -13
  28. package/es/chat-engine/components/toolcall/render.js.map +1 -1
  29. package/es/chat-engine/components/toolcall/types.js +1 -1
  30. package/es/chat-engine/core/adapters/agui/event-mapper.d.ts +109 -0
  31. package/es/chat-engine/core/adapters/agui/event-mapper.js +370 -0
  32. package/es/chat-engine/core/adapters/agui/event-mapper.js.map +1 -0
  33. package/es/chat-engine/core/adapters/agui/events.d.ts +1550 -0
  34. package/es/chat-engine/core/adapters/agui/events.js +199 -0
  35. package/es/chat-engine/core/adapters/agui/events.js.map +1 -0
  36. package/es/chat-engine/core/adapters/agui/index.d.ts +75 -0
  37. package/es/chat-engine/core/adapters/agui/index.js +175 -0
  38. package/es/chat-engine/core/adapters/agui/index.js.map +1 -0
  39. package/es/chat-engine/core/adapters/agui/state-manager.d.ts +99 -0
  40. package/es/chat-engine/core/adapters/agui/state-manager.js +168 -0
  41. package/es/chat-engine/core/adapters/agui/state-manager.js.map +1 -0
  42. package/es/chat-engine/core/adapters/agui/types.d.ts +817 -0
  43. package/es/chat-engine/core/adapters/agui/types.js +95 -0
  44. package/es/chat-engine/core/adapters/agui/types.js.map +1 -0
  45. package/es/chat-engine/core/adapters/agui/utils.d.ts +197 -0
  46. package/es/chat-engine/core/adapters/agui/utils.js +311 -0
  47. package/es/chat-engine/core/adapters/agui/utils.js.map +1 -0
  48. package/es/chat-engine/core/index.d.ts +132 -0
  49. package/es/chat-engine/core/index.js +597 -0
  50. package/es/chat-engine/core/index.js.map +1 -0
  51. package/es/chat-engine/core/processor/index.d.ts +20 -0
  52. package/es/chat-engine/core/processor/index.js +146 -0
  53. package/es/chat-engine/core/processor/index.js.map +1 -0
  54. package/es/chat-engine/core/server/batch-client.d.ts +20 -0
  55. package/es/chat-engine/core/server/batch-client.js +114 -0
  56. package/es/chat-engine/core/server/batch-client.js.map +1 -0
  57. package/es/chat-engine/core/server/connection-manager.d.ts +39 -0
  58. package/es/chat-engine/core/server/connection-manager.js +84 -0
  59. package/es/chat-engine/core/server/connection-manager.js.map +1 -0
  60. package/es/chat-engine/core/server/errors.d.ts +22 -0
  61. package/es/chat-engine/core/server/errors.js +80 -0
  62. package/es/chat-engine/core/server/errors.js.map +1 -0
  63. package/es/chat-engine/core/server/index.d.ts +11 -0
  64. package/es/chat-engine/core/server/index.js +26 -0
  65. package/es/chat-engine/core/server/index.js.map +1 -0
  66. package/es/chat-engine/core/server/llm-service.d.ts +44 -0
  67. package/es/chat-engine/core/server/llm-service.js +198 -0
  68. package/es/chat-engine/core/server/llm-service.js.map +1 -0
  69. package/es/chat-engine/core/server/sse-client.d.ts +77 -0
  70. package/es/chat-engine/core/server/sse-client.js +362 -0
  71. package/es/chat-engine/core/server/sse-client.js.map +1 -0
  72. package/es/chat-engine/core/server/sse-parser.d.ts +49 -0
  73. package/es/chat-engine/core/server/sse-parser.js +116 -0
  74. package/es/chat-engine/core/server/sse-parser.js.map +1 -0
  75. package/es/chat-engine/core/server/types.d.ts +54 -0
  76. package/es/chat-engine/core/server/types.js +28 -0
  77. package/es/chat-engine/core/server/types.js.map +1 -0
  78. package/es/chat-engine/core/store/message.d.ts +27 -0
  79. package/es/chat-engine/core/store/message.js +263 -0
  80. package/es/chat-engine/core/store/message.js.map +1 -0
  81. package/es/chat-engine/core/store/model.d.ts +8 -0
  82. package/es/chat-engine/core/store/model.js +65 -0
  83. package/es/chat-engine/core/store/model.js.map +1 -0
  84. package/es/chat-engine/core/store/reactiveState.d.ts +52 -0
  85. package/es/chat-engine/core/store/reactiveState.js +1359 -0
  86. package/es/chat-engine/core/store/reactiveState.js.map +1 -0
  87. package/es/chat-engine/core/type.d.ts +255 -0
  88. package/es/chat-engine/core/type.js +7 -0
  89. package/es/chat-engine/core/type.js.map +1 -0
  90. package/es/chat-engine/core/utils/eventEmitter.d.ts +10 -0
  91. package/es/chat-engine/core/utils/eventEmitter.js +67 -0
  92. package/es/chat-engine/core/utils/eventEmitter.js.map +1 -0
  93. package/es/chat-engine/core/utils/index.d.ts +33 -0
  94. package/es/chat-engine/core/utils/index.js +999 -0
  95. package/es/chat-engine/core/utils/index.js.map +1 -0
  96. package/es/chat-engine/core/utils/logger.d.ts +30 -0
  97. package/es/chat-engine/core/utils/logger.js +87 -0
  98. package/es/chat-engine/core/utils/logger.js.map +1 -0
  99. package/es/chat-engine/hooks/index.d.ts +4 -0
  100. package/es/chat-engine/hooks/index.js +50 -0
  101. package/es/chat-engine/hooks/index.js.map +1 -0
  102. package/es/chat-engine/hooks/useAgentActivity.d.ts +16 -0
  103. package/es/chat-engine/hooks/useAgentActivity.js +73 -0
  104. package/es/chat-engine/hooks/useAgentActivity.js.map +1 -0
  105. package/es/chat-engine/hooks/useAgentState.js +6 -2
  106. package/es/chat-engine/hooks/useAgentState.js.map +1 -1
  107. package/es/chat-engine/hooks/useAgentToolcall.js +1 -1
  108. package/es/chat-engine/hooks/useChat.d.ts +2 -2
  109. package/es/chat-engine/hooks/useChat.js +37 -3
  110. package/es/chat-engine/hooks/useChat.js.map +1 -1
  111. package/es/chat-engine/index.d.ts +3 -1
  112. package/es/chat-engine/index.js +36 -3
  113. package/es/chat-engine/index.js.map +1 -1
  114. package/es/chat-filecard/index.js +1 -1
  115. package/es/chat-loading/index.js +1 -1
  116. package/es/chat-markdown/index.js +1 -1
  117. package/es/chat-message/index.js +1 -1
  118. package/es/chat-sender/index.js +1 -1
  119. package/es/chat-thinking/index.js +1 -1
  120. package/es/chatbot/index.js +1 -1
  121. package/es/index.js +33 -5
  122. package/es/index.js.map +1 -1
  123. package/es/style/index.js +1 -1
  124. package/package.json +2 -2
  125. package/es/chatbot/_example-js/agui-toolcall.d.ts +0 -11
@@ -1 +1 @@
1
- {"version":3,"file":"render.js","sources":["../../../../../pro-components/chat/chat-engine/components/toolcall/render.tsx"],"sourcesContent":["import React, { useState, useEffect, useCallback, useMemo } from 'react';\nimport type { ToolCall } from 'tdesign-web-components/lib/chat-engine';\nimport { isNonInteractiveConfig, type ToolcallComponentProps } from './types';\nimport { agentToolcallRegistry } from './registry';\nimport { AgentStateContext, useAgentStateDataByKey } from '../../hooks/useAgentState';\n\ninterface ToolCallRendererProps {\n toolCall: ToolCall;\n onRespond?: (toolCall: ToolCall, response: any) => void;\n}\n\nexport const ToolCallRenderer = React.memo<ToolCallRendererProps>(\n ({ toolCall, onRespond }) => {\n const [actionState, setActionState] = useState<{\n status: ToolcallComponentProps['status'];\n result?: any;\n error?: Error;\n }>({\n status: 'idle',\n });\n\n // 缓存配置获取\n const config = useMemo(() => {\n const cfg = agentToolcallRegistry.get(toolCall.toolCallName);\n return cfg;\n }, [toolCall.toolCallName]);\n\n // 添加注册状态监听\n const [isRegistered, setIsRegistered] = useState(\n () => !!agentToolcallRegistry.getRenderFunction(toolCall.toolCallName),\n );\n\n // 缓存参数解析\n const args = useMemo(() => {\n try {\n return toolCall.args ? JSON.parse(toolCall.args) : {};\n } catch (error) {\n console.error('解析工具调用参数失败:', error);\n return {};\n }\n }, [toolCall.args]);\n\n const handleRespond = useCallback(\n (response: any) => {\n if (onRespond) {\n onRespond(toolCall, response);\n setActionState((prev) => ({\n ...prev,\n status: 'complete',\n result: response,\n }));\n }\n },\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [toolCall.toolCallId, onRespond],\n );\n\n // 执行 handler(如果存在)- 必须在条件判断之前调用\n useEffect(() => {\n if (!config) return;\n\n if (isNonInteractiveConfig(config)) {\n // 非交互式:执行 handler\n const executeHandler = async () => {\n try {\n setActionState({ status: 'executing' });\n\n // 解析后端返回的结果作为 handler 的第二个参数\n let backendResult;\n if (toolCall.result) {\n try {\n backendResult = JSON.parse(toolCall.result);\n } catch (error) {\n console.warn('解析后端结果失败,使用原始字符串:', error);\n backendResult = toolCall.result;\n }\n }\n\n // 调用 handler,传入 args 和 backendResult\n const result = await config.handler(args, backendResult);\n setActionState({\n status: 'complete',\n result,\n });\n } catch (error) {\n setActionState({\n status: 'error',\n error: error as Error,\n });\n }\n };\n\n executeHandler();\n } else if (toolCall.result) {\n // 交互式:已有结果,显示完成状态\n try {\n const result = JSON.parse(toolCall.result);\n setActionState({\n status: 'complete',\n result,\n });\n } catch (error) {\n setActionState({\n status: 'error',\n error: error as Error,\n });\n }\n } else {\n // 等待用户交互\n setActionState({ status: 'executing' });\n }\n }, [config, args, toolCall.result]);\n\n // 从配置中获取 subscribeKey 提取函数\n const subscribeKeyExtractor = useMemo(() => config?.subscribeKey, [config]);\n\n // 使用配置的提取函数来获取 targetStateKey\n const targetStateKey = useMemo(() => {\n if (!subscribeKeyExtractor) return undefined;\n\n // 构造完整的 props 对象传给提取函数\n const fullProps = {\n status: actionState.status,\n args,\n result: actionState.result,\n error: actionState.error,\n respond: handleRespond,\n };\n\n return subscribeKeyExtractor(fullProps);\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [subscribeKeyExtractor, args, actionState]);\n\n // 监听组件注册事件, 无论何时注册,都能正确触发重新渲染\n useEffect(() => {\n if (!isRegistered) {\n const handleRegistered = (event: CustomEvent) => {\n if (event.detail?.name === toolCall.toolCallName) {\n setIsRegistered(true);\n }\n };\n\n // 添加事件监听\n window.addEventListener('toolcall-registered', handleRegistered as EventListener);\n\n return () => {\n window.removeEventListener('toolcall-registered', handleRegistered as EventListener);\n };\n }\n }, [toolCall.toolCallName, isRegistered]);\n\n // 使用精确订阅\n const agentState = useAgentStateDataByKey(targetStateKey);\n\n // 缓存组件 props\n const componentProps = useMemo<ToolcallComponentProps>(\n () => ({\n status: actionState.status,\n args,\n result: actionState.result,\n error: actionState.error,\n respond: handleRespond,\n agentState,\n }),\n [actionState.status, args, actionState.result, actionState.error, handleRespond, agentState],\n );\n\n // 使用registry的缓存渲染函数\n const MemoizedComponent = useMemo(\n () => agentToolcallRegistry.getRenderFunction(toolCall.toolCallName),\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [toolCall.toolCallName, isRegistered],\n );\n\n if (!MemoizedComponent) {\n return null;\n }\n\n return <MemoizedComponent {...componentProps} />;\n },\n (prevProps, nextProps) =>\n prevProps.toolCall.toolCallId === nextProps.toolCall.toolCallId &&\n prevProps.toolCall.toolCallName === nextProps.toolCall.toolCallName &&\n prevProps.toolCall.args === nextProps.toolCall.args &&\n prevProps.toolCall.result === nextProps.toolCall.result &&\n prevProps.onRespond === nextProps.onRespond,\n);\n// 用于调试,可以在控制台查看每次渲染的参数\n// (prevProps, nextProps) => {\n// const toolCallIdSame = prevProps.toolCall.toolCallId === nextProps.toolCall.toolCallId;\n// const toolCallNameSame = prevProps.toolCall.toolCallName === nextProps.toolCall.toolCallName;\n// const argsSame = prevProps.toolCall.args === nextProps.toolCall.args;\n// const resultSame = prevProps.toolCall.result === nextProps.toolCall.result;\n// const onRespondSame = prevProps.onRespond === nextProps.onRespond;\n\n// console.log(`ToolCallRenderer memo 详细检查 [${prevProps.toolCall.toolCallName}]:`, {\n// toolCallIdSame,\n// toolCallNameSame,\n// argsSame,\n// resultSame,\n// onRespondSame,\n// prevToolCallId: prevProps.toolCall.toolCallId,\n// nextToolCallId: nextProps.toolCall.toolCallId,\n// prevOnRespond: prevProps.onRespond,\n// nextOnRespond: nextProps.onRespond,\n// });\n\n// const shouldSkip = toolCallIdSame && toolCallNameSame && argsSame && resultSame && onRespondSame;\n\n// console.log(`ToolCallRenderer memo 检查 [${prevProps.toolCall.toolCallName}]:`, shouldSkip ? '跳过渲染' : '需要重新渲染');\n// return shouldSkip\n// },\n// );\n\n// 定义增强后的 Props 类型\ntype WithAgentStateProps<P> = P & { agentState?: Record<string, any> };\n\nexport const withAgentStateToolcall1 = <P extends object>(\n Component: React.ComponentType<WithAgentStateProps<P>>,\n): React.ComponentType<P> => {\n const WrappedComponent: React.FC<P> = (props: P) => (\n <AgentStateContext.Consumer>\n {(context) => {\n if (!context) {\n console.warn('AgentStateContext not found, component will render without state');\n return <Component {...props} />;\n }\n\n return <Component {...props} agentState={context.stateMap} />;\n }}\n </AgentStateContext.Consumer>\n );\n\n WrappedComponent.displayName = `withAgentState(${Component.displayName || Component.name || 'Component'})`;\n return React.memo(WrappedComponent);\n};\n\nexport const withAgentStateToolcall = <P extends object>(\n Component: React.ComponentType<WithAgentStateProps<P>>,\n subscribeKeyExtractor?: (props: P) => string | undefined,\n): React.ComponentType<P> => {\n const WrappedComponent: React.FC<P> = (props: P) => {\n // 计算需要订阅的 stateKey\n const targetStateKey = useMemo(() => (subscribeKeyExtractor ? subscribeKeyExtractor(props) : undefined), [props]);\n\n const agentState = useAgentStateDataByKey(targetStateKey);\n\n return <Component {...props} agentState={agentState} />;\n };\n\n WrappedComponent.displayName = `withAgentState(${Component.displayName || Component.name || 'Component'})`;\n return React.memo(WrappedComponent);\n};\n"],"names":["ToolCallRenderer","React","memo","_ref","toolCall","onRespond","_useState","useState","status","_useState2","_slicedToArray","actionState","setActionState","config","useMemo","cfg","agentToolcallRegistry","get","toolCallName","_useState3","getRenderFunction","_useState4","isRegistered","setIsRegistered","args","JSON","parse","error","console","handleRespond","useCallback","response","prev","_objectSpread","result","toolCallId","useEffect","isNonInteractiveConfig","executeHandler","_callee","backendResult","_t","_regeneratorRuntime","wrap","_context","next","warn","handler","sent","stop","subscribeKeyExtractor","subscribeKey","targetStateKey","fullProps","respond","handleRegistered","event","_event$detail","detail","name","window","addEventListener","removeEventListener","agentState","useAgentStateDataByKey","componentProps","MemoizedComponent","createElement","prevProps","nextProps","withAgentStateToolcall1","Component","WrappedComponent","props","AgentStateContext","Consumer","context","stateMap","displayName","concat","withAgentStateToolcall"],"mappings":"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"}
1
+ {"version":3,"file":"render.js","sources":["../../../../../pro-components/chat/chat-engine/components/toolcall/render.tsx"],"sourcesContent":["import React, { useState, useEffect, useCallback, useMemo, Component, ErrorInfo } from 'react';\nimport type { ToolCall } from '../../core';\nimport { isNonInteractiveConfig, type ToolcallComponentProps } from './types';\nimport { agentToolcallRegistry } from './registry';\nimport { AgentStateContext, useAgentStateDataByKey } from '../../hooks/useAgentState';\n\ninterface ToolCallRendererProps {\n toolCall: ToolCall;\n onRespond?: (toolCall: ToolCall, response: any) => void;\n}\n\ninterface ErrorBoundaryState {\n hasError: boolean;\n error: Error | null;\n}\n\n/**\n * ToolCall 错误边界组件\n * 捕获子组件渲染错误,防止整个对话列表崩溃\n */\nclass ToolCallErrorBoundary extends Component<\n { children: React.ReactNode; toolCallName: string },\n ErrorBoundaryState\n> {\n constructor(props: { children: React.ReactNode; toolCallName: string }) {\n super(props);\n this.state = { hasError: false, error: null };\n }\n\n static getDerivedStateFromError(error: Error): ErrorBoundaryState {\n return { hasError: true, error };\n }\n\n componentDidCatch(error: Error, errorInfo: ErrorInfo): void {\n console.error(`[ToolCallRenderer] Error in tool \"${this.props.toolCallName}\":`, error, errorInfo);\n }\n\n render() {\n if (this.state.hasError) {\n // 空白兜底,仅在控制台输出错误\n return null;\n }\n\n return this.props.children;\n }\n}\n\nexport const ToolCallRenderer = React.memo<ToolCallRendererProps>(\n ({ toolCall, onRespond }) => {\n const [actionState, setActionState] = useState<{\n status: ToolcallComponentProps['status'];\n result?: any;\n error?: Error;\n }>({\n status: 'idle',\n });\n\n // 缓存配置获取\n const config = useMemo(() => {\n const cfg = agentToolcallRegistry.get(toolCall.toolCallName);\n return cfg;\n }, [toolCall.toolCallName]);\n\n // 添加注册状态监听\n const [isRegistered, setIsRegistered] = useState(\n () => !!agentToolcallRegistry.getRenderFunction(toolCall.toolCallName),\n );\n\n // 缓存参数解析\n const args = useMemo(() => {\n try {\n return toolCall.args ? JSON.parse(toolCall.args) : {};\n } catch (error) {\n console.error('解析工具调用参数失败:', error);\n return {};\n }\n }, [toolCall.args]);\n\n const handleRespond = useCallback(\n (response: any) => {\n if (onRespond) {\n onRespond(toolCall, response);\n setActionState((prev) => ({\n ...prev,\n status: 'complete',\n result: response,\n }));\n }\n },\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [toolCall.toolCallId, onRespond],\n );\n\n // 执行 handler(如果存在)- 必须在条件判断之前调用\n useEffect(() => {\n if (!config) return;\n\n if (isNonInteractiveConfig(config)) {\n // 非交互式:执行 handler\n const executeHandler = async () => {\n try {\n setActionState({ status: 'executing' });\n\n // 解析后端返回的结果作为 handler 的第二个参数\n let backendResult;\n if (toolCall.result) {\n try {\n backendResult = JSON.parse(toolCall.result);\n } catch (error) {\n console.warn('解析后端结果失败,使用原始字符串:', error);\n backendResult = toolCall.result;\n }\n }\n\n // 调用 handler,传入 args 和 backendResult\n const result = await config.handler(args, backendResult);\n setActionState({\n status: 'complete',\n result,\n });\n } catch (error) {\n setActionState({\n status: 'error',\n error: error as Error,\n });\n }\n };\n\n executeHandler();\n } else if (toolCall.result) {\n // 交互式:已有结果,显示完成状态\n try {\n const result = JSON.parse(toolCall.result);\n setActionState({\n status: 'complete',\n result,\n });\n } catch (error) {\n setActionState({\n status: 'error',\n error: error as Error,\n });\n }\n } else {\n // 等待用户交互\n setActionState({ status: 'executing' });\n }\n }, [config, args, toolCall.result]);\n\n // 从配置中获取 subscribeKey 提取函数\n const subscribeKeyExtractor = useMemo(() => config?.subscribeKey, [config]);\n\n // 使用配置的提取函数来获取 targetStateKey\n const targetStateKey = useMemo(() => {\n if (!subscribeKeyExtractor) return undefined;\n\n // 构造完整的 props 对象传给提取函数\n const fullProps = {\n status: actionState.status,\n args,\n result: actionState.result,\n error: actionState.error,\n respond: handleRespond,\n };\n\n return subscribeKeyExtractor(fullProps);\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [subscribeKeyExtractor, args, actionState]);\n\n // 监听组件注册事件, 无论何时注册,都能正确触发重新渲染\n useEffect(() => {\n if (!isRegistered) {\n const handleRegistered = (event: CustomEvent) => {\n if (event.detail?.name === toolCall.toolCallName) {\n setIsRegistered(true);\n }\n };\n\n // 添加事件监听\n window.addEventListener('toolcall-registered', handleRegistered as EventListener);\n\n return () => {\n window.removeEventListener('toolcall-registered', handleRegistered as EventListener);\n };\n }\n }, [toolCall.toolCallName, isRegistered]);\n\n // 使用精确订阅\n const agentState = useAgentStateDataByKey(targetStateKey);\n\n // 缓存组件 props\n const componentProps = useMemo<ToolcallComponentProps>(\n () => ({\n status: actionState.status,\n args,\n result: actionState.result,\n error: actionState.error,\n respond: handleRespond,\n agentState,\n }),\n [actionState.status, args, actionState.result, actionState.error, handleRespond, agentState],\n );\n\n // 使用registry的缓存渲染函数\n const MemoizedComponent = useMemo(\n () => agentToolcallRegistry.getRenderFunction(toolCall.toolCallName),\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [toolCall.toolCallName, isRegistered],\n );\n\n if (!MemoizedComponent) {\n return null;\n }\n\n return (\n <ToolCallErrorBoundary toolCallName={toolCall.toolCallName}>\n <MemoizedComponent {...componentProps} />\n </ToolCallErrorBoundary>\n );\n },\n (prevProps, nextProps) =>\n prevProps.toolCall.toolCallId === nextProps.toolCall.toolCallId &&\n prevProps.toolCall.toolCallName === nextProps.toolCall.toolCallName &&\n prevProps.toolCall.args === nextProps.toolCall.args &&\n prevProps.toolCall.result === nextProps.toolCall.result &&\n prevProps.onRespond === nextProps.onRespond,\n);\n// 用于调试,可以在控制台查看每次渲染的参数\n// (prevProps, nextProps) => {\n// const toolCallIdSame = prevProps.toolCall.toolCallId === nextProps.toolCall.toolCallId;\n// const toolCallNameSame = prevProps.toolCall.toolCallName === nextProps.toolCall.toolCallName;\n// const argsSame = prevProps.toolCall.args === nextProps.toolCall.args;\n// const resultSame = prevProps.toolCall.result === nextProps.toolCall.result;\n// const onRespondSame = prevProps.onRespond === nextProps.onRespond;\n\n// console.log(`ToolCallRenderer memo 详细检查 [${prevProps.toolCall.toolCallName}]:`, {\n// toolCallIdSame,\n// toolCallNameSame,\n// argsSame,\n// resultSame,\n// onRespondSame,\n// prevToolCallId: prevProps.toolCall.toolCallId,\n// nextToolCallId: nextProps.toolCall.toolCallId,\n// prevOnRespond: prevProps.onRespond,\n// nextOnRespond: nextProps.onRespond,\n// });\n\n// const shouldSkip = toolCallIdSame && toolCallNameSame && argsSame && resultSame && onRespondSame;\n\n// console.log(`ToolCallRenderer memo 检查 [${prevProps.toolCall.toolCallName}]:`, shouldSkip ? '跳过渲染' : '需要重新渲染');\n// return shouldSkip\n// },\n// );\n\n// 定义增强后的 Props 类型\ntype WithAgentStateProps<P> = P & { agentState?: Record<string, any> };\n\nexport const withAgentStateToolcall1 = <P extends object>(\n Component: React.ComponentType<WithAgentStateProps<P>>,\n): React.ComponentType<P> => {\n const WrappedComponent: React.FC<P> = (props: P) => (\n <AgentStateContext.Consumer>\n {(context) => {\n if (!context) {\n console.warn('AgentStateContext not found, component will render without state');\n return <Component {...props} />;\n }\n\n return <Component {...props} agentState={context.stateMap} />;\n }}\n </AgentStateContext.Consumer>\n );\n\n WrappedComponent.displayName = `withAgentState(${Component.displayName || Component.name || 'Component'})`;\n return React.memo(WrappedComponent);\n};\n\nexport const withAgentStateToolcall = <P extends object>(\n Component: React.ComponentType<WithAgentStateProps<P>>,\n subscribeKeyExtractor?: (props: P) => string | undefined,\n): React.ComponentType<P> => {\n const WrappedComponent: React.FC<P> = (props: P) => {\n // 计算需要订阅的 stateKey\n const targetStateKey = useMemo(() => (subscribeKeyExtractor ? subscribeKeyExtractor(props) : undefined), [props]);\n\n const agentState = useAgentStateDataByKey(targetStateKey);\n\n return <Component {...props} agentState={agentState} />;\n };\n\n WrappedComponent.displayName = `withAgentState(${Component.displayName || Component.name || 'Component'})`;\n return React.memo(WrappedComponent);\n};\n"],"names":["ToolCallErrorBoundary","props","_this","_classCallCheck","_callSuper","state","hasError","error","_inherits","_Component","_createClass","key","value","componentDidCatch","errorInfo","console","toolCallName","render","children","getDerivedStateFromError","Component","ToolCallRenderer","React","memo","_ref","toolCall","onRespond","_useState","useState","status","_useState2","_slicedToArray","actionState","setActionState","config","useMemo","cfg","agentToolcallRegistry","get","_useState3","getRenderFunction","_useState4","isRegistered","setIsRegistered","args","JSON","parse","handleRespond","useCallback","response","prev","_objectSpread","result","toolCallId","useEffect","isNonInteractiveConfig","executeHandler","_callee","backendResult","_t","_regeneratorRuntime","wrap","_context","next","warn","handler","sent","stop","subscribeKeyExtractor","subscribeKey","targetStateKey","fullProps","respond","handleRegistered","event","_event$detail","detail","name","window","addEventListener","removeEventListener","agentState","useAgentStateDataByKey","componentProps","MemoizedComponent","createElement","prevProps","nextProps","withAgentStateToolcall1","WrappedComponent","AgentStateContext","Consumer","context","stateMap","displayName","concat","withAgentStateToolcall"],"mappings":"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"}
@@ -1,5 +1,5 @@
1
1
  /**
2
- * tdesign v1.0.2-alpha.5
2
+ * tdesign v1.0.2-alpha.6
3
3
  * (c) 2026 tdesign
4
4
  * @license MIT
5
5
  */
@@ -0,0 +1,109 @@
1
+ import type { AIMessageContent, SSEChunkData, ToolCall } from '../../type';
2
+ /**
3
+ * AGUIEventMapper
4
+ * 将AG-UI协议事件(SSEChunkData)转换为AIContentChunkUpdate
5
+ * 支持多轮对话、增量文本、工具调用、思考、状态快照、消息快照等基础事件
6
+ * 同时提供状态变更和步骤生命周期事件的分发机制
7
+ */
8
+ export declare class AGUIEventMapper {
9
+ private toolCallMap;
10
+ private toolCallEnded;
11
+ private currentActivity;
12
+ private reasoningContext;
13
+ /**
14
+ * 主入口:将SSE事件转换为AIContentChunkUpdate
15
+ *
16
+ * @param chunk SSE数据块,其中data字段可能是字符串(需要解析)或已解析的对象
17
+ */
18
+ mapEvent(chunk: SSEChunkData): AIMessageContent | AIMessageContent[] | null;
19
+ /**
20
+ * 获取当前所有工具调用
21
+ */
22
+ getToolCalls(): ToolCall[];
23
+ /**
24
+ * 清除指定工具调用
25
+ */
26
+ clearToolCall(toolCallId: string): void;
27
+ /**
28
+ * 获取指定工具调用
29
+ */
30
+ getToolCall(toolCallId: string): ToolCall | undefined;
31
+ /**
32
+ * 检查工具调用是否已结束
33
+ */
34
+ isToolCallEnded(toolCallId: string): boolean;
35
+ reset(): void;
36
+ /**
37
+ * 处理文本消息事件
38
+ */
39
+ private handleTextMessageEvent;
40
+ /**
41
+ * 处理思考事件
42
+ */
43
+ private handleThinkingEvent;
44
+ /**
45
+ * 处理工具调用事件
46
+ */
47
+ private handleToolCallEvent;
48
+ /**
49
+ * 处理活动事件
50
+ */
51
+ private handleActivityEvent;
52
+ /**
53
+ * 处理状态事件
54
+ */
55
+ private handleStateEvent;
56
+ /**
57
+ * 处理其他事件
58
+ */
59
+ private handleOtherEvent;
60
+ /**
61
+ * 处理思考开始事件
62
+ */
63
+ private handleThinkingStart;
64
+ /**
65
+ * 处理思考文本开始事件
66
+ */
67
+ private handleThinkingTextStart;
68
+ /**
69
+ * 处理思考文本内容事件
70
+ */
71
+ private handleThinkingTextContent;
72
+ /**
73
+ * 处理思考文本结束事件
74
+ */
75
+ private handleThinkingTextEnd;
76
+ /**
77
+ * 处理思考结束事件
78
+ */
79
+ private handleThinkingEnd;
80
+ /**
81
+ * 处理工具调用开始事件
82
+ */
83
+ private handleToolCallStart;
84
+ /**
85
+ * 处理工具调用参数事件
86
+ */
87
+ private handleToolCallArgs;
88
+ /**
89
+ * 处理工具调用块事件
90
+ */
91
+ private handleToolCallChunk;
92
+ /**
93
+ * 处理工具调用结果事件
94
+ */
95
+ private handleToolCallResult;
96
+ /**
97
+ * 处理工具调用结束事件
98
+ */
99
+ private handleToolCallEnd;
100
+ /**
101
+ * 在上下文中更新工具调用
102
+ */
103
+ private updateToolCallInContext;
104
+ /**
105
+ * 重置 reasoning 上下文
106
+ */
107
+ private resetReasoningContext;
108
+ }
109
+ export default AGUIEventMapper;
@@ -0,0 +1,370 @@
1
+ /**
2
+ * tdesign v1.0.2-alpha.6
3
+ * (c) 2026 tdesign
4
+ * @license MIT
5
+ */
6
+
7
+ import _toConsumableArray from '@babel/runtime/helpers/toConsumableArray';
8
+ import _classCallCheck from '@babel/runtime/helpers/classCallCheck';
9
+ import _createClass from '@babel/runtime/helpers/createClass';
10
+ import _defineProperty from '@babel/runtime/helpers/defineProperty';
11
+ import { isTextMessageEvent, isThinkingEvent, isToolCallEvent, isActivityEvent, isStateEvent, EventType } from './events.js';
12
+ import { stateManager } from './state-manager.js';
13
+ import { applyJsonPatch } from '../../utils/index.js';
14
+ import { parseSSEData, createMarkdownContent, createActivityContent, createTextContent, handleCustomEvent, handleMessagesSnapshot, createReasoningContent, addToReasoningData, createThinkingContent, mergeStringContent, updateReasoningData, createToolCallContent, updateToolCall, handleSuggestionToolCall } from './utils.js';
15
+ import 'zod';
16
+ import './types.js';
17
+ import '@babel/runtime/helpers/possibleConstructorReturn';
18
+ import '@babel/runtime/helpers/getPrototypeOf';
19
+ import '@babel/runtime/helpers/inherits';
20
+ import '@babel/runtime/helpers/wrapNativeSuper';
21
+ import '@babel/runtime/helpers/slicedToArray';
22
+ import '@babel/runtime/helpers/typeof';
23
+
24
+ function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
25
+ function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
26
+ var AGUIEventMapper = /*#__PURE__*/function () {
27
+ function AGUIEventMapper() {
28
+ _classCallCheck(this, AGUIEventMapper);
29
+ _defineProperty(this, "toolCallMap", {});
30
+ _defineProperty(this, "toolCallEnded", /* @__PURE__ */new Set());
31
+ _defineProperty(this, "currentActivity", null);
32
+ _defineProperty(this, "reasoningContext", {
33
+ active: false,
34
+ currentData: [],
35
+ currentDataIndex: 0
36
+ });
37
+ }
38
+ return _createClass(AGUIEventMapper, [{
39
+ key: "mapEvent",
40
+ value: function mapEvent(chunk) {
41
+ var event = parseSSEData(chunk.data);
42
+ if (!(event !== null && event !== void 0 && event.type)) return null;
43
+ if (isTextMessageEvent(event.type)) {
44
+ return this.handleTextMessageEvent(event);
45
+ }
46
+ if (isThinkingEvent(event.type)) {
47
+ return this.handleThinkingEvent(event);
48
+ }
49
+ if (isToolCallEvent(event.type)) {
50
+ return this.handleToolCallEvent(event);
51
+ }
52
+ if (isActivityEvent(event.type)) {
53
+ return this.handleActivityEvent(event);
54
+ }
55
+ if (isStateEvent(event.type)) {
56
+ return this.handleStateEvent(event);
57
+ }
58
+ return this.handleOtherEvent(event);
59
+ }
60
+ }, {
61
+ key: "getToolCalls",
62
+ value: function getToolCalls() {
63
+ return Object.values(this.toolCallMap);
64
+ }
65
+ }, {
66
+ key: "clearToolCall",
67
+ value: function clearToolCall(toolCallId) {
68
+ delete this.toolCallMap[toolCallId];
69
+ this.toolCallEnded["delete"](toolCallId);
70
+ }
71
+ }, {
72
+ key: "getToolCall",
73
+ value: function getToolCall(toolCallId) {
74
+ return this.toolCallMap[toolCallId];
75
+ }
76
+ }, {
77
+ key: "isToolCallEnded",
78
+ value: function isToolCallEnded(toolCallId) {
79
+ return this.toolCallEnded.has(toolCallId);
80
+ }
81
+ }, {
82
+ key: "reset",
83
+ value: function reset() {
84
+ this.toolCallMap = {};
85
+ this.toolCallEnded.clear();
86
+ this.currentActivity = null;
87
+ this.resetReasoningContext();
88
+ }
89
+ }, {
90
+ key: "handleTextMessageEvent",
91
+ value: function handleTextMessageEvent(event) {
92
+ switch (event.type) {
93
+ case EventType.TEXT_MESSAGE_START:
94
+ return createMarkdownContent("", "streaming", "append");
95
+ case EventType.TEXT_MESSAGE_CHUNK:
96
+ case EventType.TEXT_MESSAGE_CONTENT:
97
+ case EventType.TEXT_MESSAGE_END:
98
+ return createMarkdownContent(event.delta || "", event.type === EventType.TEXT_MESSAGE_END ? "complete" : "streaming", "merge");
99
+ default:
100
+ return null;
101
+ }
102
+ }
103
+ }, {
104
+ key: "handleThinkingEvent",
105
+ value: function handleThinkingEvent(event) {
106
+ switch (event.type) {
107
+ case EventType.THINKING_START:
108
+ return this.handleThinkingStart();
109
+ case EventType.THINKING_TEXT_MESSAGE_START:
110
+ return this.handleThinkingTextStart(event);
111
+ case EventType.THINKING_TEXT_MESSAGE_CONTENT:
112
+ return this.handleThinkingTextContent(event);
113
+ case EventType.THINKING_TEXT_MESSAGE_END:
114
+ return this.handleThinkingTextEnd(event);
115
+ case EventType.THINKING_END:
116
+ return this.handleThinkingEnd();
117
+ default:
118
+ return null;
119
+ }
120
+ }
121
+ }, {
122
+ key: "handleToolCallEvent",
123
+ value: function handleToolCallEvent(event) {
124
+ switch (event.type) {
125
+ case EventType.TOOL_CALL_START:
126
+ return this.handleToolCallStart(event);
127
+ case EventType.TOOL_CALL_ARGS:
128
+ return this.handleToolCallArgs(event);
129
+ case EventType.TOOL_CALL_CHUNK:
130
+ return this.handleToolCallChunk(event);
131
+ case EventType.TOOL_CALL_RESULT:
132
+ return this.handleToolCallResult(event);
133
+ case EventType.TOOL_CALL_END:
134
+ return this.handleToolCallEnd(event);
135
+ default:
136
+ return null;
137
+ }
138
+ }
139
+ }, {
140
+ key: "handleActivityEvent",
141
+ value: function handleActivityEvent(event) {
142
+ switch (event.type) {
143
+ case EventType.ACTIVITY_SNAPSHOT:
144
+ this.currentActivity = {
145
+ activityType: event.activityType,
146
+ content: event.content
147
+ };
148
+ return createActivityContent(this.currentActivity.activityType, this.currentActivity.content, "streaming", "append");
149
+ case EventType.ACTIVITY_DELTA:
150
+ if (this.currentActivity) {
151
+ var newContent = this.currentActivity.content;
152
+ if (event.patch && Array.isArray(event.patch)) {
153
+ newContent = applyJsonPatch(this.currentActivity.content, event.patch);
154
+ }
155
+ this.currentActivity.content = newContent;
156
+ return createActivityContent(this.currentActivity.activityType, this.currentActivity.content, "streaming", "merge");
157
+ }
158
+ return null;
159
+ default:
160
+ return null;
161
+ }
162
+ }
163
+ }, {
164
+ key: "handleStateEvent",
165
+ value: function handleStateEvent(event) {
166
+ stateManager.handleStateEvent(event);
167
+ return null;
168
+ }
169
+ }, {
170
+ key: "handleOtherEvent",
171
+ value: function handleOtherEvent(event) {
172
+ switch (event.type) {
173
+ case EventType.MESSAGES_SNAPSHOT:
174
+ return handleMessagesSnapshot(event.messages);
175
+ case EventType.CUSTOM:
176
+ return handleCustomEvent(event);
177
+ case EventType.RUN_ERROR:
178
+ return [createTextContent(event.message || event.error || "\u7CFB\u7EDF\u672A\u77E5\u9519\u8BEF", "error")];
179
+ default:
180
+ return null;
181
+ }
182
+ }
183
+ }, {
184
+ key: "handleThinkingStart",
185
+ value: function handleThinkingStart() {
186
+ this.reasoningContext.active = true;
187
+ this.reasoningContext.currentData = [];
188
+ this.reasoningContext.currentDataIndex = 0;
189
+ return createReasoningContent([], "streaming", "append", false);
190
+ }
191
+ }, {
192
+ key: "handleThinkingTextStart",
193
+ value: function handleThinkingTextStart(event) {
194
+ if (this.reasoningContext.active) {
195
+ var newTextContent = createTextContent("", "streaming");
196
+ var _addToReasoningData = addToReasoningData(this.reasoningContext.currentData, newTextContent),
197
+ data = _addToReasoningData.data,
198
+ index = _addToReasoningData.index;
199
+ this.reasoningContext.currentData = data;
200
+ this.reasoningContext.currentDataIndex = index;
201
+ return createReasoningContent(data, "streaming", "merge", false);
202
+ }
203
+ return createThinkingContent({
204
+ title: event.title || "\u601D\u8003\u4E2D..."
205
+ }, "streaming", "append", false);
206
+ }
207
+ }, {
208
+ key: "handleThinkingTextContent",
209
+ value: function handleThinkingTextContent(event) {
210
+ if (this.reasoningContext.active) {
211
+ var currentIndex = this.reasoningContext.currentDataIndex;
212
+ if (currentIndex >= 0 && this.reasoningContext.currentData[currentIndex]) {
213
+ var currentContent = this.reasoningContext.currentData[currentIndex];
214
+ if (currentContent.type === "text") {
215
+ var currentText = currentContent.data || "";
216
+ var newText = mergeStringContent(currentText, event.delta || "");
217
+ var updatedContent = _objectSpread(_objectSpread({}, currentContent), {}, {
218
+ data: newText,
219
+ status: "streaming"
220
+ });
221
+ this.reasoningContext.currentData = updateReasoningData(this.reasoningContext.currentData, currentIndex, updatedContent);
222
+ return createReasoningContent(this.reasoningContext.currentData, "streaming", "merge", false);
223
+ }
224
+ }
225
+ return null;
226
+ }
227
+ return createThinkingContent({
228
+ text: event.delta
229
+ }, "streaming", "merge", false);
230
+ }
231
+ }, {
232
+ key: "handleThinkingTextEnd",
233
+ value: function handleThinkingTextEnd(event) {
234
+ if (this.reasoningContext.active) {
235
+ var currentIndex = this.reasoningContext.currentDataIndex;
236
+ if (currentIndex >= 0 && this.reasoningContext.currentData[currentIndex]) {
237
+ var currentContent = this.reasoningContext.currentData[currentIndex];
238
+ if (currentContent.type === "text") {
239
+ var updatedContent = _objectSpread(_objectSpread({}, currentContent), {}, {
240
+ status: "complete"
241
+ });
242
+ this.reasoningContext.currentData = updateReasoningData(this.reasoningContext.currentData, currentIndex, updatedContent);
243
+ return createReasoningContent(this.reasoningContext.currentData, "streaming", "merge", false);
244
+ }
245
+ }
246
+ return null;
247
+ }
248
+ return createThinkingContent({
249
+ title: event.title || "\u601D\u8003\u7ED3\u675F"
250
+ }, "complete", "merge", true);
251
+ }
252
+ }, {
253
+ key: "handleThinkingEnd",
254
+ value: function handleThinkingEnd() {
255
+ if (this.reasoningContext.active) {
256
+ var finalData = _toConsumableArray(this.reasoningContext.currentData);
257
+ this.resetReasoningContext();
258
+ return createReasoningContent(finalData, "complete", "merge", true);
259
+ }
260
+ return null;
261
+ }
262
+ }, {
263
+ key: "handleToolCallStart",
264
+ value: function handleToolCallStart(event) {
265
+ this.toolCallMap[event.toolCallId] = {
266
+ eventType: "TOOL_CALL_START",
267
+ toolCallId: event.toolCallId,
268
+ toolCallName: event.toolCallName,
269
+ parentMessageId: event.parentMessageId || ""
270
+ };
271
+ var toolCallContent = createToolCallContent(this.toolCallMap[event.toolCallId], "pending", "append");
272
+ if (this.reasoningContext.active) {
273
+ var _addToReasoningData2 = addToReasoningData(this.reasoningContext.currentData, toolCallContent),
274
+ data = _addToReasoningData2.data,
275
+ index = _addToReasoningData2.index;
276
+ this.reasoningContext.currentData = data;
277
+ this.reasoningContext.currentDataIndex = index;
278
+ return createReasoningContent(data, "streaming", "merge", false);
279
+ }
280
+ return toolCallContent;
281
+ }
282
+ }, {
283
+ key: "handleToolCallArgs",
284
+ value: function handleToolCallArgs(event) {
285
+ if (!this.toolCallMap[event.toolCallId]) return null;
286
+ var currentArgs = this.toolCallMap[event.toolCallId].args || "";
287
+ var newArgs = mergeStringContent(currentArgs, event.delta || "");
288
+ this.toolCallMap[event.toolCallId] = updateToolCall(this.toolCallMap[event.toolCallId], {
289
+ eventType: "TOOL_CALL_ARGS",
290
+ args: newArgs
291
+ });
292
+ return this.updateToolCallInContext(event.toolCallId, "streaming");
293
+ }
294
+ }, {
295
+ key: "handleToolCallChunk",
296
+ value: function handleToolCallChunk(event) {
297
+ if (!this.toolCallMap[event.toolCallId]) return null;
298
+ var currentChunk = this.toolCallMap[event.toolCallId].chunk || "";
299
+ var newChunk = mergeStringContent(currentChunk, event.delta || "");
300
+ this.toolCallMap[event.toolCallId] = updateToolCall(this.toolCallMap[event.toolCallId], {
301
+ eventType: "TOOL_CALL_CHUNK",
302
+ chunk: newChunk
303
+ });
304
+ return this.updateToolCallInContext(event.toolCallId, "streaming");
305
+ }
306
+ }, {
307
+ key: "handleToolCallResult",
308
+ value: function handleToolCallResult(event) {
309
+ if (!this.toolCallMap[event.toolCallId]) return null;
310
+ var currentResult = this.toolCallMap[event.toolCallId].result || "";
311
+ var newResult = mergeStringContent(currentResult, event.content || "");
312
+ this.toolCallMap[event.toolCallId] = updateToolCall(this.toolCallMap[event.toolCallId], {
313
+ eventType: EventType.TOOL_CALL_RESULT,
314
+ result: newResult
315
+ });
316
+ var suggestionContent = handleSuggestionToolCall(this.toolCallMap[event.toolCallId]);
317
+ if (suggestionContent) {
318
+ if (this.reasoningContext.active) {
319
+ var currentIndex = this.reasoningContext.currentDataIndex;
320
+ if (currentIndex >= 0 && this.reasoningContext.currentData[currentIndex]) {
321
+ this.reasoningContext.currentData = updateReasoningData(this.reasoningContext.currentData, currentIndex, suggestionContent);
322
+ return createReasoningContent(this.reasoningContext.currentData, "streaming", "merge", false);
323
+ }
324
+ } else {
325
+ return suggestionContent;
326
+ }
327
+ }
328
+ return this.updateToolCallInContext(event.toolCallId, "complete");
329
+ }
330
+ }, {
331
+ key: "handleToolCallEnd",
332
+ value: function handleToolCallEnd(event) {
333
+ this.toolCallEnded.add(event.toolCallId);
334
+ return this.updateToolCallInContext(event.toolCallId, "complete");
335
+ }
336
+ }, {
337
+ key: "updateToolCallInContext",
338
+ value: function updateToolCallInContext(toolCallId, status) {
339
+ if (this.reasoningContext.active) {
340
+ var currentIndex = this.reasoningContext.currentDataIndex;
341
+ if (currentIndex >= 0 && this.reasoningContext.currentData[currentIndex]) {
342
+ var currentContent = this.reasoningContext.currentData[currentIndex];
343
+ var currentType = currentContent.type;
344
+ if (currentType.startsWith("toolcall")) {
345
+ var updatedContent = _objectSpread(_objectSpread({}, currentContent), {}, {
346
+ data: this.toolCallMap[toolCallId],
347
+ status: status
348
+ });
349
+ this.reasoningContext.currentData = updateReasoningData(this.reasoningContext.currentData, currentIndex, updatedContent);
350
+ return createReasoningContent(this.reasoningContext.currentData, "streaming", "merge", false);
351
+ }
352
+ }
353
+ return null;
354
+ }
355
+ return createToolCallContent(this.toolCallMap[toolCallId], status, "merge");
356
+ }
357
+ }, {
358
+ key: "resetReasoningContext",
359
+ value: function resetReasoningContext() {
360
+ this.reasoningContext = {
361
+ active: false,
362
+ currentData: [],
363
+ currentDataIndex: 0
364
+ };
365
+ }
366
+ }]);
367
+ }();
368
+
369
+ export { AGUIEventMapper, AGUIEventMapper as default };
370
+ //# sourceMappingURL=event-mapper.js.map