@tdesign-react/chat 1.1.0-alpha.6 → 1.1.0-alpha.8
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 +14 -1
- package/README.md +76 -22
- package/es/_chunks/dep-3e40d789.js +169 -0
- package/es/_chunks/dep-3e40d789.js.map +1 -0
- package/es/_chunks/dep-4dedfbef.js +438 -0
- package/es/_chunks/dep-4dedfbef.js.map +1 -0
- package/es/_chunks/dep-e9dbff09.js +1247 -0
- package/es/_chunks/dep-e9dbff09.js.map +1 -0
- package/es/_chunks/dep-ebc4cf30.js +1247 -0
- package/es/_chunks/dep-ebc4cf30.js.map +1 -0
- package/es/_chunks/dep-f691a67e.js +438 -0
- package/es/_chunks/dep-f691a67e.js.map +1 -0
- package/es/_chunks/dep-f8016301.js +169 -0
- package/es/_chunks/dep-f8016301.js.map +1 -0
- package/es/_util/reactify.js +33 -13
- package/es/_util/reactify.js.map +1 -1
- package/es/_util/useDynamicStyle.js +1 -1
- package/es/attachments/index.js +1 -1
- package/es/chat-actionbar/index.d.ts +13 -4
- package/es/chat-actionbar/index.js +35 -5
- package/es/chat-actionbar/index.js.map +1 -1
- package/es/chat-engine/components/activity/index.js +2 -2
- package/es/chat-engine/components/activity/registry.js +1 -1
- package/es/chat-engine/components/activity/render.js +2 -3
- package/es/chat-engine/components/activity/render.js.map +1 -1
- package/es/chat-engine/components/activity/types.d.ts +0 -3
- package/es/chat-engine/components/activity/types.js +1 -1
- package/es/chat-engine/components/index.js +4 -4
- package/es/chat-engine/components/json-render/catalog/atomic/button.d.ts +1 -1
- package/es/chat-engine/components/json-render/catalog/atomic/button.js +1 -1
- package/es/chat-engine/components/json-render/catalog/atomic/button.js.map +1 -1
- package/es/chat-engine/components/json-render/catalog/atomic/card.d.ts +1 -1
- package/es/chat-engine/components/json-render/catalog/atomic/card.js +1 -1
- package/es/chat-engine/components/json-render/catalog/atomic/card.js.map +1 -1
- package/es/chat-engine/components/json-render/catalog/atomic/input.js +4 -4
- package/es/chat-engine/components/json-render/catalog/atomic/layout.d.ts +5 -5
- package/es/chat-engine/components/json-render/catalog/atomic/layout.js +1 -1
- package/es/chat-engine/components/json-render/catalog/atomic/layout.js.map +1 -1
- package/es/chat-engine/components/json-render/catalog/atomic/text.d.ts +1 -1
- package/es/chat-engine/components/json-render/catalog/atomic/text.js +1 -1
- package/es/chat-engine/components/json-render/catalog/atomic/text.js.map +1 -1
- package/es/chat-engine/components/json-render/catalog/catalog-to-prompt.js +1 -1
- package/es/chat-engine/components/json-render/contexts/actions.js +2 -2
- package/es/chat-engine/components/json-render/contexts/data.js +2 -2
- package/es/chat-engine/components/json-render/contexts/index.js +2 -2
- package/es/chat-engine/components/json-render/contexts/store.js +1 -1
- package/es/chat-engine/components/json-render/contexts/tree.js +1 -1
- package/es/chat-engine/components/json-render/contexts/validation.js +2 -2
- package/es/chat-engine/components/json-render/contexts/visibility.js +2 -2
- package/es/chat-engine/components/json-render/index.js +4 -4
- package/es/chat-engine/components/json-render/registry/a2ui-binding.js +4 -4
- package/es/chat-engine/components/json-render/registry/a2ui-registry.js +4 -4
- package/es/chat-engine/components/json-render/registry/config.js +4 -4
- package/es/chat-engine/components/json-render/registry/index.js +4 -4
- package/es/chat-engine/components/json-render/renderer/A2UIJsonRenderActivityRenderer.js +3 -3
- package/es/chat-engine/components/json-render/renderer/JsonRenderActivityRenderer.js +3 -3
- package/es/chat-engine/components/json-render/renderer/JsonUIRenderer.js +2 -2
- package/es/chat-engine/components/json-render/renderer/_index.js +2 -2
- package/es/chat-engine/components/json-render/types.js +1 -1
- package/es/chat-engine/components/provider/agent-state.js +2 -2
- package/es/chat-engine/components/toolcall/index.js +2 -2
- package/es/chat-engine/components/toolcall/registry.js +1 -1
- package/es/chat-engine/components/toolcall/render.js +2 -2
- 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/core/adapters/a2ui/index.js +1 -1
- package/es/chat-engine/core/adapters/a2ui/processor/A2uiMessageProcessor.js +1 -1
- package/es/chat-engine/core/adapters/a2ui/processor/ComponentTree.js +1 -1
- package/es/chat-engine/core/adapters/a2ui/processor/DataStore.js +1 -1
- package/es/chat-engine/core/adapters/a2ui/processor/PathResolver.js +1 -1
- package/es/chat-engine/core/adapters/a2ui/types/index.js +1 -1
- package/es/chat-engine/core/adapters/a2ui/types/types.js +1 -1
- package/es/chat-engine/core/adapters/a2ui/utils/binding.js +1 -1
- package/es/chat-engine/core/adapters/a2ui/utils/index.js +1 -1
- package/es/chat-engine/core/adapters/a2ui/utils/validation.js +1 -1
- package/es/chat-engine/core/adapters/agui/ActivityManager.js +1 -1
- package/es/chat-engine/core/adapters/agui/StateManager.js +1 -1
- package/es/chat-engine/core/adapters/agui/event-mapper.js +1 -1
- package/es/chat-engine/core/adapters/agui/index.js +11 -5
- package/es/chat-engine/core/adapters/agui/index.js.map +1 -1
- package/es/chat-engine/core/adapters/agui/types/events.d.ts +10 -10
- package/es/chat-engine/core/adapters/agui/types/events.js +1 -1
- package/es/chat-engine/core/adapters/agui/types/index.d.ts +22 -14
- package/es/chat-engine/core/adapters/agui/types/index.js +2 -2
- package/es/chat-engine/core/adapters/agui/types/index.js.map +1 -1
- package/es/chat-engine/core/adapters/agui/utils.js +1 -1
- package/es/chat-engine/core/adapters/index.js +1 -1
- package/es/chat-engine/core/adapters/json-render/SurfaceStateManager.js +1 -1
- package/es/chat-engine/core/adapters/json-render/a2ui-to-jsonrender.js +1 -1
- package/es/chat-engine/core/adapters/json-render/engine.js +1 -1
- package/es/chat-engine/core/adapters/json-render/index.js +1 -1
- package/es/chat-engine/core/adapters/json-render/types/a2ui.js +1 -1
- package/es/chat-engine/core/adapters/json-render/types/core.js +1 -1
- package/es/chat-engine/core/adapters/json-render/types/index.js +1 -1
- package/es/chat-engine/core/event-bus/ChatEventBus.js +1 -1
- package/es/chat-engine/core/event-bus/index.js +1 -1
- package/es/chat-engine/core/event-bus/types.js +1 -1
- package/es/chat-engine/core/index.js +2 -2
- package/es/chat-engine/core/processor/index.js +1 -1
- package/es/chat-engine/core/server/batch-client.js +1 -1
- package/es/chat-engine/core/server/connection-manager.js +1 -1
- package/es/chat-engine/core/server/errors.js +1 -1
- package/es/chat-engine/core/server/index.js +1 -1
- package/es/chat-engine/core/server/llm-service.js +1 -1
- package/es/chat-engine/core/server/sse-client.js +1 -1
- package/es/chat-engine/core/server/sse-parser.js +1 -1
- package/es/chat-engine/core/server/types.js +1 -1
- package/es/chat-engine/core/store/message.js +2 -2
- package/es/chat-engine/core/store/model.js +2 -2
- package/es/chat-engine/core/store/reactiveState.js +2 -2
- package/es/chat-engine/core/type.js +1 -1
- package/es/chat-engine/core/utils/eventEmitter.js +1 -1
- package/es/chat-engine/core/utils/immutable-patch.js +1 -1
- package/es/chat-engine/core/utils/index.js +1 -1
- package/es/chat-engine/core/utils/json-patch/helpers.js +1 -1
- package/es/chat-engine/core/utils/json-patch/index.js +1 -1
- package/es/chat-engine/core/utils/logger.js +1 -1
- package/es/chat-engine/core/utils/performance.js +1 -1
- package/es/chat-engine/hooks/index.js +2 -2
- package/es/chat-engine/hooks/useAgentActivity.js +1 -1
- package/es/chat-engine/hooks/useAgentActivity.js.map +1 -1
- package/es/chat-engine/hooks/useAgentState.js +2 -2
- package/es/chat-engine/hooks/useAgentToolcall.js +1 -1
- package/es/chat-engine/hooks/useChat.js +2 -2
- package/es/chat-engine/index.js +4 -4
- package/es/chat-filecard/index.js +1 -1
- package/es/chat-loading/index.js +1 -1
- package/es/chat-markdown/index.js +1 -1
- package/es/chat-message/index.js +1 -1
- package/es/chat-sender/index.js +1 -1
- package/es/chat-thinking/index.js +1 -1
- package/es/chatbot/index.js +1 -1
- package/es/index.js +4 -4
- package/es/style/index.js +1 -1
- package/package.json +6 -4
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* tdesign v1.1.0-alpha.
|
|
2
|
+
* tdesign v1.1.0-alpha.8
|
|
3
3
|
* (c) 2026 tdesign
|
|
4
4
|
* @license MIT
|
|
5
5
|
*/
|
|
@@ -10,10 +10,10 @@ import '@babel/runtime/helpers/typeof';
|
|
|
10
10
|
import '@babel/runtime/helpers/slicedToArray';
|
|
11
11
|
import 'react';
|
|
12
12
|
import '@json-render/core';
|
|
13
|
-
export { e as default, e as withA2UIBinding } from '../../../../_chunks/dep-
|
|
13
|
+
export { e as default, e as withA2UIBinding } from '../../../../_chunks/dep-f691a67e.js';
|
|
14
14
|
import '../contexts/data.js';
|
|
15
15
|
import '../renderer/JsonRenderActivityRenderer.js';
|
|
16
|
-
import '../../../../_chunks/dep-
|
|
16
|
+
import '../../../../_chunks/dep-f8016301.js';
|
|
17
17
|
import '../renderer/JsonUIRenderer.js';
|
|
18
18
|
import '../contexts/index.js';
|
|
19
19
|
import '../contexts/visibility.js';
|
|
@@ -23,7 +23,7 @@ import '@babel/runtime/helpers/createClass';
|
|
|
23
23
|
import '@babel/runtime/helpers/possibleConstructorReturn';
|
|
24
24
|
import '@babel/runtime/helpers/getPrototypeOf';
|
|
25
25
|
import '@babel/runtime/helpers/inherits';
|
|
26
|
-
import '../../../../_chunks/dep-
|
|
26
|
+
import '../../../../_chunks/dep-e9dbff09.js';
|
|
27
27
|
import '@babel/runtime/helpers/wrapNativeSuper';
|
|
28
28
|
import '../contexts/actions.js';
|
|
29
29
|
import '@babel/runtime/helpers/asyncToGenerator';
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* tdesign v1.1.0-alpha.
|
|
2
|
+
* tdesign v1.1.0-alpha.8
|
|
3
3
|
* (c) 2026 tdesign
|
|
4
4
|
* @license MIT
|
|
5
5
|
*/
|
|
@@ -8,12 +8,12 @@ import '@babel/runtime/helpers/defineProperty';
|
|
|
8
8
|
import '@babel/runtime/helpers/objectWithoutProperties';
|
|
9
9
|
import 'react';
|
|
10
10
|
import 'tdesign-react';
|
|
11
|
-
export { d as A2UIButton, A as A2UITextField, a as a2uiRegistry, b as createA2UIRegistry, a as default } from '../../../../_chunks/dep-
|
|
11
|
+
export { d as A2UIButton, A as A2UITextField, a as a2uiRegistry, b as createA2UIRegistry, a as default } from '../../../../_chunks/dep-f691a67e.js';
|
|
12
12
|
import '../catalog/atomic/card.js';
|
|
13
13
|
import '../catalog/atomic/text.js';
|
|
14
14
|
import '../catalog/atomic/layout.js';
|
|
15
15
|
import '../renderer/JsonRenderActivityRenderer.js';
|
|
16
|
-
import '../../../../_chunks/dep-
|
|
16
|
+
import '../../../../_chunks/dep-f8016301.js';
|
|
17
17
|
import '@babel/runtime/helpers/typeof';
|
|
18
18
|
import '../renderer/JsonUIRenderer.js';
|
|
19
19
|
import '../contexts/index.js';
|
|
@@ -24,7 +24,7 @@ import '@babel/runtime/helpers/createClass';
|
|
|
24
24
|
import '@babel/runtime/helpers/possibleConstructorReturn';
|
|
25
25
|
import '@babel/runtime/helpers/getPrototypeOf';
|
|
26
26
|
import '@babel/runtime/helpers/inherits';
|
|
27
|
-
import '../../../../_chunks/dep-
|
|
27
|
+
import '../../../../_chunks/dep-e9dbff09.js';
|
|
28
28
|
import '@babel/runtime/helpers/wrapNativeSuper';
|
|
29
29
|
import '@json-render/core';
|
|
30
30
|
import '../contexts/store.js';
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* tdesign v1.1.0-alpha.
|
|
2
|
+
* tdesign v1.1.0-alpha.8
|
|
3
3
|
* (c) 2026 tdesign
|
|
4
4
|
* @license MIT
|
|
5
5
|
*/
|
|
@@ -8,8 +8,8 @@ import '@babel/runtime/helpers/defineProperty';
|
|
|
8
8
|
import 'react';
|
|
9
9
|
import '../renderer/JsonRenderActivityRenderer.js';
|
|
10
10
|
import '../renderer/A2UIJsonRenderActivityRenderer.js';
|
|
11
|
-
export { g as createA2UIJsonRenderActivityConfig, f as createJsonRenderActivityConfig } from '../../../../_chunks/dep-
|
|
12
|
-
import '../../../../_chunks/dep-
|
|
11
|
+
export { g as createA2UIJsonRenderActivityConfig, f as createJsonRenderActivityConfig } from '../../../../_chunks/dep-f691a67e.js';
|
|
12
|
+
import '../../../../_chunks/dep-f8016301.js';
|
|
13
13
|
import '@babel/runtime/helpers/typeof';
|
|
14
14
|
import '../renderer/JsonUIRenderer.js';
|
|
15
15
|
import '../contexts/index.js';
|
|
@@ -20,7 +20,7 @@ import '@babel/runtime/helpers/createClass';
|
|
|
20
20
|
import '@babel/runtime/helpers/possibleConstructorReturn';
|
|
21
21
|
import '@babel/runtime/helpers/getPrototypeOf';
|
|
22
22
|
import '@babel/runtime/helpers/inherits';
|
|
23
|
-
import '../../../../_chunks/dep-
|
|
23
|
+
import '../../../../_chunks/dep-e9dbff09.js';
|
|
24
24
|
import '@babel/runtime/helpers/wrapNativeSuper';
|
|
25
25
|
import '@json-render/core';
|
|
26
26
|
import '../contexts/store.js';
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* tdesign v1.1.0-alpha.
|
|
2
|
+
* tdesign v1.1.0-alpha.8
|
|
3
3
|
* (c) 2026 tdesign
|
|
4
4
|
* @license MIT
|
|
5
5
|
*/
|
|
@@ -7,9 +7,9 @@
|
|
|
7
7
|
import '@babel/runtime/helpers/defineProperty';
|
|
8
8
|
import '@babel/runtime/helpers/slicedToArray';
|
|
9
9
|
import 'react';
|
|
10
|
-
import '../../../../_chunks/dep-
|
|
10
|
+
import '../../../../_chunks/dep-f8016301.js';
|
|
11
11
|
import '../catalog/atomic/button.js';
|
|
12
|
-
export { d as A2UIButton, A as A2UITextField, a as a2uiRegistry, g as createA2UIJsonRenderActivityConfig, b as createA2UIRegistry, c as createCustomRegistry, f as createJsonRenderActivityConfig, t as tdesignRegistry, e as withA2UIBinding, w as withStableProps } from '../../../../_chunks/dep-
|
|
12
|
+
export { d as A2UIButton, A as A2UITextField, a as a2uiRegistry, g as createA2UIJsonRenderActivityConfig, b as createA2UIRegistry, c as createCustomRegistry, f as createJsonRenderActivityConfig, t as tdesignRegistry, e as withA2UIBinding, w as withStableProps } from '../../../../_chunks/dep-f691a67e.js';
|
|
13
13
|
import '../catalog/atomic/card.js';
|
|
14
14
|
import '../catalog/atomic/text.js';
|
|
15
15
|
import '../catalog/atomic/layout.js';
|
|
@@ -25,7 +25,7 @@ import '@babel/runtime/helpers/createClass';
|
|
|
25
25
|
import '@babel/runtime/helpers/possibleConstructorReturn';
|
|
26
26
|
import '@babel/runtime/helpers/getPrototypeOf';
|
|
27
27
|
import '@babel/runtime/helpers/inherits';
|
|
28
|
-
import '../../../../_chunks/dep-
|
|
28
|
+
import '../../../../_chunks/dep-e9dbff09.js';
|
|
29
29
|
import '@babel/runtime/helpers/wrapNativeSuper';
|
|
30
30
|
import '@json-render/core';
|
|
31
31
|
import '../contexts/store.js';
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* tdesign v1.1.0-alpha.
|
|
2
|
+
* tdesign v1.1.0-alpha.8
|
|
3
3
|
* (c) 2026 tdesign
|
|
4
4
|
* @license MIT
|
|
5
5
|
*/
|
|
@@ -38,7 +38,7 @@ import '../../../core/event-bus/types.js';
|
|
|
38
38
|
import '../../../core/store/message.js';
|
|
39
39
|
import '@babel/runtime/helpers/get';
|
|
40
40
|
import '../../../core/store/reactiveState.js';
|
|
41
|
-
import '../../../../_chunks/dep-
|
|
41
|
+
import '../../../../_chunks/dep-e9dbff09.js';
|
|
42
42
|
import '../../../core/processor/index.js';
|
|
43
43
|
import '../../../core/server/index.js';
|
|
44
44
|
import '../../../core/server/llm-service.js';
|
|
@@ -55,7 +55,7 @@ import '../../../core/adapters/json-render/index.js';
|
|
|
55
55
|
import '../../../core/adapters/json-render/types/a2ui.js';
|
|
56
56
|
import '../../../core/adapters/json-render/types/index.js';
|
|
57
57
|
import '../../../core/adapters/json-render/types/core.js';
|
|
58
|
-
import '../../../../_chunks/dep-
|
|
58
|
+
import '../../../../_chunks/dep-f8016301.js';
|
|
59
59
|
import './JsonUIRenderer.js';
|
|
60
60
|
import '../contexts/index.js';
|
|
61
61
|
import '../contexts/data.js';
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* tdesign v1.1.0-alpha.
|
|
2
|
+
* tdesign v1.1.0-alpha.8
|
|
3
3
|
* (c) 2026 tdesign
|
|
4
4
|
* @license MIT
|
|
5
5
|
*/
|
|
6
6
|
|
|
7
7
|
import React, { useMemo } from 'react';
|
|
8
|
-
import { r as reactFastCompare } from '../../../../_chunks/dep-
|
|
8
|
+
import { r as reactFastCompare } from '../../../../_chunks/dep-f8016301.js';
|
|
9
9
|
import { JsonRenderElement } from './JsonUIRenderer.js';
|
|
10
10
|
import '../contexts/index.js';
|
|
11
11
|
import { DataProvider } from '../contexts/data.js';
|
|
@@ -24,7 +24,7 @@ import '../contexts/validation.js';
|
|
|
24
24
|
import '@babel/runtime/helpers/objectWithoutProperties';
|
|
25
25
|
import '@babel/runtime/helpers/slicedToArray';
|
|
26
26
|
import '@json-render/core';
|
|
27
|
-
import '../../../../_chunks/dep-
|
|
27
|
+
import '../../../../_chunks/dep-e9dbff09.js';
|
|
28
28
|
import '@babel/runtime/helpers/wrapNativeSuper';
|
|
29
29
|
import '@babel/runtime/helpers/asyncToGenerator';
|
|
30
30
|
import '@babel/runtime/regenerator';
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* tdesign v1.1.0-alpha.
|
|
2
|
+
* tdesign v1.1.0-alpha.8
|
|
3
3
|
* (c) 2026 tdesign
|
|
4
4
|
* @license MIT
|
|
5
5
|
*/
|
|
@@ -21,7 +21,7 @@ import '../contexts/store.js';
|
|
|
21
21
|
import '@json-render/core';
|
|
22
22
|
import '@babel/runtime/helpers/typeof';
|
|
23
23
|
import '@babel/runtime/helpers/slicedToArray';
|
|
24
|
-
import '../../../../_chunks/dep-
|
|
24
|
+
import '../../../../_chunks/dep-e9dbff09.js';
|
|
25
25
|
import '@babel/runtime/helpers/wrapNativeSuper';
|
|
26
26
|
import '@babel/runtime/helpers/asyncToGenerator';
|
|
27
27
|
import '@babel/runtime/regenerator';
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* tdesign v1.1.0-alpha.
|
|
2
|
+
* tdesign v1.1.0-alpha.8
|
|
3
3
|
* (c) 2026 tdesign
|
|
4
4
|
* @license MIT
|
|
5
5
|
*/
|
|
@@ -18,7 +18,7 @@ import '@babel/runtime/helpers/createClass';
|
|
|
18
18
|
import '@babel/runtime/helpers/possibleConstructorReturn';
|
|
19
19
|
import '@babel/runtime/helpers/getPrototypeOf';
|
|
20
20
|
import '@babel/runtime/helpers/inherits';
|
|
21
|
-
import '../../../../_chunks/dep-
|
|
21
|
+
import '../../../../_chunks/dep-e9dbff09.js';
|
|
22
22
|
import '@babel/runtime/helpers/wrapNativeSuper';
|
|
23
23
|
import '@json-render/core';
|
|
24
24
|
import '../contexts/store.js';
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* tdesign v1.1.0-alpha.
|
|
2
|
+
* tdesign v1.1.0-alpha.8
|
|
3
3
|
* (c) 2026 tdesign
|
|
4
4
|
* @license MIT
|
|
5
5
|
*/
|
|
@@ -36,7 +36,7 @@ import '../../core/event-bus/types.js';
|
|
|
36
36
|
import '../../core/store/message.js';
|
|
37
37
|
import '@babel/runtime/helpers/get';
|
|
38
38
|
import '../../core/store/reactiveState.js';
|
|
39
|
-
import '../../../_chunks/dep-
|
|
39
|
+
import '../../../_chunks/dep-e9dbff09.js';
|
|
40
40
|
import '../../core/processor/index.js';
|
|
41
41
|
import '../../core/server/index.js';
|
|
42
42
|
import '../../core/server/llm-service.js';
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* tdesign v1.1.0-alpha.
|
|
2
|
+
* tdesign v1.1.0-alpha.8
|
|
3
3
|
* (c) 2026 tdesign
|
|
4
4
|
* @license MIT
|
|
5
5
|
*/
|
|
@@ -39,7 +39,7 @@ import '../../core/event-bus/types.js';
|
|
|
39
39
|
import '../../core/store/message.js';
|
|
40
40
|
import '@babel/runtime/helpers/get';
|
|
41
41
|
import '../../core/store/reactiveState.js';
|
|
42
|
-
import '../../../_chunks/dep-
|
|
42
|
+
import '../../../_chunks/dep-e9dbff09.js';
|
|
43
43
|
import '../../core/processor/index.js';
|
|
44
44
|
import '../../core/server/index.js';
|
|
45
45
|
import '../../core/server/llm-service.js';
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* tdesign v1.1.0-alpha.
|
|
2
|
+
* tdesign v1.1.0-alpha.8
|
|
3
3
|
* (c) 2026 tdesign
|
|
4
4
|
* @license MIT
|
|
5
5
|
*/
|
|
@@ -38,7 +38,7 @@ import '../../core/event-bus/types.js';
|
|
|
38
38
|
import '../../core/store/message.js';
|
|
39
39
|
import '@babel/runtime/helpers/get';
|
|
40
40
|
import '../../core/store/reactiveState.js';
|
|
41
|
-
import '../../../_chunks/dep-
|
|
41
|
+
import '../../../_chunks/dep-e9dbff09.js';
|
|
42
42
|
import '../../core/processor/index.js';
|
|
43
43
|
import '../../core/server/index.js';
|
|
44
44
|
import '../../core/server/llm-service.js';
|
|
@@ -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, Component, ErrorInfo } from 'react';\nimport { isNonInteractiveConfig, type ToolcallComponentProps } from './types';\nimport { agentToolcallRegistry } from './registry';\nimport { AgentStateContext, useAgentStateDataByKey } from '../../hooks/useAgentState';\nimport { AGUIEventType, ToolCall } from '../../core';\n\ninterface ToolCallRendererProps {\n toolCall: ToolCall;\n onRespond?: (toolCall: ToolCall, response: any) => void;\n}\n\ninterface ErrorBoundaryState {\n hasError: boolean;\n error: Error | null;\n}\n\n/**\n * ToolCall 错误边界组件\n * 捕获子组件渲染错误,防止整个对话列表崩溃\n */\nclass ToolCallErrorBoundary extends Component<\n { children: React.ReactNode; toolCallName: string },\n ErrorBoundaryState\n> {\n constructor(props: { children: React.ReactNode; toolCallName: string }) {\n super(props);\n this.state = { hasError: false, error: null };\n }\n\n static getDerivedStateFromError(error: Error): ErrorBoundaryState {\n return { hasError: true, error };\n }\n\n componentDidCatch(error: Error, errorInfo: ErrorInfo): void {\n console.error(`[ToolCallRenderer] Error in tool \"${this.props.toolCallName}\":`, error, errorInfo);\n }\n\n render() {\n if (this.state.hasError) {\n // 空白兜底,仅在控制台输出错误\n return null;\n }\n\n return this.props.children;\n }\n}\n\nexport const ToolCallRenderer = React.memo<ToolCallRendererProps>(\n ({ toolCall, onRespond }) => {\n const [actionState, setActionState] = useState<{\n status: ToolcallComponentProps['status'];\n result?: any;\n error?: Error;\n }>({\n status: 'idle',\n });\n\n // 缓存配置获取\n const config = useMemo(() => {\n const cfg = agentToolcallRegistry.get(toolCall.toolCallName);\n return cfg;\n }, [toolCall.toolCallName]);\n\n // 添加注册状态监听\n const [isRegistered, setIsRegistered] = useState(\n () => !!agentToolcallRegistry.getRenderFunction(toolCall.toolCallName),\n );\n\n // 缓存参数解析\n const args = useMemo(() => {\n try {\n return toolCall.args ? JSON.parse(toolCall.args) : {};\n } catch (error) {\n console.error('解析工具调用参数失败:', error);\n return {};\n }\n }, [toolCall.args]);\n\n const handleRespond = useCallback(\n (response: any) => {\n if (onRespond) {\n onRespond(toolCall, response);\n setActionState((prev) => ({\n ...prev,\n status: 'complete',\n result: response,\n }));\n }\n },\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [toolCall.toolCallId, onRespond],\n );\n\n // 执行 handler(如果存在)- 必须在条件判断之前调用\n useEffect(() => {\n if (!config) return;\n\n if (isNonInteractiveConfig(config)) {\n // 非交互式:执行 handler\n const executeHandler = async () => {\n try {\n setActionState({ status: 'executing' });\n\n // 解析后端返回的结果作为 handler 的第二个参数\n let backendResult;\n if (toolCall.result) {\n try {\n backendResult = JSON.parse(toolCall.result);\n } catch (error) {\n console.warn('解析后端结果失败,使用原始字符串:', error);\n backendResult = toolCall.result;\n }\n }\n\n // 调用 handler,传入 args 和 backendResult\n const result = await config.handler(args, backendResult);\n setActionState({\n status: 'complete',\n result,\n });\n } catch (error) {\n setActionState({\n status: 'error',\n error: error as Error,\n });\n }\n };\n\n executeHandler();\n } else if (toolCall.result) {\n // 交互式:已有结果,显示完成状态\n try {\n const result = JSON.parse(toolCall.result);\n setActionState({\n status: 'complete',\n result,\n });\n } catch (error) {\n setActionState({\n status: 'error',\n error: error as Error,\n });\n }\n } else if (toolCall.eventType === AGUIEventType.TOOL_CALL_END || toolCall.eventType === AGUIEventType.TOOL_CALL_RESULT) {\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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"}
|
|
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 { isNonInteractiveConfig, type ToolcallComponentProps } from './types';\nimport { agentToolcallRegistry } from './registry';\nimport { AgentStateContext, useAgentStateDataByKey } from '../../hooks/useAgentState';\nimport { AGUIEventType, ToolCall } from '../../core';\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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"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* tdesign v1.1.0-alpha.
|
|
2
|
+
* tdesign v1.1.0-alpha.8
|
|
3
3
|
* (c) 2026 tdesign
|
|
4
4
|
* @license MIT
|
|
5
5
|
*/
|
|
@@ -158,15 +158,21 @@ var AGUIAdapter = /*#__PURE__*/function () {
|
|
|
158
158
|
}
|
|
159
159
|
}
|
|
160
160
|
};
|
|
161
|
+
var processUserContent = function processUserContent(content) {
|
|
162
|
+
if (Array.isArray(content)) {
|
|
163
|
+
return content;
|
|
164
|
+
}
|
|
165
|
+
return [{
|
|
166
|
+
type: "text",
|
|
167
|
+
data: content
|
|
168
|
+
}];
|
|
169
|
+
};
|
|
161
170
|
var flushCurrentGroup = function flushCurrentGroup() {
|
|
162
171
|
if (currentUserMessage) {
|
|
163
172
|
convertedMessages.push({
|
|
164
173
|
id: currentUserMessage.id,
|
|
165
174
|
role: "user",
|
|
166
|
-
content:
|
|
167
|
-
type: "text",
|
|
168
|
-
data: currentUserMessage.content
|
|
169
|
-
}],
|
|
175
|
+
content: processUserContent(currentUserMessage.content),
|
|
170
176
|
datetime: new Date(currentUserMessage.timestamp || Date.now()).toISOString()
|
|
171
177
|
});
|
|
172
178
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../../../../../../pro-components/chat/chat-engine/core/adapters/agui/index.ts"],"sourcesContent":["/* eslint-disable class-methods-use-this */\nimport type { AIMessageContent, ChatMessagesData, ChatRequestParams, SSEChunkData, ToolCall } from '../../type';\nimport { AGUIEventMapper } from './event-mapper';\nimport type { BaseEvent, RunErrorEvent, RunFinishedEvent, RunStartedEvent } from './types/events';\nimport { AGUIEventType } from './types/events';\nimport type { AGUIAssistantHistoryMessage, AGUIHistoryMessage, AGUIUserHistoryMessage, AGUIActivityMessage } from './types';\nimport { buildToolCallMap, processReasoningContent, processToolCalls } from './utils';\n\n// 重新导出类型,以便其他文件可以使用\nexport type {\n AGUIHistoryMessage,\n AGUIUserHistoryMessage,\n AGUIAssistantHistoryMessage,\n AGUIToolHistoryMessage,\n AGUIActivityMessage,\n} from './types';\n\n/**\n * AGUI协议适配器回调接口\n */\nexport interface AGUIAdapterCallbacks {\n onRunStart?: (event: RunStartedEvent) => void;\n onRunComplete?: (isAborted: boolean, params: ChatRequestParams, event?: RunFinishedEvent) => void;\n onRunError?: (error: RunErrorEvent) => void;\n}\n\n/**\n * AGUI协议适配器\n * 1. 处理AGUI协议特定的事件(RUN_STARTED, RUN_FINISHED, RUN_ERROR)\n * 2. 管理工具调用的生命周期\n * 3. 将AGUI事件映射为ChatEngine可理解的消息内容\n * 4. 转换AG-UI历史消息为ChatMessagesData格式\n */\nexport class AGUIAdapter {\n /**\n * 转换AG-UI历史消息为ChatMessagesData格式(静态方法)\n *\n * ## 设计说明\n *\n * ### AG-UI 协议中的消息角色\n * - `user`: 用户消息\n * - `assistant`: AI 回复,可包含 content、reasoningContent、toolCalls\n * - `tool`: 工具调用结果,通过 toolCallId 关联到 assistant 的 toolCalls\n * - `activity`: 独立的活动/事件消息,表示代理运行过程中的中间状态\n *\n * ### Activity 消息的处理策略\n * Activity 在 AG-UI 中是独立的 role,不是 assistant 的附属。\n * 但在 UI 展示层,我们选择将其合并到 AI 响应中,原因:\n * 1. 保持对话气泡的整洁性(一问一答模式)\n * 2. Activity 通常是 AI 处理过程的可视化,属于同一个响应周期\n * 3. 通过 activityType 区分不同类型的 Activity 渲染\n *\n * 转换策略:\n * 1. 以用户消息为边界进行分组\n * 2. 每个用户消息对应一个AI消息,包含该用户输入后的所有AI回复和工具调用结果\n * 3. 按照后端数据的原始顺序构建content数组\n * 4. 避免重复处理同一个工具调用\n * 5. 支持只有assistant消息的情况(如welcome消息)\n *\n * @param historyMessages AG-UI格式的历史消息数组\n * @returns 转换后的ChatMessagesData数组\n */\n static convertHistoryMessages(historyMessages: AGUIHistoryMessage[]): ChatMessagesData[] {\n if (!historyMessages || historyMessages.length === 0) {\n return [];\n }\n const convertedMessages: ChatMessagesData[] = [];\n const toolCallMap = buildToolCallMap(historyMessages);\n\n // 按用户消息分组处理\n let currentUserMessage: AGUIUserHistoryMessage | null = null;\n let currentGroupMessages: AGUIHistoryMessage[] = []; // 存储当前组的所有消息\n\n /**\n * 处理消息组,构建AI消息的content数组\n *\n * 处理顺序(保持原始顺序):\n * 1. assistant 的 reasoningContent(思考过程)\n * 2. assistant 的 content(文本回复)\n * 3. assistant 的 toolCalls(工具调用)\n * 4. activity 消息(活动/状态展示)\n */\n const processMessageGroup = (messages: AGUIHistoryMessage[]): AIMessageContent[] => {\n const allContent: AIMessageContent[] = [];\n\n messages.forEach((msg) => {\n if (msg.role === 'assistant') {\n const assistantMsg = msg as AGUIAssistantHistoryMessage;\n\n // 处理 reasoningContent(支持 reasoning 和 thinking 两种类型)\n if (assistantMsg.reasoningContent) {\n const reasoningContentResult = processReasoningContent(assistantMsg.reasoningContent);\n if (reasoningContentResult) {\n allContent.push(reasoningContentResult);\n }\n }\n\n // 处理普通文本内容\n if (assistantMsg.content) {\n allContent.push({\n type: 'markdown',\n data: assistantMsg.content,\n });\n }\n\n // 处理工具调用内容\n if (assistantMsg.toolCalls && assistantMsg.toolCalls.length > 0) {\n const toolCallContents = processToolCalls(assistantMsg.toolCalls, toolCallMap);\n allContent.push(...(toolCallContents as AIMessageContent[]));\n }\n } else if (msg.role === 'activity') {\n const activityMsg = msg as AGUIActivityMessage;\n \n // 检查是否是存储为 Activity 的 CUSTOM 事件\n if (activityMsg.activityType === AGUIEventType.CUSTOM) {\n // 将存储为 Activity 的 CUSTOM 事件转换为标准 custom 格式,业务层自行处理\n const customContent: any = {\n type: 'custom',\n data: {\n name: activityMsg.content?.name || '',\n value: activityMsg.content?.value,\n },\n status: 'complete',\n };\n allContent.push(customContent);\n } else {\n // 普通 Activity 处理\n // 使用 activity-${activityType} 格式的 type,与流式传输时的处理保持一致\n allContent.push({\n type: `activity-${activityMsg.activityType}`,\n data: {\n activityType: activityMsg.activityType,\n content: activityMsg.content,\n },\n status: 'complete',\n } as any);\n }\n }\n });\n\n return allContent;\n };\n\n /**\n * 创建AI消息\n */\n const createAIMessage = (messages: AGUIHistoryMessage[]): void => {\n if (messages.length > 0) {\n const allContent = processMessageGroup(messages);\n if (allContent.length > 0) {\n const firstMessageInGroup = messages[0];\n convertedMessages.push({\n id: firstMessageInGroup.id,\n role: 'assistant',\n content: allContent,\n status: 'complete',\n });\n }\n }\n };\n\n /**\n * 处理当前消息组\n */\n const flushCurrentGroup = () => {\n if (currentUserMessage) {\n // 添加用户消息\n convertedMessages.push({\n id: currentUserMessage.id,\n role: 'user',\n content: [\n {\n type: 'text',\n data: currentUserMessage.content,\n },\n ],\n datetime: new Date(currentUserMessage.timestamp || Date.now()).toISOString(),\n });\n }\n // 处理AI消息\n createAIMessage(currentGroupMessages);\n\n // 重置当前组\n currentUserMessage = null;\n currentGroupMessages = [];\n };\n\n // 按顺序处理消息\n historyMessages.forEach((msg) => {\n if (msg.role === 'user') {\n // 遇到新的用户消息,先处理之前的组\n flushCurrentGroup();\n\n // 开始新的组\n currentUserMessage = msg as AGUIUserHistoryMessage;\n } else if (msg.role === 'assistant' || msg.role === 'tool' || msg.role === 'activity') {\n // 收集助手消息、工具调用结果和活动消息到当前组\n currentGroupMessages.push(msg);\n }\n });\n\n // 处理最后一组\n flushCurrentGroup();\n return convertedMessages;\n }\n\n private aguiEventMapper: AGUIEventMapper;\n\n constructor() {\n this.aguiEventMapper = new AGUIEventMapper();\n }\n\n /**\n * 处理AGUI事件\n *\n * 处理流程:\n * 1. 解析SSE数据(AG-UI后端返回标准SSE格式,data字段是JSON字符串)\n * 2. 处理AGUI特定事件(生命周期事件)\n * 3. 使用事件映射器转换为消息内容\n * 4. 同步工具调用状态\n *\n * @param chunk SSE数据块\n * @param callbacks 回调函数\n * @returns 处理结果\n */\n handleAGUIEvent(chunk: SSEChunkData, callbacks: AGUIAdapterCallbacks): AIMessageContent | AIMessageContent[] | null {\n // AG-UI后端返回标准SSE格式,data字段是JSON字符串\n let event: BaseEvent;\n try {\n event = typeof chunk.data === 'string' ? JSON.parse(chunk.data) : chunk.data;\n } catch (error) {\n console.warn('Failed to parse AG-UI event data:', error);\n return null;\n }\n\n if (!event?.type) return null;\n\n // 处理AGUI特定事件(生命周期事件)\n const lifecycleHandled = this.handleAGUISpecificEvents(event, callbacks);\n\n // 如果是生命周期事件,不需要转换为消息内容\n if (lifecycleHandled) {\n return null;\n }\n\n // 使用事件映射器处理内容事件\n const result = this.aguiEventMapper.mapEvent(chunk);\n\n return result;\n }\n\n /**\n * 获取AGUI事件映射器\n */\n get toolcalls() {\n return this.aguiEventMapper.getToolCalls();\n }\n\n getToolcallByName(name: string): ToolCall | undefined {\n const result = this.aguiEventMapper.getToolCalls().find((call) => call.toolCallName === name);\n return result;\n }\n\n /**\n * 重置适配器状态\n */\n reset(): void {\n this.aguiEventMapper.reset();\n }\n\n /**\n * 处理AGUI特定事件\n *\n * 处理RUN_STARTED、RUN_FINISHED、RUN_ERROR等生命周期事件\n * 这些事件用于通知外部系统状态变化,并执行相应的回调\n *\n * @param event 解析后的事件对象\n * @param callbacks 回调函数\n * @returns 是否处理了生命周期事件(仅RUN_STARTED和RUN_FINISHED返回true,RUN_ERROR需要继续处理生成消息内容)\n */\n private handleAGUISpecificEvents(event: BaseEvent, callbacks: AGUIAdapterCallbacks): boolean {\n switch (event.type) {\n case AGUIEventType.RUN_STARTED:\n callbacks.onRunStart?.(event as RunStartedEvent);\n return true;\n case AGUIEventType.RUN_FINISHED:\n callbacks.onRunComplete?.(false, {} as ChatRequestParams, event as RunFinishedEvent);\n return true;\n case AGUIEventType.RUN_ERROR:\n // RUN_ERROR 需要触发回调,但不能返回 true\n // 因为还需要通过 event-mapper 生成错误消息内容用于 UI 展示\n callbacks.onRunError?.(event as RunErrorEvent);\n return false; // 继续处理,让 event-mapper 生成错误消息\n default:\n return false; // 不是生命周期事件\n }\n }\n}\n\n/**\n * 状态订阅机制导出\n */\nexport * from './StateManager';\nexport * from './ActivityManager';\nexport * from './types';\n"],"names":["AGUIAdapter","_classCallCheck","aguiEventMapper","AGUIEventMapper","_createClass","key","value","handleAGUIEvent","chunk","callbacks","_event","event","data","JSON","parse","error","console","warn","type","lifecycleHandled","handleAGUISpecificEvents","result","mapEvent","get","getToolCalls","getToolcallByName","name","find","call","toolCallName","reset","_callbacks$onRunStart","_callbacks$onRunCompl","_callbacks$onRunError","AGUIEventType","RUN_STARTED","onRunStart","RUN_FINISHED","onRunComplete","RUN_ERROR","onRunError","convertHistoryMessages","historyMessages","length","convertedMessages","toolCallMap","buildToolCallMap","currentUserMessage","currentGroupMessages","processMessageGroup","messages","allContent","forEach","msg","role","assistantMsg","reasoningContent","reasoningContentResult","processReasoningContent","push","content","toolCalls","toolCallContents","processToolCalls","apply","_toConsumableArray","activityMsg","activityType","CUSTOM","_activityMsg$content","_activityMsg$content2","customContent","status","concat","createAIMessage","firstMessageInGroup","id","flushCurrentGroup","datetime","Date","timestamp","now","toISOString"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../../../../../../pro-components/chat/chat-engine/core/adapters/agui/index.ts"],"sourcesContent":["/* eslint-disable class-methods-use-this */\nimport type { AIMessageContent, ChatMessagesData, ChatRequestParams, SSEChunkData, ToolCall, UserMessageContent } from '../../type';\nimport { AGUIEventMapper } from './event-mapper';\nimport type { BaseEvent, RunErrorEvent, RunFinishedEvent, RunStartedEvent } from './types/events';\nimport { AGUIEventType } from './types/events';\nimport type { AGUIAssistantHistoryMessage, AGUIHistoryMessage, AGUIUserHistoryMessage, AGUIActivityMessage } from './types';\nimport { buildToolCallMap, processReasoningContent, processToolCalls } from './utils';\n\n// 重新导出类型,以便其他文件可以使用\nexport type {\n AGUIHistoryMessage,\n AGUIUserHistoryMessage,\n AGUIAssistantHistoryMessage,\n AGUIToolHistoryMessage,\n AGUIActivityMessage,\n} from './types';\n\n/**\n * AGUI协议适配器回调接口\n */\nexport interface AGUIAdapterCallbacks {\n onRunStart?: (event: RunStartedEvent) => void;\n onRunComplete?: (isAborted: boolean, params: ChatRequestParams, event?: RunFinishedEvent) => void;\n onRunError?: (error: RunErrorEvent) => void;\n}\n\n/**\n * AGUI协议适配器\n * 1. 处理AGUI协议特定的事件(RUN_STARTED, RUN_FINISHED, RUN_ERROR)\n * 2. 管理工具调用的生命周期\n * 3. 将AGUI事件映射为ChatEngine可理解的消息内容\n * 4. 转换AG-UI历史消息为ChatMessagesData格式\n */\nexport class AGUIAdapter {\n /**\n * 转换AG-UI历史消息为ChatMessagesData格式(静态方法)\n *\n * ## 设计说明\n *\n * ### AG-UI 协议中的消息角色\n * - `user`: 用户消息\n * - `assistant`: AI 回复,可包含 content、reasoningContent、toolCalls\n * - `tool`: 工具调用结果,通过 toolCallId 关联到 assistant 的 toolCalls\n * - `activity`: 独立的活动/事件消息,表示代理运行过程中的中间状态\n *\n * ### Activity 消息的处理策略\n * Activity 在 AG-UI 中是独立的 role,不是 assistant 的附属。\n * 但在 UI 展示层,我们选择将其合并到 AI 响应中,原因:\n * 1. 保持对话气泡的整洁性(一问一答模式)\n * 2. Activity 通常是 AI 处理过程的可视化,属于同一个响应周期\n * 3. 通过 activityType 区分不同类型的 Activity 渲染\n *\n * 转换策略:\n * 1. 以用户消息为边界进行分组\n * 2. 每个用户消息对应一个AI消息,包含该用户输入后的所有AI回复和工具调用结果\n * 3. 按照后端数据的原始顺序构建content数组\n * 4. 避免重复处理同一个工具调用\n * 5. 支持只有assistant消息的情况(如welcome消息)\n *\n * @param historyMessages AG-UI格式的历史消息数组\n * @returns 转换后的ChatMessagesData数组\n */\n static convertHistoryMessages(historyMessages: AGUIHistoryMessage[]): ChatMessagesData[] {\n if (!historyMessages || historyMessages.length === 0) {\n return [];\n }\n const convertedMessages: ChatMessagesData[] = [];\n const toolCallMap = buildToolCallMap(historyMessages);\n\n // 按用户消息分组处理\n let currentUserMessage: AGUIUserHistoryMessage | null = null;\n let currentGroupMessages: AGUIHistoryMessage[] = []; // 存储当前组的所有消息\n\n /**\n * 处理消息组,构建AI消息的content数组\n *\n * 处理顺序(保持原始顺序):\n * 1. assistant 的 reasoningContent(思考过程)\n * 2. assistant 的 content(文本回复)\n * 3. assistant 的 toolCalls(工具调用)\n * 4. activity 消息(活动/状态展示)\n */\n const processMessageGroup = (messages: AGUIHistoryMessage[]): AIMessageContent[] => {\n const allContent: AIMessageContent[] = [];\n\n messages.forEach((msg) => {\n if (msg.role === 'assistant') {\n const assistantMsg = msg as AGUIAssistantHistoryMessage;\n\n // 处理 reasoningContent(支持 reasoning 和 thinking 两种类型)\n if (assistantMsg.reasoningContent) {\n const reasoningContentResult = processReasoningContent(assistantMsg.reasoningContent);\n if (reasoningContentResult) {\n allContent.push(reasoningContentResult);\n }\n }\n\n // 处理普通文本内容\n if (assistantMsg.content) {\n allContent.push({\n type: 'markdown',\n data: assistantMsg.content,\n });\n }\n\n // 处理工具调用内容\n if (assistantMsg.toolCalls && assistantMsg.toolCalls.length > 0) {\n const toolCallContents = processToolCalls(assistantMsg.toolCalls, toolCallMap);\n allContent.push(...(toolCallContents as AIMessageContent[]));\n }\n } else if (msg.role === 'activity') {\n const activityMsg = msg as AGUIActivityMessage;\n \n // 检查是否是存储为 Activity 的 CUSTOM 事件\n if (activityMsg.activityType === AGUIEventType.CUSTOM) {\n // 将存储为 Activity 的 CUSTOM 事件转换为标准 custom 格式,业务层自行处理\n const customContent: any = {\n type: 'custom',\n data: {\n name: activityMsg.content?.name || '',\n value: activityMsg.content?.value,\n },\n status: 'complete',\n };\n allContent.push(customContent);\n } else {\n // 普通 Activity 处理\n // 使用 activity-${activityType} 格式的 type,与流式传输时的处理保持一致\n allContent.push({\n type: `activity-${activityMsg.activityType}`,\n data: {\n activityType: activityMsg.activityType,\n content: activityMsg.content,\n },\n status: 'complete',\n } as any);\n }\n }\n });\n\n return allContent;\n };\n\n /**\n * 创建AI消息\n */\n const createAIMessage = (messages: AGUIHistoryMessage[]): void => {\n if (messages.length > 0) {\n const allContent = processMessageGroup(messages);\n if (allContent.length > 0) {\n const firstMessageInGroup = messages[0];\n convertedMessages.push({\n id: firstMessageInGroup.id,\n role: 'assistant',\n content: allContent,\n status: 'complete',\n });\n }\n }\n };\n\n /**\n * 处理用户消息的 content 字段\n * 兼容两种格式:\n * 1. 标准 AG-UI 格式:content 是字符串\n * 2. 已转换格式:content 已经是数组 [{ type, data }]\n */\n const processUserContent = (content: any): UserMessageContent[] => {\n // 如果 content 已经是数组格式,直接返回\n if (Array.isArray(content)) {\n return content as UserMessageContent[];\n }\n // 如果是字符串,包装为标准格式\n return [\n {\n type: 'text',\n data: content,\n },\n ];\n };\n\n /**\n * 处理当前消息组\n */\n const flushCurrentGroup = () => {\n if (currentUserMessage) {\n // 添加用户消息\n convertedMessages.push({\n id: currentUserMessage.id,\n role: 'user',\n content: processUserContent(currentUserMessage.content),\n datetime: new Date(currentUserMessage.timestamp || Date.now()).toISOString(),\n });\n }\n // 处理AI消息\n createAIMessage(currentGroupMessages);\n\n // 重置当前组\n currentUserMessage = null;\n currentGroupMessages = [];\n };\n\n // 按顺序处理消息\n historyMessages.forEach((msg) => {\n if (msg.role === 'user') {\n // 遇到新的用户消息,先处理之前的组\n flushCurrentGroup();\n\n // 开始新的组\n currentUserMessage = msg as AGUIUserHistoryMessage;\n } else if (msg.role === 'assistant' || msg.role === 'tool' || msg.role === 'activity') {\n // 收集助手消息、工具调用结果和活动消息到当前组\n currentGroupMessages.push(msg);\n }\n });\n\n // 处理最后一组\n flushCurrentGroup();\n return convertedMessages;\n }\n\n private aguiEventMapper: AGUIEventMapper;\n\n constructor() {\n this.aguiEventMapper = new AGUIEventMapper();\n }\n\n /**\n * 处理AGUI事件\n *\n * 处理流程:\n * 1. 解析SSE数据(AG-UI后端返回标准SSE格式,data字段是JSON字符串)\n * 2. 处理AGUI特定事件(生命周期事件)\n * 3. 使用事件映射器转换为消息内容\n * 4. 同步工具调用状态\n *\n * @param chunk SSE数据块\n * @param callbacks 回调函数\n * @returns 处理结果\n */\n handleAGUIEvent(chunk: SSEChunkData, callbacks: AGUIAdapterCallbacks): AIMessageContent | AIMessageContent[] | null {\n // AG-UI后端返回标准SSE格式,data字段是JSON字符串\n let event: BaseEvent;\n try {\n event = typeof chunk.data === 'string' ? JSON.parse(chunk.data) : chunk.data;\n } catch (error) {\n console.warn('Failed to parse AG-UI event data:', error);\n return null;\n }\n\n if (!event?.type) return null;\n\n // 处理AGUI特定事件(生命周期事件)\n const lifecycleHandled = this.handleAGUISpecificEvents(event, callbacks);\n\n // 如果是生命周期事件,不需要转换为消息内容\n if (lifecycleHandled) {\n return null;\n }\n\n // 使用事件映射器处理内容事件\n const result = this.aguiEventMapper.mapEvent(chunk);\n\n return result;\n }\n\n /**\n * 获取AGUI事件映射器\n */\n get toolcalls() {\n return this.aguiEventMapper.getToolCalls();\n }\n\n getToolcallByName(name: string): ToolCall | undefined {\n const result = this.aguiEventMapper.getToolCalls().find((call) => call.toolCallName === name);\n return result;\n }\n\n /**\n * 重置适配器状态\n */\n reset(): void {\n this.aguiEventMapper.reset();\n }\n\n /**\n * 处理AGUI特定事件\n *\n * 处理RUN_STARTED、RUN_FINISHED、RUN_ERROR等生命周期事件\n * 这些事件用于通知外部系统状态变化,并执行相应的回调\n *\n * @param event 解析后的事件对象\n * @param callbacks 回调函数\n * @returns 是否处理了生命周期事件(仅RUN_STARTED和RUN_FINISHED返回true,RUN_ERROR需要继续处理生成消息内容)\n */\n private handleAGUISpecificEvents(event: BaseEvent, callbacks: AGUIAdapterCallbacks): boolean {\n switch (event.type) {\n case AGUIEventType.RUN_STARTED:\n callbacks.onRunStart?.(event as RunStartedEvent);\n return true;\n case AGUIEventType.RUN_FINISHED:\n callbacks.onRunComplete?.(false, {} as ChatRequestParams, event as RunFinishedEvent);\n return true;\n case AGUIEventType.RUN_ERROR:\n // RUN_ERROR 需要触发回调,但不能返回 true\n // 因为还需要通过 event-mapper 生成错误消息内容用于 UI 展示\n callbacks.onRunError?.(event as RunErrorEvent);\n return false; // 继续处理,让 event-mapper 生成错误消息\n default:\n return false; // 不是生命周期事件\n }\n }\n}\n\n/**\n * 状态订阅机制导出\n */\nexport * from './StateManager';\nexport * from './ActivityManager';\nexport * from './types';\n"],"names":["AGUIAdapter","_classCallCheck","aguiEventMapper","AGUIEventMapper","_createClass","key","value","handleAGUIEvent","chunk","callbacks","_event","event","data","JSON","parse","error","console","warn","type","lifecycleHandled","handleAGUISpecificEvents","result","mapEvent","get","getToolCalls","getToolcallByName","name","find","call","toolCallName","reset","_callbacks$onRunStart","_callbacks$onRunCompl","_callbacks$onRunError","AGUIEventType","RUN_STARTED","onRunStart","RUN_FINISHED","onRunComplete","RUN_ERROR","onRunError","convertHistoryMessages","historyMessages","length","convertedMessages","toolCallMap","buildToolCallMap","currentUserMessage","currentGroupMessages","processMessageGroup","messages","allContent","forEach","msg","role","assistantMsg","reasoningContent","reasoningContentResult","processReasoningContent","push","content","toolCalls","toolCallContents","processToolCalls","apply","_toConsumableArray","activityMsg","activityType","CUSTOM","_activityMsg$content","_activityMsg$content2","customContent","status","concat","createAIMessage","firstMessageInGroup","id","processUserContent","Array","isArray","flushCurrentGroup","datetime","Date","timestamp","now","toISOString"],"mappings":"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"}
|