@tdesign-react/chat 1.0.2-alpha.8 → 1.0.2
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 +18 -1
- package/es/_util/reactify.js +1 -1
- package/es/_util/useDynamicStyle.js +1 -1
- package/es/attachments/index.js +1 -1
- package/es/chat-actionbar/_example-js/base.d.ts +2 -0
- package/es/chat-actionbar/_example-js/custom.d.ts +2 -0
- package/es/chat-actionbar/_example-js/style.d.ts +2 -0
- package/es/chat-actionbar/index.js +1 -1
- package/es/chat-attachments/_example-js/base.d.ts +2 -0
- package/es/chat-attachments/_example-js/scroll-x.d.ts +2 -0
- package/es/chat-attachments/_example-js/scroll-y.d.ts +2 -0
- package/es/chat-attachments/index.js +3 -1
- package/es/chat-attachments/index.js.map +1 -1
- package/es/chat-engine/_example-js/agui-basic.d.ts +10 -0
- package/es/chat-engine/_example-js/agui-comprehensive.d.ts +2 -0
- package/es/chat-engine/_example-js/agui-test.d.ts +11 -0
- package/es/chat-engine/_example-js/agui-toolcall.d.ts +5 -0
- package/es/chat-engine/_example-js/agui-videoclip.d.ts +8 -0
- package/es/chat-engine/_example-js/agui.d.ts +1 -0
- package/es/chat-engine/_example-js/basic.d.ts +9 -0
- package/es/chat-engine/_example-js/components/HotelCard.d.ts +3 -0
- package/es/chat-engine/_example-js/components/HumanInputForm.d.ts +6 -0
- package/es/chat-engine/_example-js/components/HumanInputResult.d.ts +3 -0
- package/es/chat-engine/_example-js/components/ItineraryCard.d.ts +3 -0
- package/es/chat-engine/_example-js/components/PlanningStatePanel.d.ts +4 -0
- package/es/chat-engine/_example-js/components/Toolcall.d.ts +4 -0
- package/es/chat-engine/_example-js/components/WeatherCard.d.ts +3 -0
- package/es/chat-engine/_example-js/components/login.d.ts +1 -0
- package/es/chat-engine/_example-js/comprehensive.d.ts +12 -0
- package/es/chat-engine/_example-js/custom-content.d.ts +1 -0
- package/es/chat-engine/_example-js/hookComponent.d.ts +1 -0
- package/es/chat-engine/_example-js/initial-messages.d.ts +9 -0
- package/es/chat-engine/_example-js/instance-methods.d.ts +13 -0
- package/es/chat-engine/_example-js/travel-actions.d.ts +91 -0
- package/es/chat-engine/_example-js/travelToolcall.d.ts +1 -0
- package/es/chat-engine/components/activity/index.js +19 -0
- package/es/chat-engine/components/activity/registry.d.ts +44 -0
- package/es/{chatbot/components/toolcall → chat-engine/components/activity}/registry.js +32 -22
- package/es/chat-engine/components/activity/registry.js.map +1 -0
- package/es/chat-engine/components/activity/render.d.ts +15 -0
- package/es/chat-engine/components/activity/render.js +117 -0
- package/es/chat-engine/components/activity/render.js.map +1 -0
- package/es/chat-engine/components/activity/types.d.ts +29 -0
- package/es/chat-engine/components/activity/types.js +7 -0
- package/es/chat-engine/components/activity/types.js.map +1 -0
- package/es/chat-engine/components/index.d.ts +3 -0
- package/es/chat-engine/components/index.js +29 -0
- package/es/chat-engine/components/index.js.map +1 -0
- package/es/chat-engine/components/provider/agent-state.js +1 -1
- package/es/chat-engine/components/toolcall/index.js +5 -2
- package/es/chat-engine/components/toolcall/index.js.map +1 -1
- package/es/chat-engine/components/toolcall/registry.js +1 -1
- package/es/chat-engine/components/toolcall/render.d.ts +1 -1
- package/es/chat-engine/components/toolcall/render.js +72 -26
- package/es/chat-engine/components/toolcall/render.js.map +1 -1
- package/es/chat-engine/components/toolcall/types.js +1 -1
- package/es/chat-engine/hooks/index.d.ts +4 -0
- package/es/chat-engine/hooks/index.js +20 -0
- package/es/chat-engine/hooks/index.js.map +1 -0
- package/es/chat-engine/hooks/useAgentActivity.d.ts +15 -0
- package/es/chat-engine/hooks/useAgentActivity.js +73 -0
- package/es/chat-engine/hooks/useAgentActivity.js.map +1 -0
- package/es/chat-engine/hooks/useAgentState.js +1 -1
- package/es/chat-engine/hooks/useAgentState.js.map +1 -1
- package/es/chat-engine/hooks/useAgentToolcall.js +1 -1
- package/es/chat-engine/hooks/useChat.d.ts +1 -1
- package/es/chat-engine/hooks/useChat.js +1 -1
- package/es/chat-engine/hooks/useChat.js.map +1 -1
- package/es/chat-engine/index.d.ts +2 -2
- package/es/chat-engine/index.js +13 -3
- package/es/chat-engine/index.js.map +1 -1
- package/es/chat-filecard/_example-js/base.d.ts +1 -0
- package/es/chat-filecard/index.js +1 -1
- package/es/chat-loading/_example-js/base.d.ts +2 -0
- package/es/chat-loading/_example-js/text.d.ts +2 -0
- package/es/chat-loading/index.js +1 -1
- package/es/chat-markdown/_example-js/base.d.ts +1 -0
- package/es/chat-markdown/_example-js/custom.d.ts +2 -0
- package/es/chat-markdown/_example-js/event.d.ts +1 -0
- package/es/chat-markdown/_example-js/footnote.d.ts +2 -0
- package/es/chat-markdown/_example-js/plugin.d.ts +2 -0
- package/es/chat-markdown/_example-js/theme.d.ts +2 -0
- package/es/chat-markdown/index.js +1 -1
- package/es/chat-message/_example-js/action.d.ts +1 -0
- package/es/chat-message/_example-js/base.d.ts +1 -0
- package/es/chat-message/_example-js/configure.d.ts +1 -0
- package/es/chat-message/_example-js/content.d.ts +1 -0
- package/es/chat-message/_example-js/custom.d.ts +1 -0
- package/es/chat-message/_example-js/handle-actions.d.ts +7 -0
- package/es/chat-message/_example-js/status.d.ts +1 -0
- package/es/chat-message/_example-js/think.d.ts +1 -0
- package/es/chat-message/index.js +1 -1
- package/es/chat-sender/_example-js/attachment.d.ts +2 -0
- package/es/chat-sender/_example-js/base.d.ts +2 -0
- package/es/chat-sender/_example-js/custom.d.ts +2 -0
- package/es/chat-sender/index.js +1 -1
- package/es/chat-thinking/_example-js/base.d.ts +1 -0
- package/es/chat-thinking/_example-js/style.d.ts +1 -0
- package/es/chat-thinking/index.js +1 -1
- package/es/chatbot/_example-js/agent.d.ts +1 -0
- package/es/chatbot/_example-js/agui-toolcall.d.ts +11 -0
- package/es/chatbot/_example-js/agui.d.ts +13 -0
- package/es/chatbot/_example-js/backup/travel.d.ts +1 -0
- package/es/chatbot/_example-js/basic.d.ts +1 -0
- package/es/chatbot/_example-js/code.d.ts +1 -0
- package/es/chatbot/_example-js/components/ItineraryCard.d.ts +3 -0
- package/es/chatbot/_example-js/components/login.d.ts +1 -0
- package/es/chatbot/_example-js/comprehensive.d.ts +1 -0
- package/es/chatbot/_example-js/custom-content.d.ts +1 -0
- package/es/chatbot/_example-js/custom-merge.d.ts +1 -0
- package/es/chatbot/_example-js/custom.d.ts +1 -0
- package/es/chatbot/_example-js/docs.d.ts +1 -0
- package/es/chatbot/_example-js/image.d.ts +1 -0
- package/es/chatbot/_example-js/initial-messages.d.ts +9 -0
- package/es/chatbot/_example-js/instance-methods.d.ts +14 -0
- package/es/chatbot/_example-js/nostream.d.ts +1 -0
- package/es/chatbot/_example-js/quick-start.d.ts +9 -0
- package/es/chatbot/_example-js/research.d.ts +1 -0
- package/es/chatbot/_example-js/role-message-config.d.ts +22 -0
- package/es/chatbot/_example-js/sender-config.d.ts +20 -0
- package/es/chatbot/_example-js/service-config.d.ts +17 -0
- package/es/chatbot/_example-js/simple.d.ts +1 -0
- package/es/chatbot/_example-js/utils/messageRenderer.d.ts +5 -0
- package/es/chatbot/index.js +1 -1
- package/es/index.js +8 -1
- package/es/index.js.map +1 -1
- package/es/style/index.js +1 -1
- package/package.json +15 -15
- package/es/chatbot/components/provider/agent-state.d.ts +0 -5
- package/es/chatbot/components/provider/agent-state.js +0 -28
- package/es/chatbot/components/provider/agent-state.js.map +0 -1
- package/es/chatbot/components/toolcall/index.js +0 -19
- package/es/chatbot/components/toolcall/registry.d.ts +0 -35
- package/es/chatbot/components/toolcall/registry.js.map +0 -1
- package/es/chatbot/components/toolcall/render.d.ts +0 -13
- package/es/chatbot/components/toolcall/render.js +0 -207
- package/es/chatbot/components/toolcall/render.js.map +0 -1
- package/es/chatbot/components/toolcall/types.d.ts +0 -57
- package/es/chatbot/components/toolcall/types.js +0 -15
- package/es/chatbot/components/toolcall/types.js.map +0 -1
- package/es/chatbot/hooks/useAgentState.d.ts +0 -40
- package/es/chatbot/hooks/useAgentState.js +0 -76
- package/es/chatbot/hooks/useAgentState.js.map +0 -1
- package/es/chatbot/hooks/useAgentToolcall.d.ts +0 -28
- package/es/chatbot/hooks/useAgentToolcall.js +0 -78
- package/es/chatbot/hooks/useAgentToolcall.js.map +0 -1
- package/es/chatbot/hooks/useChat.d.ts +0 -11
- package/es/chatbot/hooks/useChat.js +0 -66
- package/es/chatbot/hooks/useChat.js.map +0 -1
- /package/es/{chatbot/components/toolcall → chat-engine/components/activity}/index.d.ts +0 -0
- /package/es/{chatbot/components/toolcall → chat-engine/components/activity}/index.js.map +0 -0
|
@@ -0,0 +1,117 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* tdesign v1.0.2
|
|
3
|
+
* (c) 2026 tdesign
|
|
4
|
+
* @license MIT
|
|
5
|
+
*/
|
|
6
|
+
|
|
7
|
+
import _defineProperty from '@babel/runtime/helpers/defineProperty';
|
|
8
|
+
import _slicedToArray from '@babel/runtime/helpers/slicedToArray';
|
|
9
|
+
import _classCallCheck from '@babel/runtime/helpers/classCallCheck';
|
|
10
|
+
import _createClass from '@babel/runtime/helpers/createClass';
|
|
11
|
+
import _possibleConstructorReturn from '@babel/runtime/helpers/possibleConstructorReturn';
|
|
12
|
+
import _getPrototypeOf from '@babel/runtime/helpers/getPrototypeOf';
|
|
13
|
+
import _inherits from '@babel/runtime/helpers/inherits';
|
|
14
|
+
import React, { Component, useState, useMemo, useEffect } from 'react';
|
|
15
|
+
import isEqual from 'react-fast-compare';
|
|
16
|
+
import { activityRegistry } from './registry.js';
|
|
17
|
+
|
|
18
|
+
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; }
|
|
19
|
+
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; }
|
|
20
|
+
function _callSuper(t, o, e) { return o = _getPrototypeOf(o), _possibleConstructorReturn(t, _isNativeReflectConstruct() ? Reflect.construct(o, e || [], _getPrototypeOf(t).constructor) : o.apply(t, e)); }
|
|
21
|
+
function _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); }
|
|
22
|
+
var ActivityErrorBoundary = /*#__PURE__*/function (_Component) {
|
|
23
|
+
function ActivityErrorBoundary(props) {
|
|
24
|
+
var _this;
|
|
25
|
+
_classCallCheck(this, ActivityErrorBoundary);
|
|
26
|
+
_this = _callSuper(this, ActivityErrorBoundary, [props]);
|
|
27
|
+
_this.state = {
|
|
28
|
+
hasError: false,
|
|
29
|
+
error: null
|
|
30
|
+
};
|
|
31
|
+
return _this;
|
|
32
|
+
}
|
|
33
|
+
_inherits(ActivityErrorBoundary, _Component);
|
|
34
|
+
return _createClass(ActivityErrorBoundary, [{
|
|
35
|
+
key: "componentDidCatch",
|
|
36
|
+
value: function componentDidCatch(error, errorInfo) {
|
|
37
|
+
console.error("[ActivityRenderer] Error in activity \"".concat(this.props.activityType, "\":"), error, errorInfo);
|
|
38
|
+
}
|
|
39
|
+
}, {
|
|
40
|
+
key: "render",
|
|
41
|
+
value: function render() {
|
|
42
|
+
if (this.state.hasError) {
|
|
43
|
+
return null;
|
|
44
|
+
}
|
|
45
|
+
return this.props.children;
|
|
46
|
+
}
|
|
47
|
+
}], [{
|
|
48
|
+
key: "getDerivedStateFromError",
|
|
49
|
+
value: function getDerivedStateFromError(error) {
|
|
50
|
+
return {
|
|
51
|
+
hasError: true,
|
|
52
|
+
error: error
|
|
53
|
+
};
|
|
54
|
+
}
|
|
55
|
+
}]);
|
|
56
|
+
}(Component);
|
|
57
|
+
var DefaultActivityRenderer = function DefaultActivityRenderer(_ref) {
|
|
58
|
+
var activity = _ref.activity;
|
|
59
|
+
console.warn("[ActivityRenderer] Unknown activity type: ".concat(activity.activityType), activity.content);
|
|
60
|
+
return null;
|
|
61
|
+
};
|
|
62
|
+
var ActivityRenderer = /*#__PURE__*/React.memo(function (_ref2) {
|
|
63
|
+
var activity = _ref2.activity;
|
|
64
|
+
var _useState = useState(function () {
|
|
65
|
+
return !!activityRegistry.getRenderFunction(activity.activityType);
|
|
66
|
+
}),
|
|
67
|
+
_useState2 = _slicedToArray(_useState, 2),
|
|
68
|
+
isRegistered = _useState2[0],
|
|
69
|
+
setIsRegistered = _useState2[1];
|
|
70
|
+
var componentProps = useMemo(function () {
|
|
71
|
+
return {
|
|
72
|
+
activityType: activity.activityType,
|
|
73
|
+
content: activity.content,
|
|
74
|
+
messageId: activity.messageId || ""
|
|
75
|
+
};
|
|
76
|
+
}, [activity.activityType, activity.content, activity.messageId]);
|
|
77
|
+
useEffect(function () {
|
|
78
|
+
if (!isRegistered) {
|
|
79
|
+
var handleRegistered = function handleRegistered(event) {
|
|
80
|
+
var _event$detail;
|
|
81
|
+
if (((_event$detail = event.detail) === null || _event$detail === void 0 ? void 0 : _event$detail.activityType) === activity.activityType) {
|
|
82
|
+
setIsRegistered(true);
|
|
83
|
+
}
|
|
84
|
+
};
|
|
85
|
+
window.addEventListener("activity-registered", handleRegistered);
|
|
86
|
+
return function () {
|
|
87
|
+
window.removeEventListener("activity-registered", handleRegistered);
|
|
88
|
+
};
|
|
89
|
+
}
|
|
90
|
+
}, [activity.activityType, isRegistered]);
|
|
91
|
+
var MemoizedComponent = useMemo(function () {
|
|
92
|
+
return activityRegistry.getRenderFunction(activity.activityType);
|
|
93
|
+
}, [activity.activityType, isRegistered]);
|
|
94
|
+
if (!MemoizedComponent) {
|
|
95
|
+
return /* @__PURE__ */React.createElement(DefaultActivityRenderer, {
|
|
96
|
+
activity: activity
|
|
97
|
+
});
|
|
98
|
+
}
|
|
99
|
+
return /* @__PURE__ */React.createElement(ActivityErrorBoundary, {
|
|
100
|
+
activityType: activity.activityType
|
|
101
|
+
}, /* @__PURE__ */React.createElement(MemoizedComponent, _objectSpread({}, componentProps)));
|
|
102
|
+
}, function (prevProps, nextProps) {
|
|
103
|
+
if (prevProps.activity.activityType !== nextProps.activity.activityType) {
|
|
104
|
+
return false;
|
|
105
|
+
}
|
|
106
|
+
if (prevProps.activity.messageId !== nextProps.activity.messageId) {
|
|
107
|
+
return false;
|
|
108
|
+
}
|
|
109
|
+
if (prevProps.activity.content === nextProps.activity.content) {
|
|
110
|
+
return true;
|
|
111
|
+
}
|
|
112
|
+
return isEqual(prevProps.activity.content, nextProps.activity.content);
|
|
113
|
+
});
|
|
114
|
+
ActivityRenderer.displayName = "ActivityRenderer";
|
|
115
|
+
|
|
116
|
+
export { ActivityRenderer };
|
|
117
|
+
//# sourceMappingURL=render.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"render.js","sources":["../../../../../pro-components/chat/chat-engine/components/activity/render.tsx"],"sourcesContent":["/* eslint-disable react-hooks/exhaustive-deps */\nimport React, { useState, useEffect, useMemo, Component, ErrorInfo } from 'react';\nimport isEqual from 'react-fast-compare';\nimport { type ActivityData } from 'tdesign-web-components';\nimport type { ActivityComponentProps } from './types';\nimport { activityRegistry } from './registry';\n\ninterface ActivityRendererProps {\n activity: ActivityData;\n}\n\ninterface ErrorBoundaryState {\n hasError: boolean;\n error: Error | null;\n}\n\n/**\n * Activity 错误边界组件\n * 捕获子组件渲染错误,防止整个对话列表崩溃\n * TODO: 后续支持配置化的错误 UI\n */\nclass ActivityErrorBoundary extends Component<{ children: React.ReactNode; activityType: string }, ErrorBoundaryState> {\n constructor(props: { children: React.ReactNode; activityType: 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(`[ActivityRenderer] Error in activity \"${this.props.activityType}\":`, error, errorInfo);\n }\n\n render() {\n if (this.state.hasError) {\n return null;\n }\n\n return this.props.children;\n }\n}\n\n/**\n * 默认的 Activity 渲染器\n * 当没有注册对应类型的组件时使用\n * TODO: 后续支持配置化的默认 UI\n */\nconst DefaultActivityRenderer: React.FC<ActivityRendererProps> = ({ activity }) => {\n // 空白兜底,仅在控制台输出警告\n console.warn(`[ActivityRenderer] Unknown activity type: ${activity.activityType}`, activity.content);\n return null;\n};\n\n/**\n * Activity 渲染器组件\n * 根据 activityType 精确匹配查找注册的组件进行渲染\n *\n * 性能优化:\n * - 使用 react-fast-compare 替代 JSON.stringify 进行深比较\n * - 短路比较,发现差异立即停止,对大型 JSON 树性能提升显著\n */\nexport const ActivityRenderer = React.memo<ActivityRendererProps>(\n ({ activity }) => {\n // 添加注册状态监听\n const [isRegistered, setIsRegistered] = useState(() => !!activityRegistry.getRenderFunction(activity.activityType));\n\n // 缓存组件 props\n const componentProps = useMemo<ActivityComponentProps>(\n () => ({\n activityType: activity.activityType,\n content: activity.content,\n messageId: activity.messageId || '',\n }),\n [activity.activityType, activity.content, activity.messageId],\n );\n\n // 监听组件注册事件,支持动态注册\n useEffect(() => {\n if (!isRegistered) {\n const handleRegistered = (event: CustomEvent) => {\n // 精确匹配\n if (event.detail?.activityType === activity.activityType) {\n setIsRegistered(true);\n }\n };\n\n // 添加事件监听\n window.addEventListener('activity-registered', handleRegistered as EventListener);\n\n return () => {\n window.removeEventListener('activity-registered', handleRegistered as EventListener);\n };\n }\n }, [activity.activityType, isRegistered]);\n\n // 使用 registry 的缓存渲染函数\n const MemoizedComponent = useMemo(\n () => activityRegistry.getRenderFunction(activity.activityType),\n [activity.activityType, isRegistered],\n );\n\n // 如果没有注册对应的组件,使用默认渲染器\n if (!MemoizedComponent) {\n return <DefaultActivityRenderer activity={activity} />;\n }\n\n return (\n <ActivityErrorBoundary activityType={activity.activityType}>\n <MemoizedComponent {...componentProps} />\n </ActivityErrorBoundary>\n );\n },\n (prevProps, nextProps) => {\n // 1. activityType 变化必须重渲染\n if (prevProps.activity.activityType !== nextProps.activity.activityType) {\n return false;\n }\n\n // 2. messageId 变化必须重渲染\n if (prevProps.activity.messageId !== nextProps.activity.messageId) {\n return false;\n }\n\n // 3. content 引用相同,跳过渲染\n if (prevProps.activity.content === nextProps.activity.content) {\n return true;\n }\n\n // 4. 使用 react-fast-compare 进行高效深比较\n // 比 JSON.stringify 快 3-5 倍,且能正确处理循环引用\n return isEqual(prevProps.activity.content, nextProps.activity.content);\n },\n);\n\nActivityRenderer.displayName = 'ActivityRenderer';\n"],"names":["ActivityErrorBoundary","props","_this","_classCallCheck","_callSuper","state","hasError","error","_inherits","_Component","_createClass","key","value","componentDidCatch","errorInfo","console","activityType","render","children","getDerivedStateFromError","Component","DefaultActivityRenderer","_ref","activity","warn","concat","content","ActivityRenderer","React","memo","_ref2","_useState","useState","activityRegistry","getRenderFunction","_useState2","_slicedToArray","isRegistered","setIsRegistered","componentProps","useMemo","messageId","useEffect","handleRegistered","event","_event$detail","detail","window","addEventListener","removeEventListener","MemoizedComponent","createElement","_objectSpread","prevProps","nextProps","isEqual","displayName"],"mappings":"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"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
/**
|
|
3
|
+
* Activity 组件的标准 Props 接口
|
|
4
|
+
*/
|
|
5
|
+
export interface ActivityComponentProps<TContent = any> {
|
|
6
|
+
/** Activity 类型 */
|
|
7
|
+
activityType: string;
|
|
8
|
+
/** Activity 内容数据 */
|
|
9
|
+
content: TContent;
|
|
10
|
+
/** 关联的消息 ID */
|
|
11
|
+
messageId: string;
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* Activity 配置接口
|
|
15
|
+
*/
|
|
16
|
+
export interface ActivityConfig<TContent = any> {
|
|
17
|
+
/** Activity 类型标识符 */
|
|
18
|
+
activityType: string;
|
|
19
|
+
/** 渲染组件 */
|
|
20
|
+
component: React.FC<ActivityComponentProps<TContent>>;
|
|
21
|
+
/** 描述信息(可选) */
|
|
22
|
+
description?: string;
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* Activity 注册表接口
|
|
26
|
+
*/
|
|
27
|
+
export interface ActivityRegistry {
|
|
28
|
+
[activityType: string]: ActivityConfig;
|
|
29
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* tdesign v1.0.2
|
|
3
|
+
* (c) 2026 tdesign
|
|
4
|
+
* @license MIT
|
|
5
|
+
*/
|
|
6
|
+
|
|
7
|
+
import './toolcall/index.js';
|
|
8
|
+
import './activity/index.js';
|
|
9
|
+
export { AgentStateProvider } from './provider/agent-state.js';
|
|
10
|
+
export { isNonInteractive, isNonInteractiveConfig } from './toolcall/types.js';
|
|
11
|
+
export { agentToolcallRegistry } from './toolcall/registry.js';
|
|
12
|
+
export { ToolCallRenderer, withAgentStateToolcall, withAgentStateToolcall1 } from './toolcall/render.js';
|
|
13
|
+
export { activityRegistry } from './activity/registry.js';
|
|
14
|
+
export { ActivityRenderer } from './activity/render.js';
|
|
15
|
+
import './activity/types.js';
|
|
16
|
+
import 'react';
|
|
17
|
+
import '../hooks/useAgentState.js';
|
|
18
|
+
import '@babel/runtime/helpers/defineProperty';
|
|
19
|
+
import '@babel/runtime/helpers/slicedToArray';
|
|
20
|
+
import 'tdesign-web-components/lib/chat-engine';
|
|
21
|
+
import '@babel/runtime/helpers/classCallCheck';
|
|
22
|
+
import '@babel/runtime/helpers/createClass';
|
|
23
|
+
import '@babel/runtime/helpers/asyncToGenerator';
|
|
24
|
+
import '@babel/runtime/helpers/possibleConstructorReturn';
|
|
25
|
+
import '@babel/runtime/helpers/getPrototypeOf';
|
|
26
|
+
import '@babel/runtime/helpers/inherits';
|
|
27
|
+
import '@babel/runtime/regenerator';
|
|
28
|
+
import 'react-fast-compare';
|
|
29
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* tdesign v1.0.2
|
|
2
|
+
* tdesign v1.0.2
|
|
3
3
|
* (c) 2026 tdesign
|
|
4
4
|
* @license MIT
|
|
5
5
|
*/
|
|
@@ -13,7 +13,10 @@ import '@babel/runtime/helpers/defineProperty';
|
|
|
13
13
|
import 'react';
|
|
14
14
|
import '@babel/runtime/helpers/asyncToGenerator';
|
|
15
15
|
import '@babel/runtime/helpers/slicedToArray';
|
|
16
|
+
import '@babel/runtime/helpers/possibleConstructorReturn';
|
|
17
|
+
import '@babel/runtime/helpers/getPrototypeOf';
|
|
18
|
+
import '@babel/runtime/helpers/inherits';
|
|
16
19
|
import '@babel/runtime/regenerator';
|
|
17
|
-
import '../../hooks/useAgentState.js';
|
|
18
20
|
import 'tdesign-web-components/lib/chat-engine';
|
|
21
|
+
import '../../hooks/useAgentState.js';
|
|
19
22
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import React from 'react';
|
|
2
|
-
import
|
|
2
|
+
import { ToolCall } from 'tdesign-web-components/lib/chat-engine';
|
|
3
3
|
interface ToolCallRendererProps {
|
|
4
4
|
toolCall: ToolCall;
|
|
5
5
|
onRespond?: (toolCall: ToolCall, response: any) => void;
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* tdesign v1.0.2
|
|
2
|
+
* tdesign v1.0.2
|
|
3
3
|
* (c) 2026 tdesign
|
|
4
4
|
* @license MIT
|
|
5
5
|
*/
|
|
@@ -7,17 +7,57 @@
|
|
|
7
7
|
import _asyncToGenerator from '@babel/runtime/helpers/asyncToGenerator';
|
|
8
8
|
import _defineProperty from '@babel/runtime/helpers/defineProperty';
|
|
9
9
|
import _slicedToArray from '@babel/runtime/helpers/slicedToArray';
|
|
10
|
+
import _classCallCheck from '@babel/runtime/helpers/classCallCheck';
|
|
11
|
+
import _createClass from '@babel/runtime/helpers/createClass';
|
|
12
|
+
import _possibleConstructorReturn from '@babel/runtime/helpers/possibleConstructorReturn';
|
|
13
|
+
import _getPrototypeOf from '@babel/runtime/helpers/getPrototypeOf';
|
|
14
|
+
import _inherits from '@babel/runtime/helpers/inherits';
|
|
10
15
|
import _regeneratorRuntime from '@babel/runtime/regenerator';
|
|
11
|
-
import React, { useState, useMemo, useCallback, useEffect } from 'react';
|
|
16
|
+
import React, { Component, useState, useMemo, useCallback, useEffect } from 'react';
|
|
17
|
+
import { AGUIEventType } from 'tdesign-web-components/lib/chat-engine';
|
|
12
18
|
import { isNonInteractiveConfig } from './types.js';
|
|
13
19
|
import { agentToolcallRegistry } from './registry.js';
|
|
14
20
|
import { useAgentStateDataByKey, AgentStateContext } from '../../hooks/useAgentState.js';
|
|
15
|
-
import '@babel/runtime/helpers/classCallCheck';
|
|
16
|
-
import '@babel/runtime/helpers/createClass';
|
|
17
|
-
import 'tdesign-web-components/lib/chat-engine';
|
|
18
21
|
|
|
19
22
|
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; }
|
|
20
23
|
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; }
|
|
24
|
+
function _callSuper(t, o, e) { return o = _getPrototypeOf(o), _possibleConstructorReturn(t, _isNativeReflectConstruct() ? Reflect.construct(o, e || [], _getPrototypeOf(t).constructor) : o.apply(t, e)); }
|
|
25
|
+
function _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); }
|
|
26
|
+
var ToolCallErrorBoundary = /*#__PURE__*/function (_Component) {
|
|
27
|
+
function ToolCallErrorBoundary(props) {
|
|
28
|
+
var _this;
|
|
29
|
+
_classCallCheck(this, ToolCallErrorBoundary);
|
|
30
|
+
_this = _callSuper(this, ToolCallErrorBoundary, [props]);
|
|
31
|
+
_this.state = {
|
|
32
|
+
hasError: false,
|
|
33
|
+
error: null
|
|
34
|
+
};
|
|
35
|
+
return _this;
|
|
36
|
+
}
|
|
37
|
+
_inherits(ToolCallErrorBoundary, _Component);
|
|
38
|
+
return _createClass(ToolCallErrorBoundary, [{
|
|
39
|
+
key: "componentDidCatch",
|
|
40
|
+
value: function componentDidCatch(error, errorInfo) {
|
|
41
|
+
console.error("[ToolCallRenderer] Error in tool \"".concat(this.props.toolCallName, "\":"), error, errorInfo);
|
|
42
|
+
}
|
|
43
|
+
}, {
|
|
44
|
+
key: "render",
|
|
45
|
+
value: function render() {
|
|
46
|
+
if (this.state.hasError) {
|
|
47
|
+
return null;
|
|
48
|
+
}
|
|
49
|
+
return this.props.children;
|
|
50
|
+
}
|
|
51
|
+
}], [{
|
|
52
|
+
key: "getDerivedStateFromError",
|
|
53
|
+
value: function getDerivedStateFromError(error) {
|
|
54
|
+
return {
|
|
55
|
+
hasError: true,
|
|
56
|
+
error: error
|
|
57
|
+
};
|
|
58
|
+
}
|
|
59
|
+
}]);
|
|
60
|
+
}(Component);
|
|
21
61
|
var ToolCallRenderer = /*#__PURE__*/React.memo(function (_ref) {
|
|
22
62
|
var toolCall = _ref.toolCall,
|
|
23
63
|
onRespond = _ref.onRespond;
|
|
@@ -61,8 +101,8 @@ var ToolCallRenderer = /*#__PURE__*/React.memo(function (_ref) {
|
|
|
61
101
|
if (isNonInteractiveConfig(config)) {
|
|
62
102
|
var executeHandler = /*#__PURE__*/function () {
|
|
63
103
|
var _ref2 = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee() {
|
|
64
|
-
var backendResult, result;
|
|
65
|
-
return _regeneratorRuntime.wrap(function
|
|
104
|
+
var backendResult, result, _t;
|
|
105
|
+
return _regeneratorRuntime.wrap(function (_context) {
|
|
66
106
|
while (1) switch (_context.prev = _context.next) {
|
|
67
107
|
case 0:
|
|
68
108
|
_context.prev = 0;
|
|
@@ -77,28 +117,28 @@ var ToolCallRenderer = /*#__PURE__*/React.memo(function (_ref) {
|
|
|
77
117
|
backendResult = toolCall.result;
|
|
78
118
|
}
|
|
79
119
|
}
|
|
80
|
-
_context.next =
|
|
120
|
+
_context.next = 1;
|
|
81
121
|
return config.handler(args, backendResult);
|
|
82
|
-
case
|
|
122
|
+
case 1:
|
|
83
123
|
result = _context.sent;
|
|
84
124
|
setActionState({
|
|
85
125
|
status: "complete",
|
|
86
126
|
result: result
|
|
87
127
|
});
|
|
88
|
-
_context.next =
|
|
128
|
+
_context.next = 3;
|
|
89
129
|
break;
|
|
90
|
-
case
|
|
91
|
-
_context.prev =
|
|
92
|
-
|
|
130
|
+
case 2:
|
|
131
|
+
_context.prev = 2;
|
|
132
|
+
_t = _context["catch"](0);
|
|
93
133
|
setActionState({
|
|
94
134
|
status: "error",
|
|
95
|
-
error:
|
|
135
|
+
error: _t
|
|
96
136
|
});
|
|
97
|
-
case
|
|
137
|
+
case 3:
|
|
98
138
|
case "end":
|
|
99
139
|
return _context.stop();
|
|
100
140
|
}
|
|
101
|
-
}, _callee, null, [[0,
|
|
141
|
+
}, _callee, null, [[0, 2]]);
|
|
102
142
|
}));
|
|
103
143
|
return function executeHandler() {
|
|
104
144
|
return _ref2.apply(this, arguments);
|
|
@@ -118,12 +158,16 @@ var ToolCallRenderer = /*#__PURE__*/React.memo(function (_ref) {
|
|
|
118
158
|
error: error
|
|
119
159
|
});
|
|
120
160
|
}
|
|
161
|
+
} else if (toolCall.eventType === AGUIEventType.TOOL_CALL_END || toolCall.eventType === AGUIEventType.TOOL_CALL_RESULT) {
|
|
162
|
+
setActionState({
|
|
163
|
+
status: "complete"
|
|
164
|
+
});
|
|
121
165
|
} else {
|
|
122
166
|
setActionState({
|
|
123
167
|
status: "executing"
|
|
124
168
|
});
|
|
125
169
|
}
|
|
126
|
-
}, [config, args, toolCall.result]);
|
|
170
|
+
}, [config, args, toolCall.result, toolCall.eventType]);
|
|
127
171
|
var subscribeKeyExtractor = useMemo(function () {
|
|
128
172
|
return config === null || config === void 0 ? void 0 : config.subscribeKey;
|
|
129
173
|
}, [config]);
|
|
@@ -169,36 +213,38 @@ var ToolCallRenderer = /*#__PURE__*/React.memo(function (_ref) {
|
|
|
169
213
|
if (!MemoizedComponent) {
|
|
170
214
|
return null;
|
|
171
215
|
}
|
|
172
|
-
return /* @__PURE__ */React.createElement(
|
|
216
|
+
return /* @__PURE__ */React.createElement(ToolCallErrorBoundary, {
|
|
217
|
+
toolCallName: toolCall.toolCallName
|
|
218
|
+
}, /* @__PURE__ */React.createElement(MemoizedComponent, _objectSpread({}, componentProps)));
|
|
173
219
|
}, function (prevProps, nextProps) {
|
|
174
|
-
return prevProps.toolCall.toolCallId === nextProps.toolCall.toolCallId && prevProps.toolCall.toolCallName === nextProps.toolCall.toolCallName && prevProps.toolCall.args === nextProps.toolCall.args && prevProps.toolCall.result === nextProps.toolCall.result && prevProps.onRespond === nextProps.onRespond;
|
|
220
|
+
return prevProps.toolCall.toolCallId === nextProps.toolCall.toolCallId && prevProps.toolCall.toolCallName === nextProps.toolCall.toolCallName && prevProps.toolCall.args === nextProps.toolCall.args && prevProps.toolCall.result === nextProps.toolCall.result && prevProps.toolCall.eventType === nextProps.toolCall.eventType && prevProps.onRespond === nextProps.onRespond;
|
|
175
221
|
});
|
|
176
|
-
var withAgentStateToolcall1 = function withAgentStateToolcall1(
|
|
222
|
+
var withAgentStateToolcall1 = function withAgentStateToolcall1(Component2) {
|
|
177
223
|
var WrappedComponent = function WrappedComponent(props) {
|
|
178
224
|
return /* @__PURE__ */React.createElement(AgentStateContext.Consumer, null, function (context) {
|
|
179
225
|
if (!context) {
|
|
180
226
|
console.warn("AgentStateContext not found, component will render without state");
|
|
181
|
-
return /* @__PURE__ */React.createElement(
|
|
227
|
+
return /* @__PURE__ */React.createElement(Component2, _objectSpread({}, props));
|
|
182
228
|
}
|
|
183
|
-
return /* @__PURE__ */React.createElement(
|
|
229
|
+
return /* @__PURE__ */React.createElement(Component2, _objectSpread(_objectSpread({}, props), {}, {
|
|
184
230
|
agentState: context.stateMap
|
|
185
231
|
}));
|
|
186
232
|
});
|
|
187
233
|
};
|
|
188
|
-
WrappedComponent.displayName = "withAgentState(".concat(
|
|
234
|
+
WrappedComponent.displayName = "withAgentState(".concat(Component2.displayName || Component2.name || "Component", ")");
|
|
189
235
|
return /*#__PURE__*/React.memo(WrappedComponent);
|
|
190
236
|
};
|
|
191
|
-
var withAgentStateToolcall = function withAgentStateToolcall(
|
|
237
|
+
var withAgentStateToolcall = function withAgentStateToolcall(Component2, subscribeKeyExtractor) {
|
|
192
238
|
var WrappedComponent = function WrappedComponent(props) {
|
|
193
239
|
var targetStateKey = useMemo(function () {
|
|
194
240
|
return subscribeKeyExtractor ? subscribeKeyExtractor(props) : void 0;
|
|
195
241
|
}, [props]);
|
|
196
242
|
var agentState = useAgentStateDataByKey(targetStateKey);
|
|
197
|
-
return /* @__PURE__ */React.createElement(
|
|
243
|
+
return /* @__PURE__ */React.createElement(Component2, _objectSpread(_objectSpread({}, props), {}, {
|
|
198
244
|
agentState: agentState
|
|
199
245
|
}));
|
|
200
246
|
};
|
|
201
|
-
WrappedComponent.displayName = "withAgentState(".concat(
|
|
247
|
+
WrappedComponent.displayName = "withAgentState(".concat(Component2.displayName || Component2.name || "Component", ")");
|
|
202
248
|
return /*#__PURE__*/React.memo(WrappedComponent);
|
|
203
249
|
};
|
|
204
250
|
|
|
@@ -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","_regeneratorRuntime","wrap","_callee$","_context","next","warn","handler","sent","t0","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 { AGUIEventType, 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\ninterface ErrorBoundaryState {\n hasError: boolean;\n error: Error | null;\n}\n\n/**\n * ToolCall 错误边界组件\n * 捕获子组件渲染错误,防止整个对话列表崩溃\n */\nclass ToolCallErrorBoundary extends Component<{ children: React.ReactNode; toolCallName: string }, ErrorBoundaryState> {\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 if (\n toolCall.eventType === AGUIEventType.TOOL_CALL_END ||\n toolCall.eventType === AGUIEventType.TOOL_CALL_RESULT\n ) {\n // 工具调用已结束(无 result 的情况,如 show_progress)\n setActionState({ status: 'complete' });\n } else {\n // 等待用户交互或工具执行中\n setActionState({ status: 'executing' });\n }\n }, [config, args, toolCall.result, toolCall.eventType]);\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.toolCall.eventType === nextProps.toolCall.eventType &&\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","eventType","AGUIEventType","TOOL_CALL_END","TOOL_CALL_RESULT","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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"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* tdesign v1.0.2
|
|
3
|
+
* (c) 2026 tdesign
|
|
4
|
+
* @license MIT
|
|
5
|
+
*/
|
|
6
|
+
|
|
7
|
+
export { AgentStateContext, useAgentState, useAgentStateContext, useAgentStateDataByKey } from './useAgentState.js';
|
|
8
|
+
export { useAgentToolcall } from './useAgentToolcall.js';
|
|
9
|
+
export { useAgentActivity } from './useAgentActivity.js';
|
|
10
|
+
export { useChat } from './useChat.js';
|
|
11
|
+
import '@babel/runtime/helpers/defineProperty';
|
|
12
|
+
import '@babel/runtime/helpers/slicedToArray';
|
|
13
|
+
import 'react';
|
|
14
|
+
import 'tdesign-web-components/lib/chat-engine';
|
|
15
|
+
import '@babel/runtime/helpers/toConsumableArray';
|
|
16
|
+
import '../components/toolcall/registry.js';
|
|
17
|
+
import '@babel/runtime/helpers/classCallCheck';
|
|
18
|
+
import '@babel/runtime/helpers/createClass';
|
|
19
|
+
import '../components/activity/registry.js';
|
|
20
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import type { ActivityConfig } from '../components/activity/types';
|
|
2
|
+
export interface UseAgentActivityReturn {
|
|
3
|
+
register: (config: ActivityConfig | ActivityConfig[]) => void;
|
|
4
|
+
unregister: (activityTypes: string | string[]) => void;
|
|
5
|
+
isRegistered: (activityType: string) => boolean;
|
|
6
|
+
getRegistered: () => string[];
|
|
7
|
+
}
|
|
8
|
+
/**
|
|
9
|
+
* Activity 注册管理 Hook,专门用于 Activity 组件的注册管理
|
|
10
|
+
*
|
|
11
|
+
* 支持两种使用模式:
|
|
12
|
+
* 1. 自动注册模式:传入配置,自动注册和清理
|
|
13
|
+
* 2. 手动注册模式:不传配置,返回注册方法由业务控制
|
|
14
|
+
*/
|
|
15
|
+
export declare function useAgentActivity<TContent = any>(config?: ActivityConfig<TContent> | ActivityConfig<TContent>[] | null | undefined): UseAgentActivityReturn;
|