@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,221 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* tdesign v1.0.0-beta.1
|
|
3
|
+
* (c) 2025 tdesign
|
|
4
|
+
* @license MIT
|
|
5
|
+
*/
|
|
6
|
+
|
|
7
|
+
function _createForOfIteratorHelper(r, e) { var t = "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (!t) { if (Array.isArray(r) || (t = _unsupportedIterableToArray(r)) || e && r && "number" == typeof r.length) { t && (r = t); var _n = 0, F = function F() {}; return { s: F, n: function n() { return _n >= r.length ? { done: !0 } : { done: !1, value: r[_n++] }; }, e: function e(r) { throw r; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var o, a = !0, u = !1; return { s: function s() { t = t.call(r); }, n: function n() { var r = t.next(); return a = r.done, r; }, e: function e(r) { u = !0, o = r; }, f: function f() { try { a || null == t["return"] || t["return"](); } finally { if (u) throw o; } } }; }
|
|
8
|
+
function _unsupportedIterableToArray(r, a) { if (r) { if ("string" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }
|
|
9
|
+
function _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }
|
|
10
|
+
function parseJsonPointerPath(path) {
|
|
11
|
+
return path.slice(1).split("/").map(function (part) {
|
|
12
|
+
return part.replace(/~1/g, "/").replace(/~0/g, "~");
|
|
13
|
+
});
|
|
14
|
+
}
|
|
15
|
+
function isArrayIndex(key) {
|
|
16
|
+
return /^\d+$/.test(key);
|
|
17
|
+
}
|
|
18
|
+
function extendArrayToIndex(array, targetIndex) {
|
|
19
|
+
while (array.length <= targetIndex) {
|
|
20
|
+
array.push(void 0);
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
function navigateArrayPath(target, pathSegment, nextKey, operation) {
|
|
24
|
+
var arrayIndex = parseInt(pathSegment, 10);
|
|
25
|
+
if (operation !== "add" && arrayIndex >= target.length) {
|
|
26
|
+
throw new Error("\u6570\u7EC4\u7D22\u5F15 ".concat(arrayIndex, " \u8D85\u51FA\u8303\u56F4\uFF0C\u5F53\u524D\u6570\u7EC4\u957F\u5EA6: ").concat(target.length));
|
|
27
|
+
}
|
|
28
|
+
if (operation === "add" && arrayIndex >= target.length) {
|
|
29
|
+
extendArrayToIndex(target, arrayIndex);
|
|
30
|
+
}
|
|
31
|
+
if (target[arrayIndex] == null) {
|
|
32
|
+
target[arrayIndex] = isArrayIndex(nextKey) ? [] : {};
|
|
33
|
+
}
|
|
34
|
+
return target[arrayIndex];
|
|
35
|
+
}
|
|
36
|
+
function navigateObjectPath(target, pathSegment, nextKey, operation) {
|
|
37
|
+
if (target[pathSegment] === void 0 || target[pathSegment] === null) {
|
|
38
|
+
if (operation === "remove") {
|
|
39
|
+
throw new Error("\u8981\u5220\u9664\u7684\u8DEF\u5F84\u4E0D\u5B58\u5728");
|
|
40
|
+
}
|
|
41
|
+
target[pathSegment] = isArrayIndex(nextKey) ? [] : {};
|
|
42
|
+
}
|
|
43
|
+
return target[pathSegment];
|
|
44
|
+
}
|
|
45
|
+
function navigateToTarget(root, pathParts, operation) {
|
|
46
|
+
var target = root;
|
|
47
|
+
for (var i = 0; i < pathParts.length - 1; i++) {
|
|
48
|
+
var pathSegment = pathParts[i];
|
|
49
|
+
var nextKey = pathParts[i + 1];
|
|
50
|
+
if (Array.isArray(target)) {
|
|
51
|
+
target = navigateArrayPath(target, pathSegment, nextKey, operation);
|
|
52
|
+
} else {
|
|
53
|
+
target = navigateObjectPath(target, pathSegment, nextKey, operation);
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
return target;
|
|
57
|
+
}
|
|
58
|
+
function executeArrayOperation(target, lastKey, operation, value) {
|
|
59
|
+
var arrayIndex = parseInt(lastKey, 10);
|
|
60
|
+
switch (operation) {
|
|
61
|
+
case "add":
|
|
62
|
+
if (arrayIndex >= target.length) {
|
|
63
|
+
extendArrayToIndex(target, arrayIndex);
|
|
64
|
+
}
|
|
65
|
+
target[arrayIndex] = value;
|
|
66
|
+
break;
|
|
67
|
+
case "replace":
|
|
68
|
+
if (arrayIndex >= target.length) {
|
|
69
|
+
throw new Error("\u6570\u7EC4\u7D22\u5F15 ".concat(arrayIndex, " \u8D85\u51FA\u8303\u56F4\uFF0C\u5F53\u524D\u6570\u7EC4\u957F\u5EA6: ").concat(target.length));
|
|
70
|
+
}
|
|
71
|
+
target[arrayIndex] = value;
|
|
72
|
+
break;
|
|
73
|
+
case "remove":
|
|
74
|
+
if (arrayIndex < target.length) {
|
|
75
|
+
target.splice(arrayIndex, 1);
|
|
76
|
+
}
|
|
77
|
+
break;
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
function executeObjectOperation(target, lastKey, operation, value) {
|
|
81
|
+
switch (operation) {
|
|
82
|
+
case "add":
|
|
83
|
+
case "replace":
|
|
84
|
+
target[lastKey] = value;
|
|
85
|
+
break;
|
|
86
|
+
case "remove":
|
|
87
|
+
if (target && lastKey in target) {
|
|
88
|
+
delete target[lastKey];
|
|
89
|
+
}
|
|
90
|
+
break;
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
function executeOperation(target, lastKey, operation, value) {
|
|
94
|
+
if (Array.isArray(target)) {
|
|
95
|
+
executeArrayOperation(target, lastKey, operation, value);
|
|
96
|
+
} else {
|
|
97
|
+
executeObjectOperation(target, lastKey, operation, value);
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
function applyJsonPatch(state, delta) {
|
|
101
|
+
var newState = JSON.parse(JSON.stringify(state));
|
|
102
|
+
var _iterator = _createForOfIteratorHelper(delta),
|
|
103
|
+
_step;
|
|
104
|
+
try {
|
|
105
|
+
for (_iterator.s(); !(_step = _iterator.n()).done;) {
|
|
106
|
+
var _step$value = _step.value,
|
|
107
|
+
op = _step$value.op,
|
|
108
|
+
path = _step$value.path,
|
|
109
|
+
value = _step$value.value;
|
|
110
|
+
try {
|
|
111
|
+
var pathParts = parseJsonPointerPath(path);
|
|
112
|
+
if (pathParts.length === 0) continue;
|
|
113
|
+
var target = navigateToTarget(newState, pathParts, op);
|
|
114
|
+
var lastKey = pathParts[pathParts.length - 1];
|
|
115
|
+
executeOperation(target, lastKey, op, value);
|
|
116
|
+
} catch (error) {
|
|
117
|
+
console.warn("JSON Patch\u64CD\u4F5C\u8DF3\u8FC7: ".concat(op, " ").concat(path, " - ").concat(error));
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
} catch (err) {
|
|
121
|
+
_iterator.e(err);
|
|
122
|
+
} finally {
|
|
123
|
+
_iterator.f();
|
|
124
|
+
}
|
|
125
|
+
return newState;
|
|
126
|
+
}
|
|
127
|
+
function safeParseJSON(value, fallbackValue, errorContext) {
|
|
128
|
+
if (typeof value !== "string") {
|
|
129
|
+
return value;
|
|
130
|
+
}
|
|
131
|
+
try {
|
|
132
|
+
return JSON.parse(value);
|
|
133
|
+
} catch (error) {
|
|
134
|
+
var context = errorContext ? " (".concat(errorContext, ")") : "";
|
|
135
|
+
console.warn("Failed to parse JSON".concat(context, ":"), error);
|
|
136
|
+
return fallbackValue !== void 0 ? fallbackValue : value;
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
function findTargetElement(event, selector) {
|
|
140
|
+
var selectors = Array.isArray(selector) ? selector : selector.split(",").map(function (s) {
|
|
141
|
+
return s.trim();
|
|
142
|
+
});
|
|
143
|
+
var eventPath = event.composedPath();
|
|
144
|
+
var _iterator2 = _createForOfIteratorHelper(eventPath),
|
|
145
|
+
_step2;
|
|
146
|
+
try {
|
|
147
|
+
var _loop = function _loop() {
|
|
148
|
+
var el = _step2.value;
|
|
149
|
+
if (el instanceof HTMLElement) {
|
|
150
|
+
if (selectors.some(function (sel) {
|
|
151
|
+
var _el$matches;
|
|
152
|
+
return (_el$matches = el.matches) === null || _el$matches === void 0 ? void 0 : _el$matches.call(el, sel);
|
|
153
|
+
})) {
|
|
154
|
+
return {
|
|
155
|
+
v: el
|
|
156
|
+
};
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
},
|
|
160
|
+
_ret;
|
|
161
|
+
for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {
|
|
162
|
+
_ret = _loop();
|
|
163
|
+
if (_ret) return _ret.v;
|
|
164
|
+
}
|
|
165
|
+
} catch (err) {
|
|
166
|
+
_iterator2.e(err);
|
|
167
|
+
} finally {
|
|
168
|
+
_iterator2.f();
|
|
169
|
+
}
|
|
170
|
+
return null;
|
|
171
|
+
}
|
|
172
|
+
function isUserMessage(message) {
|
|
173
|
+
return message.role === "user" && "content" in message;
|
|
174
|
+
}
|
|
175
|
+
function isAIMessage(message) {
|
|
176
|
+
return message.role === "assistant";
|
|
177
|
+
}
|
|
178
|
+
function isThinkingContent(content) {
|
|
179
|
+
return content.type === "thinking";
|
|
180
|
+
}
|
|
181
|
+
function isTextContent(content) {
|
|
182
|
+
return content.type === "text";
|
|
183
|
+
}
|
|
184
|
+
function isMarkdownContent(content) {
|
|
185
|
+
return content.type === "markdown";
|
|
186
|
+
}
|
|
187
|
+
function isImageContent(content) {
|
|
188
|
+
return content.type === "image";
|
|
189
|
+
}
|
|
190
|
+
function isSearchContent(content) {
|
|
191
|
+
return content.type === "search";
|
|
192
|
+
}
|
|
193
|
+
function isSuggestionContent(content) {
|
|
194
|
+
return content.type === "suggestion";
|
|
195
|
+
}
|
|
196
|
+
function isAttachmentContent(content) {
|
|
197
|
+
return content.type === "attachment";
|
|
198
|
+
}
|
|
199
|
+
function isToolCallContent(content) {
|
|
200
|
+
return content.type === "toolcall";
|
|
201
|
+
}
|
|
202
|
+
function getMessageContentForCopy(message) {
|
|
203
|
+
if (!isAIMessage(message) || !message.content) {
|
|
204
|
+
return "";
|
|
205
|
+
}
|
|
206
|
+
return message.content.reduce(function (pre, item) {
|
|
207
|
+
var append = "";
|
|
208
|
+
if (isTextContent(item) || isMarkdownContent(item)) {
|
|
209
|
+
append = item.data;
|
|
210
|
+
} else if (isThinkingContent(item)) {
|
|
211
|
+
append = item.data.text || "";
|
|
212
|
+
}
|
|
213
|
+
if (!pre) {
|
|
214
|
+
return append;
|
|
215
|
+
}
|
|
216
|
+
return "".concat(pre, "\n").concat(append);
|
|
217
|
+
}, "");
|
|
218
|
+
}
|
|
219
|
+
|
|
220
|
+
export { applyJsonPatch, findTargetElement, getMessageContentForCopy, isAIMessage, isAttachmentContent, isImageContent, isMarkdownContent, isSearchContent, isSuggestionContent, isTextContent, isThinkingContent, isToolCallContent, isUserMessage, safeParseJSON };
|
|
221
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../../../../../pro-components/chat/chatbot/core/utils/index.ts"],"sourcesContent":["import type {\n AIMessageContent,\n AttachmentContent,\n ChatMessagesData,\n ImageContent,\n MarkdownContent,\n SearchContent,\n SuggestionContent,\n TextContent,\n ThinkingContent,\n UserMessageContent,\n ToolCallContent,\n} from '../type';\n\n/**\n * 解析JSON Pointer路径\n */\nfunction parseJsonPointerPath(path: string): string[] {\n return path\n .slice(1) // 移除开头的斜杠\n .split('/')\n .map((part: string) =>\n // 处理JSON Pointer转义字符\n part.replace(/~1/g, '/').replace(/~0/g, '~'),\n );\n}\n\n/**\n * 检查是否为数组索引\n */\nfunction isArrayIndex(key: string): boolean {\n return /^\\d+$/.test(key);\n}\n\n/**\n * 扩展数组到指定长度\n */\nfunction extendArrayToIndex(array: any[], targetIndex: number): void {\n while (array.length <= targetIndex) {\n array.push(undefined);\n }\n}\n\n/**\n * 处理数组路径导航\n */\nfunction navigateArrayPath(target: any[], pathSegment: string, nextKey: string, operation: string): any {\n const arrayIndex = parseInt(pathSegment, 10);\n\n // 验证索引范围\n if (operation !== 'add' && arrayIndex >= target.length) {\n throw new Error(`数组索引 ${arrayIndex} 超出范围,当前数组长度: ${target.length}`);\n }\n\n // 扩展数组(如果需要)\n if (operation === 'add' && arrayIndex >= target.length) {\n extendArrayToIndex(target, arrayIndex);\n }\n\n // 创建中间对象(如果不存在)\n if (target[arrayIndex] == null) {\n target[arrayIndex] = isArrayIndex(nextKey) ? [] : {};\n }\n\n return target[arrayIndex];\n}\n\n/**\n * 处理对象路径导航\n */\nfunction navigateObjectPath(target: any, pathSegment: string, nextKey: string, operation: string): any {\n if (target[pathSegment] === undefined || target[pathSegment] === null) {\n if (operation === 'remove') {\n throw new Error('要删除的路径不存在');\n }\n // 创建中间对象\n target[pathSegment] = isArrayIndex(nextKey) ? [] : {};\n }\n return target[pathSegment];\n}\n\n/**\n * 导航到目标路径\n */\nfunction navigateToTarget(root: any, pathParts: string[], operation: string): any {\n let target = root;\n\n for (let i = 0; i < pathParts.length - 1; i++) {\n const pathSegment = pathParts[i];\n const nextKey = pathParts[i + 1];\n\n if (Array.isArray(target)) {\n target = navigateArrayPath(target, pathSegment, nextKey, operation);\n } else {\n target = navigateObjectPath(target, pathSegment, nextKey, operation);\n }\n }\n\n return target;\n}\n\n/**\n * 执行数组操作\n */\nfunction executeArrayOperation(target: any[], lastKey: string, operation: string, value: any): void {\n const arrayIndex = parseInt(lastKey, 10);\n\n switch (operation) {\n case 'add':\n if (arrayIndex >= target.length) {\n extendArrayToIndex(target, arrayIndex);\n }\n target[arrayIndex] = value;\n break;\n case 'replace':\n if (arrayIndex >= target.length) {\n throw new Error(`数组索引 ${arrayIndex} 超出范围,当前数组长度: ${target.length}`);\n }\n target[arrayIndex] = value;\n break;\n case 'remove':\n if (arrayIndex < target.length) {\n target.splice(arrayIndex, 1);\n }\n break;\n }\n}\n\n/**\n * 执行对象操作\n */\nfunction executeObjectOperation(target: any, lastKey: string, operation: string, value: any): void {\n switch (operation) {\n case 'add':\n case 'replace':\n target[lastKey] = value;\n break;\n case 'remove':\n if (target && lastKey in target) {\n delete target[lastKey];\n }\n break;\n }\n}\n\n/**\n * 执行JSON Patch操作\n */\nfunction executeOperation(target: any, lastKey: string, operation: string, value: any): void {\n if (Array.isArray(target)) {\n executeArrayOperation(target, lastKey, operation, value);\n } else {\n executeObjectOperation(target, lastKey, operation, value);\n }\n}\n\n/**\n * 应用JSON Patch操作到状态对象\n * 实现RFC6902规范的JSON Patch操作\n * @param state 原始状态对象\n * @param delta 包含patch操作的数组\n * @returns 更新后的新状态对象\n */\nexport function applyJsonPatch(state: any, delta: any[]): any {\n // 深拷贝原始状态,避免直接修改原对象\n const newState = JSON.parse(JSON.stringify(state));\n\n for (const { op, path, value } of delta) {\n try {\n // 解析路径\n const pathParts = parseJsonPointerPath(path);\n if (pathParts.length === 0) continue;\n\n // 导航到目标对象\n const target = navigateToTarget(newState, pathParts, op);\n const lastKey = pathParts[pathParts.length - 1];\n\n // 执行操作\n executeOperation(target, lastKey, op, value);\n } catch (error) {\n console.warn(`JSON Patch操作跳过: ${op} ${path} - ${error}`);\n // 继续处理下一个操作,而不是中断整个过程\n }\n }\n\n return newState;\n}\n\n/**\n * 安全解析JSON字符串的工具函数\n *\n * @param value 待解析的值,可能是字符串或已解析的对象\n * @param fallbackValue 解析失败时的回退值,默认为原值\n * @param errorContext 错误上下文,用于日志输出\n * @returns 解析后的值或回退值\n */\nexport function safeParseJSON<T = any>(value: any, fallbackValue?: T, errorContext?: string): T {\n if (typeof value !== 'string') {\n return value; // 如果不是字符串,直接返回\n }\n\n try {\n return JSON.parse(value);\n } catch (error) {\n const context = errorContext ? ` (${errorContext})` : '';\n console.warn(`Failed to parse JSON${context}:`, error);\n return (fallbackValue !== undefined ? fallbackValue : value) as T;\n }\n}\n\nexport function findTargetElement(event: MouseEvent, selector: string | string[]): HTMLElement | null {\n // 统一处理选择器输入格式(支持字符串或数组)\n const selectors = Array.isArray(selector) ? selector : selector.split(',').map((s) => s.trim());\n\n // 获取事件穿透路径(包含Shadow DOM内部元素)\n const eventPath = event.composedPath();\n\n // 遍历路径查找目标元素\n for (const el of eventPath) {\n // 类型安全判断 + 多选择器匹配\n if (el instanceof HTMLElement) {\n // 检查是否匹配任意一个选择器\n if (selectors.some((sel) => el.matches?.(sel))) {\n return el; // 找到即返回\n }\n }\n }\n\n return null; // 未找到返回null\n}\n\n// 类型守卫函数\nexport function isUserMessage(message: ChatMessagesData) {\n return message.role === 'user' && 'content' in message;\n}\n\nexport function isAIMessage(message: ChatMessagesData) {\n return message.role === 'assistant';\n}\n\nexport function isThinkingContent(content: AIMessageContent): content is ThinkingContent {\n return content.type === 'thinking';\n}\n\nexport function isTextContent(content: AIMessageContent): content is TextContent {\n return content.type === 'text';\n}\n\nexport function isMarkdownContent(content: AIMessageContent): content is MarkdownContent {\n return content.type === 'markdown';\n}\n\nexport function isImageContent(content: AIMessageContent): content is ImageContent {\n return content.type === 'image';\n}\n\nexport function isSearchContent(content: AIMessageContent): content is SearchContent {\n return content.type === 'search';\n}\n\nexport function isSuggestionContent(content: AIMessageContent): content is SuggestionContent {\n return content.type === 'suggestion';\n}\n\nexport function isAttachmentContent(content: UserMessageContent): content is AttachmentContent {\n return content.type === 'attachment';\n}\n\nexport function isToolCallContent(content: AIMessageContent): content is ToolCallContent {\n return content.type === 'toolcall';\n}\n\n/** 提取消息复制内容 */\nexport function getMessageContentForCopy(message: ChatMessagesData): string {\n if (!isAIMessage(message) || !message.content) {\n return '';\n }\n return message.content.reduce((pre: string, item: AIMessageContent) => {\n let append = '';\n if (isTextContent(item) || isMarkdownContent(item)) {\n append = item.data;\n } else if (isThinkingContent(item)) {\n append = item.data.text || '';\n }\n if (!pre) {\n return append;\n }\n return `${pre}\\n${append}`;\n }, '');\n}\n"],"names":["parseJsonPointerPath","path","slice","split","map","part","replace","isArrayIndex","key","test","extendArrayToIndex","array","targetIndex","length","push","navigateArrayPath","target","pathSegment","nextKey","operation","arrayIndex","parseInt","Error","concat","navigateObjectPath","navigateToTarget","root","pathParts","i","Array","isArray","executeArrayOperation","lastKey","value","splice","executeObjectOperation","executeOperation","applyJsonPatch","state","delta","newState","JSON","parse","stringify","_iterator","_createForOfIteratorHelper","_step","s","n","done","_step$value","op","error","console","warn","err","e","f","safeParseJSON","fallbackValue","errorContext","context","findTargetElement","event","selector","selectors","trim","eventPath","composedPath","_iterator2","_step2","_loop","el","HTMLElement","some","sel","_el$matches","matches","call","v","_ret","isUserMessage","message","role","isAIMessage","isThinkingContent","content","type","isTextContent","isMarkdownContent","isImageContent","isSearchContent","isSuggestionContent","isAttachmentContent","isToolCallContent","getMessageContentForCopy","reduce","pre","item","append","data","text"],"mappings":"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"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
export interface Logger {
|
|
2
|
+
debug(message: string, ...args: any[]): void;
|
|
3
|
+
info(message: string, ...args: any[]): void;
|
|
4
|
+
warn(message: string, ...args: any[]): void;
|
|
5
|
+
error(message: string, ...args: any[]): void;
|
|
6
|
+
}
|
|
7
|
+
export declare class ConsoleLogger implements Logger {
|
|
8
|
+
private enableDebug;
|
|
9
|
+
constructor(enableDebug?: boolean);
|
|
10
|
+
debug(message: string, ...args: any[]): void;
|
|
11
|
+
info(message: string, ...args: any[]): void;
|
|
12
|
+
warn(message: string, ...args: any[]): void;
|
|
13
|
+
error(message: string, ...args: any[]): void;
|
|
14
|
+
}
|
|
15
|
+
export declare class LoggerManager {
|
|
16
|
+
private static instance;
|
|
17
|
+
private static customLogger;
|
|
18
|
+
/**
|
|
19
|
+
* 获取日志实例(单例模式)
|
|
20
|
+
*/
|
|
21
|
+
static getLogger(): Logger;
|
|
22
|
+
/**
|
|
23
|
+
* 设置自定义日志实例
|
|
24
|
+
*/
|
|
25
|
+
static setLogger(logger: Logger): void;
|
|
26
|
+
/**
|
|
27
|
+
* 重置为默认日志
|
|
28
|
+
*/
|
|
29
|
+
static resetToDefault(): void;
|
|
30
|
+
}
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* tdesign v1.0.0-beta.1
|
|
3
|
+
* (c) 2025 tdesign
|
|
4
|
+
* @license MIT
|
|
5
|
+
*/
|
|
6
|
+
|
|
7
|
+
import _defineProperty from '@babel/runtime/helpers/defineProperty';
|
|
8
|
+
import _classCallCheck from '@babel/runtime/helpers/classCallCheck';
|
|
9
|
+
import _createClass from '@babel/runtime/helpers/createClass';
|
|
10
|
+
|
|
11
|
+
var ConsoleLogger = /*#__PURE__*/function () {
|
|
12
|
+
function ConsoleLogger() {
|
|
13
|
+
var enableDebug = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;
|
|
14
|
+
_classCallCheck(this, ConsoleLogger);
|
|
15
|
+
this.enableDebug = enableDebug;
|
|
16
|
+
}
|
|
17
|
+
return _createClass(ConsoleLogger, [{
|
|
18
|
+
key: "debug",
|
|
19
|
+
value: function debug(message) {
|
|
20
|
+
if (this.enableDebug) {
|
|
21
|
+
var _console;
|
|
22
|
+
for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {
|
|
23
|
+
args[_key - 1] = arguments[_key];
|
|
24
|
+
}
|
|
25
|
+
(_console = console).debug.apply(_console, ["[SSE Debug] ".concat(message)].concat(args));
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
}, {
|
|
29
|
+
key: "info",
|
|
30
|
+
value: function info(message) {
|
|
31
|
+
var _console2;
|
|
32
|
+
for (var _len2 = arguments.length, args = new Array(_len2 > 1 ? _len2 - 1 : 0), _key2 = 1; _key2 < _len2; _key2++) {
|
|
33
|
+
args[_key2 - 1] = arguments[_key2];
|
|
34
|
+
}
|
|
35
|
+
(_console2 = console).info.apply(_console2, ["[SSE Info] ".concat(message)].concat(args));
|
|
36
|
+
}
|
|
37
|
+
}, {
|
|
38
|
+
key: "warn",
|
|
39
|
+
value: function warn(message) {
|
|
40
|
+
var _console3;
|
|
41
|
+
for (var _len3 = arguments.length, args = new Array(_len3 > 1 ? _len3 - 1 : 0), _key3 = 1; _key3 < _len3; _key3++) {
|
|
42
|
+
args[_key3 - 1] = arguments[_key3];
|
|
43
|
+
}
|
|
44
|
+
(_console3 = console).warn.apply(_console3, ["[SSE Warn] ".concat(message)].concat(args));
|
|
45
|
+
}
|
|
46
|
+
}, {
|
|
47
|
+
key: "error",
|
|
48
|
+
value: function error(message) {
|
|
49
|
+
var _console4;
|
|
50
|
+
for (var _len4 = arguments.length, args = new Array(_len4 > 1 ? _len4 - 1 : 0), _key4 = 1; _key4 < _len4; _key4++) {
|
|
51
|
+
args[_key4 - 1] = arguments[_key4];
|
|
52
|
+
}
|
|
53
|
+
(_console4 = console).error.apply(_console4, ["[SSE Error] ".concat(message)].concat(args));
|
|
54
|
+
}
|
|
55
|
+
}]);
|
|
56
|
+
}();
|
|
57
|
+
var LoggerManager = /*#__PURE__*/function () {
|
|
58
|
+
function LoggerManager() {
|
|
59
|
+
_classCallCheck(this, LoggerManager);
|
|
60
|
+
}
|
|
61
|
+
return _createClass(LoggerManager, null, [{
|
|
62
|
+
key: "getLogger",
|
|
63
|
+
value: function getLogger() {
|
|
64
|
+
if (this.customLogger) {
|
|
65
|
+
return this.customLogger;
|
|
66
|
+
}
|
|
67
|
+
if (!this.instance) {
|
|
68
|
+
this.instance = new ConsoleLogger();
|
|
69
|
+
}
|
|
70
|
+
return this.instance;
|
|
71
|
+
}
|
|
72
|
+
}, {
|
|
73
|
+
key: "setLogger",
|
|
74
|
+
value: function setLogger(logger) {
|
|
75
|
+
this.customLogger = logger;
|
|
76
|
+
}
|
|
77
|
+
}, {
|
|
78
|
+
key: "resetToDefault",
|
|
79
|
+
value: function resetToDefault() {
|
|
80
|
+
this.customLogger = null;
|
|
81
|
+
}
|
|
82
|
+
}]);
|
|
83
|
+
}();
|
|
84
|
+
_defineProperty(LoggerManager, "customLogger", null);
|
|
85
|
+
|
|
86
|
+
export { ConsoleLogger, LoggerManager };
|
|
87
|
+
//# sourceMappingURL=logger.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"logger.js","sources":["../../../../../pro-components/chat/chatbot/core/utils/logger.ts"],"sourcesContent":["/* eslint-disable class-methods-use-this */\n/* eslint-disable no-await-in-loop, max-classes-per-file */\n// 日志接口\nexport interface Logger {\n debug(message: string, ...args: any[]): void;\n info(message: string, ...args: any[]): void;\n warn(message: string, ...args: any[]): void;\n error(message: string, ...args: any[]): void;\n}\n\n// 默认日志实现\nexport class ConsoleLogger implements Logger {\n private enableDebug: boolean;\n\n constructor(enableDebug = false) {\n this.enableDebug = enableDebug;\n }\n\n debug(message: string, ...args: any[]): void {\n if (this.enableDebug) {\n console.debug(`[SSE Debug] ${message}`, ...args);\n }\n }\n\n info(message: string, ...args: any[]): void {\n console.info(`[SSE Info] ${message}`, ...args);\n }\n\n warn(message: string, ...args: any[]): void {\n console.warn(`[SSE Warn] ${message}`, ...args);\n }\n\n error(message: string, ...args: any[]): void {\n console.error(`[SSE Error] ${message}`, ...args);\n }\n}\n\nexport class LoggerManager {\n private static instance: Logger;\n\n private static customLogger: Logger | null = null;\n\n /**\n * 获取日志实例(单例模式)\n */\n static getLogger(): Logger {\n if (this.customLogger) {\n return this.customLogger;\n }\n\n if (!this.instance) {\n this.instance = new ConsoleLogger();\n }\n return this.instance;\n }\n\n /**\n * 设置自定义日志实例\n */\n static setLogger(logger: Logger): void {\n this.customLogger = logger;\n }\n\n /**\n * 重置为默认日志\n */\n static resetToDefault(): void {\n this.customLogger = null;\n }\n}\n"],"names":["ConsoleLogger","enableDebug","_classCallCheck","_createClass","key","value","debug","message","_console","_len","arguments","length","args","Array","_key","console","apply","concat","info","_console2","_len2","_key2","warn","_console3","_len3","_key3","error","_console4","_len4","_key4","LoggerManager","getLogger","customLogger","instance","setLogger","logger","resetToDefault","_defineProperty"],"mappings":"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"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 状态订阅相关类型定义
|
|
3
|
+
*/
|
|
4
|
+
export interface StateActionOptions {
|
|
5
|
+
/**
|
|
6
|
+
* 初始状态
|
|
7
|
+
*/
|
|
8
|
+
initialState?: Record<string, any>;
|
|
9
|
+
/**
|
|
10
|
+
* 只订阅特定key的变化
|
|
11
|
+
*/
|
|
12
|
+
subscribeKey?: string;
|
|
13
|
+
}
|
|
14
|
+
export interface UseStateActionReturn {
|
|
15
|
+
/**
|
|
16
|
+
* 全量状态Map - 包含所有stateKey的状态
|
|
17
|
+
* 格式: { [stateKey]: stateData }
|
|
18
|
+
*/
|
|
19
|
+
stateMap: Record<string, any>;
|
|
20
|
+
/**
|
|
21
|
+
* 当前最新的状态key
|
|
22
|
+
*/
|
|
23
|
+
currentStateKey: string | null;
|
|
24
|
+
/**
|
|
25
|
+
* 设置状态Map,用于加载历史对话消息中的state数据
|
|
26
|
+
*/
|
|
27
|
+
setStateMap: (stateMap: Record<string, any> | ((prev: Record<string, any>) => Record<string, any>)) => void;
|
|
28
|
+
/**
|
|
29
|
+
* 获取当前完整状态的方法
|
|
30
|
+
*/
|
|
31
|
+
getCurrentState: () => Record<string, any>;
|
|
32
|
+
/**
|
|
33
|
+
* 获取特定 key 状态的方法
|
|
34
|
+
*/
|
|
35
|
+
getStateByKey: (key: string) => any;
|
|
36
|
+
}
|
|
37
|
+
export declare const useAgentState: <T = any>(options?: StateActionOptions) => UseStateActionReturn;
|
|
38
|
+
export declare const AgentStateContext: import("react").Context<UseStateActionReturn>;
|
|
39
|
+
export declare const useAgentStateDataByKey: (stateKey?: string) => any;
|
|
40
|
+
export declare const useAgentStateContext: () => UseStateActionReturn;
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* tdesign v1.0.0-beta.1
|
|
3
|
+
* (c) 2025 tdesign
|
|
4
|
+
* @license MIT
|
|
5
|
+
*/
|
|
6
|
+
|
|
7
|
+
import _defineProperty from '@babel/runtime/helpers/defineProperty';
|
|
8
|
+
import _slicedToArray from '@babel/runtime/helpers/slicedToArray';
|
|
9
|
+
import { useState, useRef, useEffect, createContext, useContext, useMemo } from 'react';
|
|
10
|
+
import { stateManager } from 'tdesign-web-components/lib/chat-engine';
|
|
11
|
+
|
|
12
|
+
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; }
|
|
13
|
+
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; }
|
|
14
|
+
var useAgentState = function useAgentState() {
|
|
15
|
+
var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
|
|
16
|
+
var initialState = options.initialState,
|
|
17
|
+
subscribeKey = options.subscribeKey;
|
|
18
|
+
var _useState = useState(initialState || {}),
|
|
19
|
+
_useState2 = _slicedToArray(_useState, 2),
|
|
20
|
+
stateMap = _useState2[0],
|
|
21
|
+
setStateMap = _useState2[1];
|
|
22
|
+
var _useState3 = useState(null),
|
|
23
|
+
_useState4 = _slicedToArray(_useState3, 2),
|
|
24
|
+
currentStateKey = _useState4[0],
|
|
25
|
+
setCurrentStateKey = _useState4[1];
|
|
26
|
+
var stateMapRef = useRef(stateMap);
|
|
27
|
+
stateMapRef.current = stateMap;
|
|
28
|
+
useEffect(function () {
|
|
29
|
+
return stateManager.subscribeToLatest(function (newState, newStateKey) {
|
|
30
|
+
if (subscribeKey && newStateKey !== subscribeKey) {
|
|
31
|
+
stateMapRef.current = _objectSpread(_objectSpread({}, stateMapRef.current), {}, _defineProperty({}, newStateKey, newState));
|
|
32
|
+
return;
|
|
33
|
+
}
|
|
34
|
+
setStateMap(function (prev) {
|
|
35
|
+
return _objectSpread(_objectSpread({}, prev), {}, _defineProperty({}, newStateKey, newState));
|
|
36
|
+
});
|
|
37
|
+
setCurrentStateKey(newStateKey);
|
|
38
|
+
});
|
|
39
|
+
}, [subscribeKey]);
|
|
40
|
+
return {
|
|
41
|
+
stateMap: stateMapRef.current,
|
|
42
|
+
currentStateKey: currentStateKey,
|
|
43
|
+
setStateMap: setStateMap,
|
|
44
|
+
getCurrentState: function getCurrentState() {
|
|
45
|
+
return stateMapRef.current;
|
|
46
|
+
},
|
|
47
|
+
getStateByKey: function getStateByKey(key) {
|
|
48
|
+
return stateMapRef.current[key];
|
|
49
|
+
}
|
|
50
|
+
};
|
|
51
|
+
};
|
|
52
|
+
var AgentStateContext = /*#__PURE__*/createContext(null);
|
|
53
|
+
var useAgentStateDataByKey = function useAgentStateDataByKey(stateKey) {
|
|
54
|
+
var contextState = useContext(AgentStateContext);
|
|
55
|
+
var independentState = useAgentState({
|
|
56
|
+
subscribeKey: stateKey
|
|
57
|
+
});
|
|
58
|
+
return useMemo(function () {
|
|
59
|
+
if (contextState) {
|
|
60
|
+
var stateMap2 = contextState.stateMap;
|
|
61
|
+
return stateKey ? stateMap2[stateKey] : stateMap2;
|
|
62
|
+
}
|
|
63
|
+
var stateMap = independentState.stateMap;
|
|
64
|
+
return stateKey ? stateMap[stateKey] : stateMap;
|
|
65
|
+
}, [stateKey, contextState && (stateKey ? contextState.stateMap[stateKey] : JSON.stringify(contextState.stateMap)), independentState && (stateKey ? independentState.stateMap[stateKey] : JSON.stringify(independentState.stateMap))]);
|
|
66
|
+
};
|
|
67
|
+
var useAgentStateContext = function useAgentStateContext() {
|
|
68
|
+
var context = useContext(AgentStateContext);
|
|
69
|
+
if (!context) {
|
|
70
|
+
throw new Error("useAgentState must be used within AgentStateProvider");
|
|
71
|
+
}
|
|
72
|
+
return context;
|
|
73
|
+
};
|
|
74
|
+
|
|
75
|
+
export { AgentStateContext, useAgentState, useAgentStateContext, useAgentStateDataByKey };
|
|
76
|
+
//# sourceMappingURL=useAgentState.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useAgentState.js","sources":["../../../../pro-components/chat/chatbot/hooks/useAgentState.ts"],"sourcesContent":["import { useState, useEffect, useRef, createContext, useContext, useMemo } from 'react';\nimport { stateManager } from 'tdesign-web-components/lib/chat-engine';\n\n/**\n * 状态订阅相关类型定义\n */\n\nexport interface StateActionOptions {\n /**\n * 初始状态\n */\n initialState?: Record<string, any>;\n /**\n * 只订阅特定key的变化\n */\n subscribeKey?: string;\n}\n\nexport interface UseStateActionReturn {\n /**\n * 全量状态Map - 包含所有stateKey的状态\n * 格式: { [stateKey]: stateData }\n */\n stateMap: Record<string, any>;\n /**\n * 当前最新的状态key\n */\n currentStateKey: string | null;\n /**\n * 设置状态Map,用于加载历史对话消息中的state数据\n */\n setStateMap: (stateMap: Record<string, any> | ((prev: Record<string, any>) => Record<string, any>)) => void;\n /**\n * 获取当前完整状态的方法\n */\n getCurrentState: () => Record<string, any>;\n /**\n * 获取特定 key 状态的方法\n */\n getStateByKey: (key: string) => any;\n}\n\nexport const useAgentState = <T = any>(options: StateActionOptions = {}): UseStateActionReturn => {\n const { initialState, subscribeKey } = options;\n const [stateMap, setStateMap] = useState<Record<string, any>>(initialState || {});\n const [currentStateKey, setCurrentStateKey] = useState<string | null>(null);\n\n // 使用 ref 来避免不必要的重新渲染\n const stateMapRef = useRef(stateMap);\n stateMapRef.current = stateMap;\n\n useEffect(\n () =>\n stateManager.subscribeToLatest((newState: T, newStateKey: string) => {\n // 如果指定了 subscribeKey,只有匹配时才更新状态\n if (subscribeKey && newStateKey !== subscribeKey) {\n // 仍然更新内部状态,但不触发重新渲染\n stateMapRef.current = {\n ...stateMapRef.current,\n [newStateKey]: newState,\n };\n return;\n }\n\n setStateMap((prev) => ({\n ...prev,\n [newStateKey]: newState,\n }));\n setCurrentStateKey(newStateKey);\n }),\n [subscribeKey],\n );\n\n return {\n stateMap: stateMapRef.current,\n currentStateKey,\n setStateMap,\n getCurrentState: () => stateMapRef.current,\n getStateByKey: (key: string) => stateMapRef.current[key],\n };\n};\n\n// 创建 AgentState Context\nexport const AgentStateContext = createContext<UseStateActionReturn | null>(null);\n\n// 简化的状态选择器\nexport const useAgentStateDataByKey = (stateKey?: string) => {\n const contextState = useContext(AgentStateContext);\n const independentState = useAgentState({ subscribeKey: stateKey });\n\n return useMemo(() => {\n if (contextState) {\n // 有 Provider,使用 Context 状态\n const { stateMap } = contextState;\n return stateKey ? stateMap[stateKey] : stateMap;\n }\n\n // 没有 Provider,使用独立状态\n const { stateMap } = independentState;\n return stateKey ? stateMap[stateKey] : stateMap;\n }, [\n stateKey,\n // 关键:添加和 useAgentStateByKey 相同的深度依赖逻辑\n contextState && (stateKey ? contextState.stateMap[stateKey] : JSON.stringify(contextState.stateMap)),\n independentState && (stateKey ? independentState.stateMap[stateKey] : JSON.stringify(independentState.stateMap)),\n ]);\n};\n\n// 导出 Context Hook\nexport const useAgentStateContext = (): UseStateActionReturn => {\n const context = useContext(AgentStateContext);\n\n if (!context) {\n throw new Error('useAgentState must be used within AgentStateProvider');\n }\n\n return context;\n};\n"],"names":["useAgentState","options","arguments","length","undefined","initialState","subscribeKey","_useState","useState","_useState2","_slicedToArray","stateMap","setStateMap","_useState3","_useState4","currentStateKey","setCurrentStateKey","stateMapRef","useRef","current","useEffect","stateManager","subscribeToLatest","newState","newStateKey","_objectSpread","_defineProperty","prev","getCurrentState","getStateByKey","key","AgentStateContext","createContext","useAgentStateDataByKey","stateKey","contextState","useContext","independentState","useMemo","JSON","stringify","useAgentStateContext","context","Error"],"mappings":"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"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { StateActionOptions, UseStateActionReturn } from '../core/adapters/agui';
|
|
2
|
+
/**
|
|
3
|
+
/**
|
|
4
|
+
* 状态订阅Hook
|
|
5
|
+
* 支持两种模式:
|
|
6
|
+
* 1. 不指定stateKey:订阅当前活跃stateKey的状态(会跟随最新状态变化)
|
|
7
|
+
* 2. 指定stateKey:订阅特定stateKey的状态(不会跟随其他stateKey变化)
|
|
8
|
+
*/
|
|
9
|
+
export declare function useAgentState<T = any>(options?: StateActionOptions): UseStateActionReturn<T>;
|
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* tdesign v1.0.1-beta.18
|
|
3
|
+
* (c) 2025 tdesign
|
|
4
|
+
* @license MIT
|
|
5
|
+
*/
|
|
6
|
+
|
|
7
|
+
import _slicedToArray from '@babel/runtime/helpers/slicedToArray';
|
|
8
|
+
import { useState, useEffect } from 'react';
|
|
9
|
+
import '../core/adapters/agui/index.js';
|
|
10
|
+
import { stateManager } from '../core/adapters/agui/state/StateManager.js';
|
|
11
|
+
import '@babel/runtime/helpers/classCallCheck';
|
|
12
|
+
import '@babel/runtime/helpers/createClass';
|
|
13
|
+
import '../core/adapters/agui/event-mapper.js';
|
|
14
|
+
import '@babel/runtime/helpers/toConsumableArray';
|
|
15
|
+
import '@babel/runtime/helpers/typeof';
|
|
16
|
+
import '@babel/runtime/helpers/defineProperty';
|
|
17
|
+
import '../core/adapters/agui/events.js';
|
|
18
|
+
import 'zod';
|
|
19
|
+
import '../core/adapters/agui/types.js';
|
|
20
|
+
import '@babel/runtime/helpers/possibleConstructorReturn';
|
|
21
|
+
import '@babel/runtime/helpers/getPrototypeOf';
|
|
22
|
+
import '@babel/runtime/helpers/inherits';
|
|
23
|
+
import '@babel/runtime/helpers/wrapNativeSuper';
|
|
24
|
+
import '../core/utils/index.js';
|
|
25
|
+
|
|
26
|
+
function useAgentState() {
|
|
27
|
+
var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
|
|
28
|
+
var initialState = options.initialState,
|
|
29
|
+
targetStateKey = options.stateKey;
|
|
30
|
+
var _useState = useState(function () {
|
|
31
|
+
var map = /* @__PURE__ */new Map();
|
|
32
|
+
if (targetStateKey) {
|
|
33
|
+
var targetState = stateManager.getState(targetStateKey);
|
|
34
|
+
if (targetState !== void 0) {
|
|
35
|
+
map.set(targetStateKey, targetState);
|
|
36
|
+
}
|
|
37
|
+
} else {
|
|
38
|
+
var currentStateKey2 = stateManager.getCurrentStateKey();
|
|
39
|
+
if (currentStateKey2) {
|
|
40
|
+
var currentState = stateManager.getCurrentState();
|
|
41
|
+
if (currentState !== void 0) {
|
|
42
|
+
map.set(currentStateKey2, currentState);
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
return map;
|
|
47
|
+
}),
|
|
48
|
+
_useState2 = _slicedToArray(_useState, 2),
|
|
49
|
+
stateMap = _useState2[0],
|
|
50
|
+
setStateMap = _useState2[1];
|
|
51
|
+
var _useState3 = useState(function () {
|
|
52
|
+
return targetStateKey || stateManager.getCurrentStateKey();
|
|
53
|
+
}),
|
|
54
|
+
_useState4 = _slicedToArray(_useState3, 2),
|
|
55
|
+
currentStateKey = _useState4[0],
|
|
56
|
+
setCurrentStateKey = _useState4[1];
|
|
57
|
+
var _useState5 = useState(false),
|
|
58
|
+
_useState6 = _slicedToArray(_useState5, 2),
|
|
59
|
+
updating = _useState6[0],
|
|
60
|
+
setUpdating = _useState6[1];
|
|
61
|
+
useEffect(function () {
|
|
62
|
+
if (targetStateKey) {
|
|
63
|
+
var unsubscribe2 = stateManager.subscribe(targetStateKey, function (newState) {
|
|
64
|
+
setStateMap(function (prev) {
|
|
65
|
+
var newMap = new Map(prev);
|
|
66
|
+
newMap.set(targetStateKey, newState);
|
|
67
|
+
return newMap;
|
|
68
|
+
});
|
|
69
|
+
setUpdating(false);
|
|
70
|
+
});
|
|
71
|
+
return unsubscribe2;
|
|
72
|
+
}
|
|
73
|
+
var unsubscribe = stateManager.subscribeToCurrentState(function (newState, newStateKey) {
|
|
74
|
+
if (newStateKey) {
|
|
75
|
+
setStateMap(function (prev) {
|
|
76
|
+
var newMap = new Map(prev);
|
|
77
|
+
newMap.set(newStateKey, newState);
|
|
78
|
+
return newMap;
|
|
79
|
+
});
|
|
80
|
+
setCurrentStateKey(newStateKey);
|
|
81
|
+
} else {
|
|
82
|
+
setStateMap(/* @__PURE__ */new Map());
|
|
83
|
+
setCurrentStateKey(null);
|
|
84
|
+
}
|
|
85
|
+
setUpdating(false);
|
|
86
|
+
});
|
|
87
|
+
return unsubscribe;
|
|
88
|
+
}, [targetStateKey]);
|
|
89
|
+
var displayStateKey = targetStateKey || currentStateKey;
|
|
90
|
+
var displayState = displayStateKey ? stateMap.get(displayStateKey) : void 0;
|
|
91
|
+
return {
|
|
92
|
+
state: displayState !== void 0 ? displayState : initialState || null,
|
|
93
|
+
stateKey: displayStateKey,
|
|
94
|
+
updating: updating,
|
|
95
|
+
stateMap: stateMap,
|
|
96
|
+
setStateMap: setStateMap
|
|
97
|
+
};
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
export { useAgentState };
|
|
101
|
+
//# sourceMappingURL=useAgentStateAction.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useAgentStateAction.js","sources":["../../../../pro-components/chat/chatbot/hooks/useAgentStateAction.ts"],"sourcesContent":["import { useState, useEffect } from 'react';\nimport { stateManager } from '../core/adapters/agui';\nimport type { StateActionOptions, UseStateActionReturn } from '../core/adapters/agui';\n\n/**\n/**\n * 状态订阅Hook\n * 支持两种模式:\n * 1. 不指定stateKey:订阅当前活跃stateKey的状态(会跟随最新状态变化)\n * 2. 指定stateKey:订阅特定stateKey的状态(不会跟随其他stateKey变化)\n */\nexport function useAgentState<T = any>(options: StateActionOptions = {}): UseStateActionReturn<T> {\n const { initialState, stateKey: targetStateKey } = options;\n\n // 状态Map:stateKey -> state\n const [stateMap, setStateMap] = useState<Map<string, T>>(() => {\n const map = new Map<string, T>();\n\n if (targetStateKey) {\n // 如果指定了stateKey,获取该stateKey的状态\n const targetState = stateManager.getState(targetStateKey);\n if (targetState !== undefined) {\n map.set(targetStateKey, targetState);\n }\n } else {\n // 如果没有指定stateKey,获取当前stateKey的状态\n const currentStateKey = stateManager.getCurrentStateKey();\n if (currentStateKey) {\n const currentState = stateManager.getCurrentState();\n if (currentState !== undefined) {\n map.set(currentStateKey, currentState);\n }\n }\n }\n\n return map;\n });\n\n const [currentStateKey, setCurrentStateKey] = useState<string | null>(\n () => targetStateKey || stateManager.getCurrentStateKey(),\n );\n\n const [updating, setUpdating] = useState(false);\n\n // 订阅状态变化\n useEffect(() => {\n if (targetStateKey) {\n // 模式1:订阅特定stateKey的状态\n const unsubscribe = stateManager.subscribe(targetStateKey, (newState: T) => {\n setStateMap((prev) => {\n const newMap = new Map(prev);\n newMap.set(targetStateKey, newState);\n return newMap;\n });\n setUpdating(false);\n });\n\n return unsubscribe;\n }\n // 模式2:订阅当前活跃stateKey的状态\n const unsubscribe = stateManager.subscribeToCurrentState((newState: T, newStateKey: string | null) => {\n if (newStateKey) {\n setStateMap((prev) => {\n const newMap = new Map(prev);\n newMap.set(newStateKey, newState);\n return newMap;\n });\n setCurrentStateKey(newStateKey);\n } else {\n // 如果没有当前stateKey,清空状态\n setStateMap(new Map());\n setCurrentStateKey(null);\n }\n setUpdating(false);\n });\n\n return unsubscribe;\n }, [targetStateKey]);\n\n // 获取当前应该显示的状态\n const displayStateKey = targetStateKey || currentStateKey;\n const displayState = displayStateKey ? stateMap.get(displayStateKey) : undefined;\n\n return {\n state: displayState !== undefined ? displayState : initialState || null,\n stateKey: displayStateKey,\n updating,\n stateMap,\n setStateMap,\n };\n}\n"],"names":["useAgentState","options","arguments","length","undefined","initialState","targetStateKey","stateKey","_useState","useState","map","Map","targetState","stateManager","getState","set","currentStateKey","getCurrentStateKey","currentState","getCurrentState","_useState2","_slicedToArray","stateMap","setStateMap","_useState3","_useState4","setCurrentStateKey","_useState5","_useState6","updating","setUpdating","useEffect","unsubscribe","subscribe","newState","prev","newMap","subscribeToCurrentState","newStateKey","displayStateKey","displayState","get","state"],"mappings":"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"}
|