@tdesign-react/chat 1.0.0-beta.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +10 -0
- package/LICENSE +9 -0
- package/README.md +74 -0
- package/es/_util/_reactify.d.ts +7 -0
- package/es/_util/_reactify.js +381 -0
- package/es/_util/_reactify.js.map +1 -0
- package/es/_util/reactify.d.ts +7 -0
- package/es/_util/reactify.js +392 -0
- package/es/_util/reactify.js.map +1 -0
- package/es/_util/reactifyLazy.d.ts +16 -0
- package/es/_util/reactifyLazy.js +74 -0
- package/es/_util/reactifyLazy.js.map +1 -0
- package/es/_util/reactify_v2.d.ts +7 -0
- package/es/_util/reactify_v2.js +391 -0
- package/es/_util/reactify_v2.js.map +1 -0
- package/es/_util/useDynamicStyle.d.ts +4 -0
- package/es/_util/useDynamicStyle.js +40 -0
- package/es/_util/useDynamicStyle.js.map +1 -0
- package/es/chat-actionbar/index.d.ts +7 -0
- package/es/chat-actionbar/index.js +26 -0
- package/es/chat-actionbar/index.js.map +1 -0
- package/es/chat-attachments/index.d.ts +5 -0
- package/es/chat-attachments/index.js +26 -0
- package/es/chat-attachments/index.js.map +1 -0
- package/es/chat-filecard/index.d.ts +5 -0
- package/es/chat-filecard/index.js +26 -0
- package/es/chat-filecard/index.js.map +1 -0
- package/es/chat-loading/index.d.ts +5 -0
- package/es/chat-loading/index.js +26 -0
- package/es/chat-loading/index.js.map +1 -0
- package/es/chat-markdown/index.d.ts +6 -0
- package/es/chat-markdown/index.js +28 -0
- package/es/chat-markdown/index.js.map +1 -0
- package/es/chat-message/index.d.ts +5 -0
- package/es/chat-message/index.js +26 -0
- package/es/chat-message/index.js.map +1 -0
- package/es/chat-sender/index.d.ts +5 -0
- package/es/chat-sender/index.js +26 -0
- package/es/chat-sender/index.js.map +1 -0
- package/es/chat-thinking/index.d.ts +5 -0
- package/es/chat-thinking/index.js +27 -0
- package/es/chat-thinking/index.js.map +1 -0
- package/es/chatbot/components/provider/agent-state.d.ts +5 -0
- package/es/chatbot/components/provider/agent-state.js +28 -0
- package/es/chatbot/components/provider/agent-state.js.map +1 -0
- package/es/chatbot/components/toolcall/index.d.ts +3 -0
- package/es/chatbot/components/toolcall/index.js +19 -0
- package/es/chatbot/components/toolcall/index.js.map +1 -0
- package/es/chatbot/components/toolcall/registry.d.ts +35 -0
- package/es/chatbot/components/toolcall/registry.js +75 -0
- package/es/chatbot/components/toolcall/registry.js.map +1 -0
- package/es/chatbot/components/toolcall/render.d.ts +13 -0
- package/es/chatbot/components/toolcall/render.js +207 -0
- package/es/chatbot/components/toolcall/render.js.map +1 -0
- package/es/chatbot/components/toolcall/toolcallRenderer.d.ts +12 -0
- package/es/chatbot/components/toolcall/toolcallRenderer.js +132 -0
- package/es/chatbot/components/toolcall/toolcallRenderer.js.map +1 -0
- package/es/chatbot/components/toolcall/types.d.ts +57 -0
- package/es/chatbot/components/toolcall/types.js +15 -0
- package/es/chatbot/components/toolcall/types.js.map +1 -0
- package/es/chatbot/core/adapters/agui/event-mapper.d.ts +104 -0
- package/es/chatbot/core/adapters/agui/event-mapper.js +342 -0
- package/es/chatbot/core/adapters/agui/event-mapper.js.map +1 -0
- package/es/chatbot/core/adapters/agui/events.d.ts +1394 -0
- package/es/chatbot/core/adapters/agui/events.js +181 -0
- package/es/chatbot/core/adapters/agui/events.js.map +1 -0
- package/es/chatbot/core/adapters/agui/index.d.ts +75 -0
- package/es/chatbot/core/adapters/agui/index.js +165 -0
- package/es/chatbot/core/adapters/agui/index.js.map +1 -0
- package/es/chatbot/core/adapters/agui/state/StateManager.d.ts +60 -0
- package/es/chatbot/core/adapters/agui/state/StateManager.js +160 -0
- package/es/chatbot/core/adapters/agui/state/StateManager.js.map +1 -0
- package/es/chatbot/core/adapters/agui/state/types.d.ts +63 -0
- package/es/chatbot/core/adapters/agui/state/types.js +7 -0
- package/es/chatbot/core/adapters/agui/state/types.js.map +1 -0
- package/es/chatbot/core/adapters/agui/state-manager-fixed.d.ts +107 -0
- package/es/chatbot/core/adapters/agui/state-manager-fixed.js +189 -0
- package/es/chatbot/core/adapters/agui/state-manager-fixed.js.map +1 -0
- package/es/chatbot/core/adapters/agui/state-manager.d.ts +99 -0
- package/es/chatbot/core/adapters/agui/state-manager.js +168 -0
- package/es/chatbot/core/adapters/agui/state-manager.js.map +1 -0
- package/es/chatbot/core/adapters/agui/types.d.ts +760 -0
- package/es/chatbot/core/adapters/agui/types.js +89 -0
- package/es/chatbot/core/adapters/agui/types.js.map +1 -0
- package/es/chatbot/core/adapters/agui/utils.d.ts +188 -0
- package/es/chatbot/core/adapters/agui/utils.js +323 -0
- package/es/chatbot/core/adapters/agui/utils.js.map +1 -0
- package/es/chatbot/core/index.d.ts +131 -0
- package/es/chatbot/core/index.js +585 -0
- package/es/chatbot/core/index.js.map +1 -0
- package/es/chatbot/core/processor/index.d.ts +20 -0
- package/es/chatbot/core/processor/index.js +148 -0
- package/es/chatbot/core/processor/index.js.map +1 -0
- package/es/chatbot/core/server/batch-client.d.ts +20 -0
- package/es/chatbot/core/server/batch-client.js +114 -0
- package/es/chatbot/core/server/batch-client.js.map +1 -0
- package/es/chatbot/core/server/connection-manager.d.ts +39 -0
- package/es/chatbot/core/server/connection-manager.js +84 -0
- package/es/chatbot/core/server/connection-manager.js.map +1 -0
- package/es/chatbot/core/server/errors.d.ts +22 -0
- package/es/chatbot/core/server/errors.js +80 -0
- package/es/chatbot/core/server/errors.js.map +1 -0
- package/es/chatbot/core/server/index.d.ts +11 -0
- package/es/chatbot/core/server/index.js +26 -0
- package/es/chatbot/core/server/index.js.map +1 -0
- package/es/chatbot/core/server/llm-service.d.ts +44 -0
- package/es/chatbot/core/server/llm-service.js +198 -0
- package/es/chatbot/core/server/llm-service.js.map +1 -0
- package/es/chatbot/core/server/sse-client.d.ts +77 -0
- package/es/chatbot/core/server/sse-client.js +362 -0
- package/es/chatbot/core/server/sse-client.js.map +1 -0
- package/es/chatbot/core/server/sse-parser.d.ts +49 -0
- package/es/chatbot/core/server/sse-parser.js +116 -0
- package/es/chatbot/core/server/sse-parser.js.map +1 -0
- package/es/chatbot/core/server/types.d.ts +54 -0
- package/es/chatbot/core/server/types.js +28 -0
- package/es/chatbot/core/server/types.js.map +1 -0
- package/es/chatbot/core/store/message.d.ts +27 -0
- package/es/chatbot/core/store/message.js +263 -0
- package/es/chatbot/core/store/message.js.map +1 -0
- package/es/chatbot/core/store/model.d.ts +8 -0
- package/es/chatbot/core/store/model.js +65 -0
- package/es/chatbot/core/store/model.js.map +1 -0
- package/es/chatbot/core/store/reactiveState.d.ts +52 -0
- package/es/chatbot/core/store/reactiveState.js +1359 -0
- package/es/chatbot/core/store/reactiveState.js.map +1 -0
- package/es/chatbot/core/type.d.ts +238 -0
- package/es/chatbot/core/type.js +7 -0
- package/es/chatbot/core/type.js.map +1 -0
- package/es/chatbot/core/utils/eventEmitter.d.ts +10 -0
- package/es/chatbot/core/utils/eventEmitter.js +67 -0
- package/es/chatbot/core/utils/eventEmitter.js.map +1 -0
- package/es/chatbot/core/utils/index.d.ts +31 -0
- package/es/chatbot/core/utils/index.js +221 -0
- package/es/chatbot/core/utils/index.js.map +1 -0
- package/es/chatbot/core/utils/logger.d.ts +30 -0
- package/es/chatbot/core/utils/logger.js +87 -0
- package/es/chatbot/core/utils/logger.js.map +1 -0
- package/es/chatbot/hooks/useAgentState.d.ts +40 -0
- package/es/chatbot/hooks/useAgentState.js +76 -0
- package/es/chatbot/hooks/useAgentState.js.map +1 -0
- package/es/chatbot/hooks/useAgentStateAction.d.ts +9 -0
- package/es/chatbot/hooks/useAgentStateAction.js +101 -0
- package/es/chatbot/hooks/useAgentStateAction.js.map +1 -0
- package/es/chatbot/hooks/useAgentToolcall.d.ts +28 -0
- package/es/chatbot/hooks/useAgentToolcall.js +78 -0
- package/es/chatbot/hooks/useAgentToolcall.js.map +1 -0
- package/es/chatbot/hooks/useAgentToolcallAction.d.ts +6 -0
- package/es/chatbot/hooks/useAgentToolcallAction.js +29 -0
- package/es/chatbot/hooks/useAgentToolcallAction.js.map +1 -0
- package/es/chatbot/hooks/useChat.d.ts +11 -0
- package/es/chatbot/hooks/useChat.js +66 -0
- package/es/chatbot/hooks/useChat.js.map +1 -0
- package/es/chatbot/index.d.ts +17 -0
- package/es/chatbot/index.js +43 -0
- package/es/chatbot/index.js.map +1 -0
- package/es/chatbot/useChat.d.ts +10 -0
- package/es/chatbot/useChat.js +55 -0
- package/es/chatbot/useChat.js.map +1 -0
- package/es/index.d.ts +11 -0
- package/es/index.js +55 -0
- package/es/index.js.map +1 -0
- package/es/style/index.d.ts +1 -0
- package/es/style/index.js +8 -0
- package/es/style/index.js.map +1 -0
- package/package.json +67 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"render.js","sources":["../../../../../pro-components/chat/chatbot/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 [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 }, [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 [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\n// 创建一个高阶组件来包装需要状态的工具组件\n// export const withAgentStateToolcall = <P extends object>(\n// Component: React.ComponentType<WithAgentStateProps<P>>,\n// ): React.ComponentType<P> => {\n// const WrappedComponent: React.FC<P> = (props: P) => {\n// // 尝试获取 Context 状态\n// let contextState: UseStateActionReturn['state'] | null = null;\n// try {\n// const context = useAgentStateContext();\n// console.log('====context', context);\n// contextState = context.state;\n// } catch {\n// // 如果没有 Context,则忽略\n// }\n\n// // 构造增强后的 props\n// const enhancedProps: WithAgentStateProps<P> = {\n// ...props,\n// ...(contextState && { agentState: contextState }),\n// };\n\n// return <Component {...enhancedProps} />;\n// };\n\n// // 设置 displayName 便于调试\n// WrappedComponent.displayName = `withAgentState(${Component.displayName || Component.name || 'Component'})`;\n\n// return React.memo(WrappedComponent);\n// };\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 console.log('====WrappedComponent', agentState, 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\n// interface SubscribeStrategy<TArgs = any> {\n// // 自定义状态选择器\n// stateSelector?: (stateMap: Record<string, any>, args: TArgs) => any;\n// // 依赖项,用于优化重新计算\n// deps?: (args: TArgs) => any[];\n// }\n\n// export const withAgentStateToolcall = <P extends object>(\n// Component: React.ComponentType<WithAgentStateProps<P>>,\n// subscribeStrategy?: SubscribeStrategy\n// ): React.ComponentType<P> => {\n// const WrappedComponent: React.FC<P> = (props: P) => {\n// const { stateMap } = useAgentStateContext();\n\n// // 使用自定义选择器\n// const selectedState = useMemo(() => {\n// if (!subscribeStrategy?.stateSelector) {\n// return stateMap;\n// }\n// return subscribeStrategy.stateSelector(stateMap, (props as any).args);\n// }, [\n// stateMap,\n// (props as any).args,\n// ...(subscribeStrategy?.deps?.((props as any).args) || [])\n// ]);\n\n// return <Component {...props} agentState={selectedState} />;\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","log"],"mappings":"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"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import type { ToolCall } from '../../core/type';
|
|
3
|
+
interface ToolCallRendererProps {
|
|
4
|
+
toolCall: ToolCall;
|
|
5
|
+
onRespond?: (toolCall: ToolCall, response: any) => void;
|
|
6
|
+
}
|
|
7
|
+
/**
|
|
8
|
+
* ToolCall 渲染器组件
|
|
9
|
+
* 根据注册的 AgentToolcallConfig 渲染对应的组件
|
|
10
|
+
*/
|
|
11
|
+
export declare const ToolCallRenderer: ({ toolCall, onRespond, }: ToolCallRendererProps) => React.ReactElement<any, any> | null;
|
|
12
|
+
export {};
|
|
@@ -0,0 +1,132 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* tdesign v1.0.1-beta.25
|
|
3
|
+
* (c) 2025 tdesign
|
|
4
|
+
* @license MIT
|
|
5
|
+
*/
|
|
6
|
+
|
|
7
|
+
import _asyncToGenerator from '@babel/runtime/helpers/asyncToGenerator';
|
|
8
|
+
import _defineProperty from '@babel/runtime/helpers/defineProperty';
|
|
9
|
+
import _slicedToArray from '@babel/runtime/helpers/slicedToArray';
|
|
10
|
+
import _regeneratorRuntime from '@babel/runtime/regenerator';
|
|
11
|
+
import React, { useState, useCallback, useEffect } from 'react';
|
|
12
|
+
import { agentToolcallRegistry } from './registry.js';
|
|
13
|
+
import '@babel/runtime/helpers/classCallCheck';
|
|
14
|
+
import '@babel/runtime/helpers/createClass';
|
|
15
|
+
|
|
16
|
+
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; }
|
|
17
|
+
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; }
|
|
18
|
+
var ToolCallRenderer = function ToolCallRenderer(_ref) {
|
|
19
|
+
var toolCall = _ref.toolCall,
|
|
20
|
+
onRespond = _ref.onRespond;
|
|
21
|
+
var _useState = useState({
|
|
22
|
+
status: "idle"
|
|
23
|
+
}),
|
|
24
|
+
_useState2 = _slicedToArray(_useState, 2),
|
|
25
|
+
actionState = _useState2[0],
|
|
26
|
+
setActionState = _useState2[1];
|
|
27
|
+
var config = agentToolcallRegistry.get(toolCall.toolCallName);
|
|
28
|
+
var args = React.useMemo(function () {
|
|
29
|
+
try {
|
|
30
|
+
return toolCall.args ? JSON.parse(toolCall.args) : {};
|
|
31
|
+
} catch (error) {
|
|
32
|
+
console.error("\u89E3\u6790\u5DE5\u5177\u8C03\u7528\u53C2\u6570\u5931\u8D25:", error);
|
|
33
|
+
return {};
|
|
34
|
+
}
|
|
35
|
+
}, [toolCall.args]);
|
|
36
|
+
var handleRespond = useCallback(function (response) {
|
|
37
|
+
if (onRespond) {
|
|
38
|
+
onRespond(toolCall, response);
|
|
39
|
+
setActionState(function (prev) {
|
|
40
|
+
return _objectSpread(_objectSpread({}, prev), {}, {
|
|
41
|
+
status: "complete",
|
|
42
|
+
result: response
|
|
43
|
+
});
|
|
44
|
+
});
|
|
45
|
+
}
|
|
46
|
+
}, [toolCall.toolCallId, onRespond]);
|
|
47
|
+
useEffect(function () {
|
|
48
|
+
if (!config) return;
|
|
49
|
+
var isNonInteractiveConfig = function isNonInteractiveConfig(cfg) {
|
|
50
|
+
return typeof cfg.handler === "function";
|
|
51
|
+
};
|
|
52
|
+
if (isNonInteractiveConfig(config)) {
|
|
53
|
+
var executeHandler = /*#__PURE__*/function () {
|
|
54
|
+
var _ref2 = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee() {
|
|
55
|
+
var backendResult, result, _t;
|
|
56
|
+
return _regeneratorRuntime.wrap(function (_context) {
|
|
57
|
+
while (1) switch (_context.prev = _context.next) {
|
|
58
|
+
case 0:
|
|
59
|
+
_context.prev = 0;
|
|
60
|
+
setActionState({
|
|
61
|
+
status: "executing"
|
|
62
|
+
});
|
|
63
|
+
if (toolCall.result) {
|
|
64
|
+
try {
|
|
65
|
+
backendResult = JSON.parse(toolCall.result);
|
|
66
|
+
} catch (error) {
|
|
67
|
+
console.warn("\u89E3\u6790\u540E\u7AEF\u7ED3\u679C\u5931\u8D25\uFF0C\u4F7F\u7528\u539F\u59CB\u5B57\u7B26\u4E32:", error);
|
|
68
|
+
backendResult = toolCall.result;
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
_context.next = 1;
|
|
72
|
+
return config.handler(args, backendResult);
|
|
73
|
+
case 1:
|
|
74
|
+
result = _context.sent;
|
|
75
|
+
setActionState({
|
|
76
|
+
status: "complete",
|
|
77
|
+
result: result
|
|
78
|
+
});
|
|
79
|
+
_context.next = 3;
|
|
80
|
+
break;
|
|
81
|
+
case 2:
|
|
82
|
+
_context.prev = 2;
|
|
83
|
+
_t = _context["catch"](0);
|
|
84
|
+
setActionState({
|
|
85
|
+
status: "error",
|
|
86
|
+
error: _t
|
|
87
|
+
});
|
|
88
|
+
case 3:
|
|
89
|
+
case "end":
|
|
90
|
+
return _context.stop();
|
|
91
|
+
}
|
|
92
|
+
}, _callee, null, [[0, 2]]);
|
|
93
|
+
}));
|
|
94
|
+
return function executeHandler() {
|
|
95
|
+
return _ref2.apply(this, arguments);
|
|
96
|
+
};
|
|
97
|
+
}();
|
|
98
|
+
executeHandler();
|
|
99
|
+
} else if (toolCall.result) {
|
|
100
|
+
try {
|
|
101
|
+
var result = JSON.parse(toolCall.result);
|
|
102
|
+
setActionState({
|
|
103
|
+
status: "complete",
|
|
104
|
+
result: result
|
|
105
|
+
});
|
|
106
|
+
} catch (error) {
|
|
107
|
+
setActionState({
|
|
108
|
+
status: "error",
|
|
109
|
+
error: error
|
|
110
|
+
});
|
|
111
|
+
}
|
|
112
|
+
} else {
|
|
113
|
+
setActionState({
|
|
114
|
+
status: "executing"
|
|
115
|
+
});
|
|
116
|
+
}
|
|
117
|
+
}, [config, args, toolCall.result]);
|
|
118
|
+
if (!config) {
|
|
119
|
+
return null;
|
|
120
|
+
}
|
|
121
|
+
var componentProps = {
|
|
122
|
+
status: actionState.status,
|
|
123
|
+
args: args,
|
|
124
|
+
result: actionState.result,
|
|
125
|
+
error: actionState.error,
|
|
126
|
+
respond: handleRespond
|
|
127
|
+
};
|
|
128
|
+
return /*#__PURE__*/React.createElement(config.component, componentProps);
|
|
129
|
+
};
|
|
130
|
+
|
|
131
|
+
export { ToolCallRenderer };
|
|
132
|
+
//# sourceMappingURL=toolcallRenderer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"toolcallRenderer.js","sources":["../../../../../pro-components/chat/chatbot/components/toolcall/toolcallRenderer.tsx"],"sourcesContent":["import React, { useState, useEffect, useCallback } from 'react';\nimport type { ToolCall } from '../../core/type';\nimport type { AgentToolcallConfig, ToolcallComponentProps } from './types';\nimport { agentToolcallRegistry } from './registry';\n\ninterface ToolCallRendererProps {\n toolCall: ToolCall;\n onRespond?: (toolCall: ToolCall, response: any) => void;\n}\n\n/**\n * ToolCall 渲染器组件\n * 根据注册的 AgentToolcallConfig 渲染对应的组件\n */\nexport const ToolCallRenderer = ({\n toolCall,\n onRespond,\n}: ToolCallRendererProps): React.ReactElement<any, any> | null => {\n const [actionState, setActionState] = useState<{\n status: ToolcallComponentProps['status'];\n result?: any;\n error?: Error;\n }>({\n status: 'idle',\n });\n\n const config = agentToolcallRegistry.get(toolCall.toolCallName);\n\n // 解析参数 - 必须在条件判断之前调用\n const args = React.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 // 处理用户交互响应 - 必须在条件判断之前调用\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 [toolCall.toolCallId, onRespond],\n );\n\n // 执行 handler(如果存在)- 必须在条件判断之前调用\n useEffect(() => {\n if (!config) return;\n\n // 类型守卫函数\n const isNonInteractiveConfig = (cfg: AgentToolcallConfig): cfg is AgentToolcallConfig & { handler: Function } =>\n typeof (cfg as any).handler === 'function';\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 // 如果没有找到对应的配置,不渲染任何内容\n if (!config) {\n return null;\n }\n\n // 构造组件 props\n const componentProps: ToolcallComponentProps = {\n status: actionState.status,\n args,\n result: actionState.result,\n error: actionState.error,\n respond: handleRespond,\n };\n\n // 渲染对应的组件\n return React.createElement(config.component, componentProps);\n};\n"],"names":["ToolCallRenderer","toolCall","_ref","onRespond","_useState","useState","status","_useState2","_slicedToArray","actionState","setActionState","config","agentToolcallRegistry","get","toolCallName","args","React","useMemo","JSON","parse","error","console","handleRespond","useCallback","response","prev","_objectSpread","result","toolCallId","useEffect","isNonInteractiveConfig","cfg","handler","executeHandler","_callee","backendResult","_t","_regeneratorRuntime","wrap","_context","next","warn","sent","stop","componentProps","respond","createElement","component"],"mappings":"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"}
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
/**
|
|
3
|
+
* 智能体可交互组件的标准 Props 接口
|
|
4
|
+
*/
|
|
5
|
+
export interface ToolcallComponentProps<TArgs extends object = any, TResult = any, TResponse = any> {
|
|
6
|
+
/** 组件的当前渲染状态 */
|
|
7
|
+
status: 'idle' | 'inProgress' | 'executing' | 'complete' | 'error';
|
|
8
|
+
/** Agent 调用时传入的初始参数 */
|
|
9
|
+
args: TArgs;
|
|
10
|
+
/** 当 status 为 'complete' 时,包含 Toolcall 的最终执行结果 */
|
|
11
|
+
result?: TResult;
|
|
12
|
+
/** 当 status 为 'error' 时,包含错误信息 */
|
|
13
|
+
error?: Error;
|
|
14
|
+
/**
|
|
15
|
+
* 【交互核心】一个回调函数,用于将用户的交互结果返回给宿主环境。
|
|
16
|
+
* 仅在"交互式"场景下由宿主提供。
|
|
17
|
+
*/
|
|
18
|
+
respond?: (response: TResponse) => void;
|
|
19
|
+
agentState?: Record<string, any>;
|
|
20
|
+
}
|
|
21
|
+
interface NonInteractiveToolcallConfig<TArgs extends object, TResult> {
|
|
22
|
+
name: string;
|
|
23
|
+
description: string;
|
|
24
|
+
parameters: any[];
|
|
25
|
+
/** 业务逻辑执行器,支持可选的后端结果作为第二个参数 */
|
|
26
|
+
handler: (args: TArgs, backendResult?: any) => Promise<TResult>;
|
|
27
|
+
/** 状态显示组件 */
|
|
28
|
+
component: React.FC<ToolcallComponentProps<TArgs, TResult>>;
|
|
29
|
+
/** 订阅statekey提取函数 */
|
|
30
|
+
subscribeKey?: (props: ToolcallComponentProps<TArgs, TResult>) => string | undefined;
|
|
31
|
+
}
|
|
32
|
+
interface InteractiveToolcallConfig<TArgs extends object, TResult, TResponse> {
|
|
33
|
+
name: string;
|
|
34
|
+
description: string;
|
|
35
|
+
parameters?: any[];
|
|
36
|
+
/** 交互式UI组件 */
|
|
37
|
+
component: React.FC<ToolcallComponentProps<TArgs, TResult, TResponse>>;
|
|
38
|
+
/** handler 属性不存在,以此作为区分标志 */
|
|
39
|
+
handler?: never;
|
|
40
|
+
/** 订阅statekey提取函数 */
|
|
41
|
+
subscribeKey?: (props: ToolcallComponentProps<TArgs, TResult>) => string | undefined;
|
|
42
|
+
}
|
|
43
|
+
export type AgentToolcallConfig<TArgs extends object = any, TResult = any, TResponse = any> = NonInteractiveToolcallConfig<TArgs, TResult> | InteractiveToolcallConfig<TArgs, TResult, TResponse>;
|
|
44
|
+
export declare function isNonInteractive<TArgs extends object, TResult>(config: AgentToolcallConfig<TArgs, TResult, any>): config is NonInteractiveToolcallConfig<TArgs, TResult>;
|
|
45
|
+
export interface AgentToolcallRegistry {
|
|
46
|
+
[ToolcallName: string]: AgentToolcallConfig;
|
|
47
|
+
}
|
|
48
|
+
export interface AgentToolcallState<TArgs extends object = any, TResult = any> {
|
|
49
|
+
status: ToolcallComponentProps['status'];
|
|
50
|
+
args?: TArgs;
|
|
51
|
+
result?: TResult;
|
|
52
|
+
error?: Error;
|
|
53
|
+
}
|
|
54
|
+
export declare const isNonInteractiveConfig: (cfg: AgentToolcallConfig) => cfg is AgentToolcallConfig & {
|
|
55
|
+
handler: Function;
|
|
56
|
+
};
|
|
57
|
+
export {};
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* tdesign v1.0.0-beta.1
|
|
3
|
+
* (c) 2025 tdesign
|
|
4
|
+
* @license MIT
|
|
5
|
+
*/
|
|
6
|
+
|
|
7
|
+
function isNonInteractive(config) {
|
|
8
|
+
return typeof config.handler === "function";
|
|
9
|
+
}
|
|
10
|
+
var isNonInteractiveConfig = function isNonInteractiveConfig(cfg) {
|
|
11
|
+
return typeof cfg.handler === "function";
|
|
12
|
+
};
|
|
13
|
+
|
|
14
|
+
export { isNonInteractive, isNonInteractiveConfig };
|
|
15
|
+
//# sourceMappingURL=types.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sources":["../../../../../pro-components/chat/chatbot/components/toolcall/types.ts"],"sourcesContent":["import React from 'react';\n\n/**\n * 智能体可交互组件的标准 Props 接口\n */\nexport interface ToolcallComponentProps<TArgs extends object = any, TResult = any, TResponse = any> {\n /** 组件的当前渲染状态 */\n status: 'idle' | 'inProgress' | 'executing' | 'complete' | 'error';\n /** Agent 调用时传入的初始参数 */\n args: TArgs;\n /** 当 status 为 'complete' 时,包含 Toolcall 的最终执行结果 */\n result?: TResult;\n /** 当 status 为 'error' 时,包含错误信息 */\n error?: Error;\n /**\n * 【交互核心】一个回调函数,用于将用户的交互结果返回给宿主环境。\n * 仅在\"交互式\"场景下由宿主提供。\n */\n respond?: (response: TResponse) => void;\n agentState?: Record<string, any>;\n}\n\n// 场景一:非交互式 Toolcall 的配置 (有 handler)\ninterface NonInteractiveToolcallConfig<TArgs extends object, TResult> {\n name: string;\n description: string;\n parameters: any[];\n /** 业务逻辑执行器,支持可选的后端结果作为第二个参数 */\n handler: (args: TArgs, backendResult?: any) => Promise<TResult>;\n /** 状态显示组件 */\n component: React.FC<ToolcallComponentProps<TArgs, TResult>>;\n /** 订阅statekey提取函数 */\n subscribeKey?: (props: ToolcallComponentProps<TArgs, TResult>) => string | undefined;\n}\n\n// 场景二:交互式 Toolcall 的配置 (无 handler)\ninterface InteractiveToolcallConfig<TArgs extends object, TResult, TResponse> {\n name: string;\n description: string;\n parameters?: any[];\n /** 交互式UI组件 */\n component: React.FC<ToolcallComponentProps<TArgs, TResult, TResponse>>;\n /** handler 属性不存在,以此作为区分标志 */\n handler?: never;\n /** 订阅statekey提取函数 */\n subscribeKey?: (props: ToolcallComponentProps<TArgs, TResult>) => string | undefined;\n}\n\n// 最终的配置类型\nexport type AgentToolcallConfig<TArgs extends object = any, TResult = any, TResponse = any> =\n | NonInteractiveToolcallConfig<TArgs, TResult>\n | InteractiveToolcallConfig<TArgs, TResult, TResponse>;\n\n// 类型守卫:判断是否为非交互式配置\nexport function isNonInteractive<TArgs extends object, TResult>(\n config: AgentToolcallConfig<TArgs, TResult, any>,\n): config is NonInteractiveToolcallConfig<TArgs, TResult> {\n return typeof (config as any).handler === 'function';\n}\n\n// Agent Toolcall 注册表\nexport interface AgentToolcallRegistry {\n [ToolcallName: string]: AgentToolcallConfig;\n}\n\n// 内部状态管理\nexport interface AgentToolcallState<TArgs extends object = any, TResult = any> {\n status: ToolcallComponentProps['status'];\n args?: TArgs;\n result?: TResult;\n error?: Error;\n}\n\n// 类型守卫函数\nexport const isNonInteractiveConfig = (cfg: AgentToolcallConfig): cfg is AgentToolcallConfig & { handler: Function } =>\n typeof (cfg as any).handler === 'function';\n"],"names":["isNonInteractive","config","handler","isNonInteractiveConfig","cfg"],"mappings":";;;;;;AAsDO,SAASA,iBACdC,MACwD,EAAA;AACjD,EAAA,OAAA,OAAQA,OAAeC,OAAY,KAAA,UAAA,CAAA;AAC5C,CAAA;IAgBaC,sBAAyB,GAAA,SAAzBA,sBAAyBA,CAACC,GACrC,EAAA;AAAA,EAAA,OAAA,OAAQA,IAAYF,OAAY,KAAA,UAAA,CAAA;AAAA;;;;"}
|
|
@@ -0,0 +1,104 @@
|
|
|
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 reasoningContext;
|
|
12
|
+
/**
|
|
13
|
+
* 主入口:将SSE事件转换为AIContentChunkUpdate
|
|
14
|
+
*
|
|
15
|
+
* @param chunk SSE数据块,其中data字段可能是字符串(需要解析)或已解析的对象
|
|
16
|
+
*/
|
|
17
|
+
mapEvent(chunk: SSEChunkData): AIMessageContent | AIMessageContent[] | null;
|
|
18
|
+
/**
|
|
19
|
+
* 获取当前所有工具调用
|
|
20
|
+
*/
|
|
21
|
+
getToolCalls(): ToolCall[];
|
|
22
|
+
/**
|
|
23
|
+
* 清除指定工具调用
|
|
24
|
+
*/
|
|
25
|
+
clearToolCall(toolCallId: string): void;
|
|
26
|
+
/**
|
|
27
|
+
* 获取指定工具调用
|
|
28
|
+
*/
|
|
29
|
+
getToolCall(toolCallId: string): ToolCall | undefined;
|
|
30
|
+
/**
|
|
31
|
+
* 检查工具调用是否已结束
|
|
32
|
+
*/
|
|
33
|
+
isToolCallEnded(toolCallId: string): boolean;
|
|
34
|
+
reset(): void;
|
|
35
|
+
/**
|
|
36
|
+
* 处理文本消息事件
|
|
37
|
+
*/
|
|
38
|
+
private handleTextMessageEvent;
|
|
39
|
+
/**
|
|
40
|
+
* 处理思考事件
|
|
41
|
+
*/
|
|
42
|
+
private handleThinkingEvent;
|
|
43
|
+
/**
|
|
44
|
+
* 处理工具调用事件
|
|
45
|
+
*/
|
|
46
|
+
private handleToolCallEvent;
|
|
47
|
+
/**
|
|
48
|
+
* 处理状态事件
|
|
49
|
+
*/
|
|
50
|
+
private handleStateEvent;
|
|
51
|
+
/**
|
|
52
|
+
* 处理其他事件
|
|
53
|
+
*/
|
|
54
|
+
private handleOtherEvent;
|
|
55
|
+
/**
|
|
56
|
+
* 处理思考开始事件
|
|
57
|
+
*/
|
|
58
|
+
private handleThinkingStart;
|
|
59
|
+
/**
|
|
60
|
+
* 处理思考文本开始事件
|
|
61
|
+
*/
|
|
62
|
+
private handleThinkingTextStart;
|
|
63
|
+
/**
|
|
64
|
+
* 处理思考文本内容事件
|
|
65
|
+
*/
|
|
66
|
+
private handleThinkingTextContent;
|
|
67
|
+
/**
|
|
68
|
+
* 处理思考文本结束事件
|
|
69
|
+
*/
|
|
70
|
+
private handleThinkingTextEnd;
|
|
71
|
+
/**
|
|
72
|
+
* 处理思考结束事件
|
|
73
|
+
*/
|
|
74
|
+
private handleThinkingEnd;
|
|
75
|
+
/**
|
|
76
|
+
* 处理工具调用开始事件
|
|
77
|
+
*/
|
|
78
|
+
private handleToolCallStart;
|
|
79
|
+
/**
|
|
80
|
+
* 处理工具调用参数事件
|
|
81
|
+
*/
|
|
82
|
+
private handleToolCallArgs;
|
|
83
|
+
/**
|
|
84
|
+
* 处理工具调用块事件
|
|
85
|
+
*/
|
|
86
|
+
private handleToolCallChunk;
|
|
87
|
+
/**
|
|
88
|
+
* 处理工具调用结果事件
|
|
89
|
+
*/
|
|
90
|
+
private handleToolCallResult;
|
|
91
|
+
/**
|
|
92
|
+
* 处理工具调用结束事件
|
|
93
|
+
*/
|
|
94
|
+
private handleToolCallEnd;
|
|
95
|
+
/**
|
|
96
|
+
* 在上下文中更新工具调用
|
|
97
|
+
*/
|
|
98
|
+
private updateToolCallInContext;
|
|
99
|
+
/**
|
|
100
|
+
* 重置 reasoning 上下文
|
|
101
|
+
*/
|
|
102
|
+
private resetReasoningContext;
|
|
103
|
+
}
|
|
104
|
+
export default AGUIEventMapper;
|