@tdesign-react/chat 1.0.2-alpha.11 → 1.0.2-alpha.13
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/es/_util/reactify.js +4 -4
- 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.js +1 -1
- package/es/chat-engine/components/a2ui/A2UIActivityRenderer.d.ts +91 -0
- package/es/chat-engine/components/a2ui/A2UIActivityRenderer.js +236 -0
- package/es/chat-engine/components/a2ui/A2UIActivityRenderer.js.map +1 -0
- package/es/chat-engine/components/a2ui/A2UIComponentRenderer.d.ts +37 -0
- package/es/chat-engine/components/a2ui/A2UIComponentRenderer.js +116 -0
- package/es/chat-engine/components/a2ui/A2UIComponentRenderer.js.map +1 -0
- package/es/chat-engine/components/a2ui/A2UIErrorBoundary.d.ts +42 -0
- package/es/chat-engine/components/a2ui/A2UIErrorBoundary.js +113 -0
- package/es/chat-engine/components/a2ui/A2UIErrorBoundary.js.map +1 -0
- package/es/chat-engine/components/a2ui/A2UISkeleton.d.ts +60 -0
- package/es/chat-engine/components/a2ui/A2UISkeleton.js +197 -0
- package/es/chat-engine/components/a2ui/A2UISkeleton.js.map +1 -0
- package/es/chat-engine/components/a2ui/A2UISurfaceRenderer.d.ts +44 -0
- package/es/chat-engine/components/a2ui/A2UISurfaceRenderer.js +139 -0
- package/es/chat-engine/components/a2ui/A2UISurfaceRenderer.js.map +1 -0
- package/es/chat-engine/components/a2ui/containers/A2UICard.d.ts +22 -0
- package/es/chat-engine/components/a2ui/containers/A2UICard.js +82 -0
- package/es/chat-engine/components/a2ui/containers/A2UICard.js.map +1 -0
- package/es/chat-engine/components/a2ui/containers/A2UIColumn.d.ts +18 -0
- package/es/chat-engine/components/a2ui/containers/A2UIColumn.js +81 -0
- package/es/chat-engine/components/a2ui/containers/A2UIColumn.js.map +1 -0
- package/es/chat-engine/components/a2ui/containers/A2UIList.d.ts +14 -0
- package/es/chat-engine/components/a2ui/containers/A2UIList.js +62 -0
- package/es/chat-engine/components/a2ui/containers/A2UIList.js.map +1 -0
- package/es/chat-engine/components/a2ui/containers/A2UIRow.d.ts +20 -0
- package/es/chat-engine/components/a2ui/containers/A2UIRow.js +84 -0
- package/es/chat-engine/components/a2ui/containers/A2UIRow.js.map +1 -0
- package/es/chat-engine/components/a2ui/containers/A2UITabs.d.ts +14 -0
- package/es/chat-engine/components/a2ui/containers/A2UITabs.js +69 -0
- package/es/chat-engine/components/a2ui/containers/A2UITabs.js.map +1 -0
- package/es/chat-engine/components/a2ui/containers/index.d.ts +8 -0
- package/es/chat-engine/components/a2ui/containers/index.js +30 -0
- package/es/chat-engine/components/a2ui/containers/index.js.map +1 -0
- package/es/chat-engine/components/a2ui/index.d.ts +11 -0
- package/es/chat-engine/components/a2ui/index.js +60 -0
- package/es/chat-engine/components/a2ui/index.js.map +1 -0
- package/es/chat-engine/components/a2ui/primitives/A2UIButton.d.ts +31 -0
- package/es/chat-engine/components/a2ui/primitives/A2UIButton.js +76 -0
- package/es/chat-engine/components/a2ui/primitives/A2UIButton.js.map +1 -0
- package/es/chat-engine/components/a2ui/primitives/A2UICheckBox.d.ts +12 -0
- package/es/chat-engine/components/a2ui/primitives/A2UICheckBox.js +43 -0
- package/es/chat-engine/components/a2ui/primitives/A2UICheckBox.js.map +1 -0
- package/es/chat-engine/components/a2ui/primitives/A2UICheckboxGroup.d.ts +50 -0
- package/es/chat-engine/components/a2ui/primitives/A2UICheckboxGroup.js +54 -0
- package/es/chat-engine/components/a2ui/primitives/A2UICheckboxGroup.js.map +1 -0
- package/es/chat-engine/components/a2ui/primitives/A2UIChoicePicker.d.ts +13 -0
- package/es/chat-engine/components/a2ui/primitives/A2UIChoicePicker.js +89 -0
- package/es/chat-engine/components/a2ui/primitives/A2UIChoicePicker.js.map +1 -0
- package/es/chat-engine/components/a2ui/primitives/A2UIDivider.d.ts +12 -0
- package/es/chat-engine/components/a2ui/primitives/A2UIDivider.js +25 -0
- package/es/chat-engine/components/a2ui/primitives/A2UIDivider.js.map +1 -0
- package/es/chat-engine/components/a2ui/primitives/A2UIIcon.d.ts +13 -0
- package/es/chat-engine/components/a2ui/primitives/A2UIIcon.js +138942 -0
- package/es/chat-engine/components/a2ui/primitives/A2UIIcon.js.map +1 -0
- package/es/chat-engine/components/a2ui/primitives/A2UIImage.d.ts +12 -0
- package/es/chat-engine/components/a2ui/primitives/A2UIImage.js +75 -0
- package/es/chat-engine/components/a2ui/primitives/A2UIImage.js.map +1 -0
- package/es/chat-engine/components/a2ui/primitives/A2UIInput.d.ts +20 -0
- package/es/chat-engine/components/a2ui/primitives/A2UIInput.js +63 -0
- package/es/chat-engine/components/a2ui/primitives/A2UIInput.js.map +1 -0
- package/es/chat-engine/components/a2ui/primitives/A2UIRadioGroup.d.ts +56 -0
- package/es/chat-engine/components/a2ui/primitives/A2UIRadioGroup.js +64 -0
- package/es/chat-engine/components/a2ui/primitives/A2UIRadioGroup.js.map +1 -0
- package/es/chat-engine/components/a2ui/primitives/A2UISlider.d.ts +12 -0
- package/es/chat-engine/components/a2ui/primitives/A2UISlider.js +55 -0
- package/es/chat-engine/components/a2ui/primitives/A2UISlider.js.map +1 -0
- package/es/chat-engine/components/a2ui/primitives/A2UIText.d.ts +12 -0
- package/es/chat-engine/components/a2ui/primitives/A2UIText.js +104 -0
- package/es/chat-engine/components/a2ui/primitives/A2UIText.js.map +1 -0
- package/es/chat-engine/components/a2ui/primitives/A2UITextField.d.ts +12 -0
- package/es/chat-engine/components/a2ui/primitives/A2UITextField.js +80 -0
- package/es/chat-engine/components/a2ui/primitives/A2UITextField.js.map +1 -0
- package/es/chat-engine/components/a2ui/primitives/index.d.ts +15 -0
- package/es/chat-engine/components/a2ui/primitives/index.js +39 -0
- package/es/chat-engine/components/a2ui/primitives/index.js.map +1 -0
- package/es/chat-engine/components/a2ui/registry.d.ts +35 -0
- package/es/chat-engine/components/a2ui/registry.js +74 -0
- package/es/chat-engine/components/a2ui/registry.js.map +1 -0
- package/es/chat-engine/components/activity/index.js +1 -1
- package/es/chat-engine/components/activity/registry.js +4 -4
- package/es/chat-engine/components/activity/registry.js.map +1 -1
- package/es/chat-engine/components/activity/render.js +6 -6
- package/es/chat-engine/components/activity/render.js.map +1 -1
- package/es/chat-engine/components/activity/types.js +1 -1
- package/es/chat-engine/components/index.js +4 -1
- package/es/chat-engine/components/index.js.map +1 -1
- package/es/chat-engine/components/provider/agent-state.js +6 -3
- package/es/chat-engine/components/provider/agent-state.js.map +1 -1
- package/es/chat-engine/components/toolcall/index.js +4 -1
- package/es/chat-engine/components/toolcall/index.js.map +1 -1
- package/es/chat-engine/components/toolcall/registry.js +4 -4
- package/es/chat-engine/components/toolcall/registry.js.map +1 -1
- package/es/chat-engine/components/toolcall/render.js +14 -11
- 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/a2ui/index.d.ts +10 -0
- package/es/chat-engine/core/a2ui/index.js +24 -0
- package/es/chat-engine/core/a2ui/index.js.map +1 -0
- package/es/chat-engine/core/a2ui/processor/A2uiMessageProcessor.d.ts +197 -0
- package/es/chat-engine/core/a2ui/processor/A2uiMessageProcessor.js +438 -0
- package/es/chat-engine/core/a2ui/processor/A2uiMessageProcessor.js.map +1 -0
- package/es/chat-engine/core/a2ui/processor/ComponentTree.d.ts +53 -0
- package/es/chat-engine/core/a2ui/processor/ComponentTree.js +158 -0
- package/es/chat-engine/core/a2ui/processor/ComponentTree.js.map +1 -0
- package/es/chat-engine/core/a2ui/processor/DataStore.d.ts +63 -0
- package/es/chat-engine/core/a2ui/processor/DataStore.js +172 -0
- package/es/chat-engine/core/a2ui/processor/DataStore.js.map +1 -0
- package/es/chat-engine/core/a2ui/processor/PathResolver.d.ts +47 -0
- package/es/chat-engine/core/a2ui/processor/PathResolver.js +99 -0
- package/es/chat-engine/core/a2ui/processor/PathResolver.js.map +1 -0
- package/es/chat-engine/core/a2ui/types/index.d.ts +4 -0
- package/es/chat-engine/core/a2ui/types/index.js +9 -0
- package/es/chat-engine/core/a2ui/types/index.js.map +1 -0
- package/es/chat-engine/core/a2ui/types/types.d.ts +769 -0
- package/es/chat-engine/core/a2ui/types/types.js +104 -0
- package/es/chat-engine/core/a2ui/types/types.js.map +1 -0
- package/es/chat-engine/core/a2ui/utils/binding.d.ts +34 -0
- package/es/chat-engine/core/a2ui/utils/binding.js +1784 -0
- package/es/chat-engine/core/a2ui/utils/binding.js.map +1 -0
- package/es/chat-engine/core/a2ui/utils/index.d.ts +5 -0
- package/es/chat-engine/core/a2ui/utils/index.js +13 -0
- package/es/chat-engine/core/a2ui/utils/index.js.map +1 -0
- package/es/chat-engine/core/a2ui/utils/validation.d.ts +70 -0
- package/es/chat-engine/core/a2ui/utils/validation.js +333 -0
- package/es/chat-engine/core/a2ui/utils/validation.js.map +1 -0
- package/es/chat-engine/core/adapters/agui/event-mapper.d.ts +16 -0
- package/es/chat-engine/core/adapters/agui/event-mapper.js +60 -6
- package/es/chat-engine/core/adapters/agui/event-mapper.js.map +1 -1
- package/es/chat-engine/core/adapters/agui/events.js +1 -1
- package/es/chat-engine/core/adapters/agui/index.d.ts +1 -1
- package/es/chat-engine/core/adapters/agui/index.js +1 -1
- package/es/chat-engine/core/adapters/agui/index.js.map +1 -1
- package/es/chat-engine/core/adapters/agui/state-manager.js +1 -1
- package/es/chat-engine/core/adapters/agui/types.js +1 -1
- package/es/chat-engine/core/adapters/agui/utils.d.ts +5 -1
- package/es/chat-engine/core/adapters/agui/utils.js +6 -2
- package/es/chat-engine/core/adapters/agui/utils.js.map +1 -1
- package/es/chat-engine/core/event-bus/ChatEventBus.d.ts +88 -0
- package/es/chat-engine/core/event-bus/ChatEventBus.js +295 -0
- package/es/chat-engine/core/event-bus/ChatEventBus.js.map +1 -0
- package/es/chat-engine/core/event-bus/index.d.ts +5 -0
- package/es/chat-engine/core/event-bus/index.js +13 -0
- package/es/chat-engine/core/event-bus/index.js.map +1 -0
- package/es/chat-engine/core/event-bus/types.d.ts +230 -0
- package/es/chat-engine/core/event-bus/types.js +32 -0
- package/es/chat-engine/core/event-bus/types.js.map +1 -0
- package/es/chat-engine/core/index.d.ts +8 -1
- package/es/chat-engine/core/index.js +128 -10
- package/es/chat-engine/core/index.js.map +1 -1
- 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 +17 -15
- package/es/chat-engine/core/server/llm-service.js.map +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 +1 -1
- package/es/chat-engine/core/store/model.js +1 -1
- package/es/chat-engine/core/store/reactiveState.js +1 -1
- package/es/chat-engine/core/type.d.ts +18 -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/index.js +1 -1
- package/es/chat-engine/core/utils/logger.js +1 -1
- package/es/chat-engine/hooks/a2ui/A2UIContext.d.ts +90 -0
- package/es/chat-engine/hooks/a2ui/A2UIContext.js +97 -0
- package/es/chat-engine/hooks/a2ui/A2UIContext.js.map +1 -0
- package/es/chat-engine/hooks/a2ui/index.d.ts +7 -0
- package/es/chat-engine/hooks/a2ui/index.js +19 -0
- package/es/chat-engine/hooks/a2ui/index.js.map +1 -0
- package/es/chat-engine/hooks/a2ui/useA2UIAction.d.ts +40 -0
- package/es/chat-engine/hooks/a2ui/useA2UIAction.js +74 -0
- package/es/chat-engine/hooks/a2ui/useA2UIAction.js.map +1 -0
- package/es/chat-engine/hooks/a2ui/useA2UISurface.d.ts +36 -0
- package/es/chat-engine/hooks/a2ui/useA2UISurface.js +39 -0
- package/es/chat-engine/hooks/a2ui/useA2UISurface.js.map +1 -0
- package/es/chat-engine/hooks/a2ui/useDataBinding.d.ts +53 -0
- package/es/chat-engine/hooks/a2ui/useDataBinding.js +111 -0
- package/es/chat-engine/hooks/a2ui/useDataBinding.js.map +1 -0
- package/es/chat-engine/hooks/index.js +4 -1
- package/es/chat-engine/hooks/index.js.map +1 -1
- package/es/chat-engine/hooks/useAgentActivity.js +1 -1
- package/es/chat-engine/hooks/useAgentState.js +4 -1
- package/es/chat-engine/hooks/useAgentState.js.map +1 -1
- package/es/chat-engine/hooks/useAgentToolcall.js +1 -1
- package/es/chat-engine/hooks/useChat.js +4 -1
- package/es/chat-engine/hooks/useChat.js.map +1 -1
- package/es/chat-engine/index.js +4 -1
- package/es/chat-engine/index.js.map +1 -1
- 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/docs/react-best-practice.d.ts +13 -0
- package/es/chatbot/index.js +1 -1
- package/es/index.js +4 -1
- package/es/index.js.map +1 -1
- package/es/style/index.js +1 -1
- package/package.json +2 -2
|
@@ -1,14 +1,20 @@
|
|
|
1
|
+
import type { ChatEventBusOptions, IChatEventBus } from './event-bus';
|
|
1
2
|
import { MessageStore } from './store/message';
|
|
2
3
|
import type { AIMessageContent, ChatMessagesData, ChatMessageSetterMode, ChatRequestParams, ChatServiceConfigSetter, ChatStatus, IChatEngine, ToolCall } from './type';
|
|
3
4
|
export default class ChatEngine implements IChatEngine {
|
|
4
5
|
messageStore: MessageStore;
|
|
6
|
+
/**
|
|
7
|
+
* 事件总线实例
|
|
8
|
+
* @description 用于发布/订阅引擎事件,支持无 UI 场景下的事件分发
|
|
9
|
+
*/
|
|
10
|
+
readonly eventBus: IChatEventBus;
|
|
5
11
|
private messageProcessor;
|
|
6
12
|
private llmService;
|
|
7
13
|
private config;
|
|
8
14
|
private lastRequestParams;
|
|
9
15
|
private stopReceive;
|
|
10
16
|
private aguiAdapter;
|
|
11
|
-
constructor();
|
|
17
|
+
constructor(eventBusOptions?: ChatEventBusOptions);
|
|
12
18
|
/**
|
|
13
19
|
* 获取当前所有消息
|
|
14
20
|
* @returns 消息数组
|
|
@@ -129,4 +135,5 @@ export default class ChatEngine implements IChatEngine {
|
|
|
129
135
|
}
|
|
130
136
|
export * from './utils';
|
|
131
137
|
export * from './adapters/agui';
|
|
138
|
+
export * from './event-bus';
|
|
132
139
|
export type * from './type';
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* tdesign v1.0.2-alpha.
|
|
2
|
+
* tdesign v1.0.2-alpha.12
|
|
3
3
|
* (c) 2026 tdesign
|
|
4
4
|
* @license MIT
|
|
5
5
|
*/
|
|
@@ -12,11 +12,16 @@ import _defineProperty from '@babel/runtime/helpers/defineProperty';
|
|
|
12
12
|
import _regeneratorRuntime from '@babel/runtime/regenerator';
|
|
13
13
|
import { AGUIAdapter } from './adapters/agui/index.js';
|
|
14
14
|
export { AGUIAdapter } from './adapters/agui/index.js';
|
|
15
|
+
import './event-bus/index.js';
|
|
15
16
|
import { MessageStore } from './store/message.js';
|
|
16
17
|
import MessageProcessor from './processor/index.js';
|
|
17
18
|
import './server/index.js';
|
|
18
19
|
import { isAIMessage } from './utils/index.js';
|
|
19
20
|
export { applyJsonPatch, findTargetElement, getMessageContentForCopy, isAIMessage, isActivityContent, isAttachmentContent, isImageContent, isMarkdownContent, isReasoningContent, isSearchContent, isSuggestionContent, isTextContent, isThinkingContent, isToolCallContent, isUserMessage, safeParseJSON } from './utils/index.js';
|
|
21
|
+
import { ChatEventBus } from './event-bus/ChatEventBus.js';
|
|
22
|
+
export { ChatEventBus, createEventBus } from './event-bus/ChatEventBus.js';
|
|
23
|
+
import { ChatEngineEventType } from './event-bus/types.js';
|
|
24
|
+
export { ChatEngineEventType } from './event-bus/types.js';
|
|
20
25
|
import { LLMService } from './server/llm-service.js';
|
|
21
26
|
export { StateManagerImpl, stateManager } from './adapters/agui/state-manager.js';
|
|
22
27
|
export { AGUIEventType, ActivityDeltaEventSchema, ActivitySnapshotEventSchema, CustomEventSchema, EventSchemas, MessagesSnapshotEventSchema, RawEventSchema, RunErrorEventSchema, RunFinishedEventSchema, RunStartedEventSchema, StateDeltaEventSchema, StateSnapshotEventSchema, StepFinishedEventSchema, StepStartedEventSchema, TextMessageChunkEventSchema, TextMessageContentEventSchema, TextMessageEndEventSchema, TextMessageStartEventSchema, ThinkingEndEventSchema, ThinkingStartEventSchema, ThinkingTextMessageContentEventSchema, ThinkingTextMessageEndEventSchema, ThinkingTextMessageStartEventSchema, ToolCallArgsEventSchema, ToolCallChunkEventSchema, ToolCallEndEventSchema, ToolCallResultEventSchema, ToolCallStartEventSchema, isActivityEvent, isStateEvent, isTextMessageEvent, isThinkingEvent, isToolCallEvent } from './adapters/agui/events.js';
|
|
@@ -46,12 +51,13 @@ var _excluded = ["prompt", "attachments"];
|
|
|
46
51
|
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; }
|
|
47
52
|
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; }
|
|
48
53
|
var ChatEngine = /*#__PURE__*/function () {
|
|
49
|
-
function ChatEngine() {
|
|
54
|
+
function ChatEngine(eventBusOptions) {
|
|
50
55
|
_classCallCheck(this, ChatEngine);
|
|
51
56
|
_defineProperty(this, "stopReceive", false);
|
|
52
57
|
_defineProperty(this, "aguiAdapter", null);
|
|
53
58
|
this.messageProcessor = new MessageProcessor();
|
|
54
59
|
this.messageStore = new MessageStore();
|
|
60
|
+
this.eventBus = new ChatEventBus(eventBusOptions);
|
|
55
61
|
}
|
|
56
62
|
return _createClass(ChatEngine, [{
|
|
57
63
|
key: "messages",
|
|
@@ -67,9 +73,13 @@ var ChatEngine = /*#__PURE__*/function () {
|
|
|
67
73
|
}, {
|
|
68
74
|
key: "destroy",
|
|
69
75
|
value: function destroy() {
|
|
76
|
+
this.eventBus.emit(ChatEngineEventType.ENGINE_DESTROY, {
|
|
77
|
+
timestamp: Date.now()
|
|
78
|
+
});
|
|
70
79
|
this.abortChat();
|
|
71
80
|
this.messageStore.clearHistory();
|
|
72
81
|
this.aguiAdapter = null;
|
|
82
|
+
this.eventBus.destroy();
|
|
73
83
|
}
|
|
74
84
|
}, {
|
|
75
85
|
key: "init",
|
|
@@ -80,6 +90,9 @@ var ChatEngine = /*#__PURE__*/function () {
|
|
|
80
90
|
if (this.config.protocol === "agui") {
|
|
81
91
|
this.aguiAdapter = new AGUIAdapter();
|
|
82
92
|
}
|
|
93
|
+
this.eventBus.emit(ChatEngineEventType.ENGINE_INIT, {
|
|
94
|
+
timestamp: Date.now()
|
|
95
|
+
});
|
|
83
96
|
}
|
|
84
97
|
}, {
|
|
85
98
|
key: "sendUserMessage",
|
|
@@ -112,6 +125,10 @@ var ChatEngine = /*#__PURE__*/function () {
|
|
|
112
125
|
userMessage = this.messageProcessor.createUserMessage(prompt, attachments);
|
|
113
126
|
aiMessage = this.messageProcessor.createAssistantMessage();
|
|
114
127
|
this.messageStore.createMultiMessages([userMessage, aiMessage]);
|
|
128
|
+
this.eventBus.emit(ChatEngineEventType.MESSAGE_CREATE, {
|
|
129
|
+
message: userMessage,
|
|
130
|
+
messages: this.messages
|
|
131
|
+
});
|
|
115
132
|
if (sendRequest) {
|
|
116
133
|
params = _objectSpread(_objectSpread({}, requestParams), {}, {
|
|
117
134
|
messageID: aiMessage.id
|
|
@@ -133,15 +150,21 @@ var ChatEngine = /*#__PURE__*/function () {
|
|
|
133
150
|
key: "sendSystemMessage",
|
|
134
151
|
value: function () {
|
|
135
152
|
var _sendSystemMessage = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee2(msg) {
|
|
153
|
+
var systemMessage;
|
|
136
154
|
return _regeneratorRuntime.wrap(function (_context2) {
|
|
137
155
|
while (1) switch (_context2.prev = _context2.next) {
|
|
138
156
|
case 0:
|
|
139
|
-
|
|
157
|
+
systemMessage = {
|
|
140
158
|
role: "system",
|
|
141
159
|
content: [{
|
|
142
160
|
type: "text",
|
|
143
161
|
data: msg
|
|
144
162
|
}]
|
|
163
|
+
};
|
|
164
|
+
this.messageStore.createMessage(systemMessage);
|
|
165
|
+
this.eventBus.emit(ChatEngineEventType.MESSAGE_CREATE, {
|
|
166
|
+
message: systemMessage,
|
|
167
|
+
messages: this.messages
|
|
145
168
|
});
|
|
146
169
|
case 1:
|
|
147
170
|
case "end":
|
|
@@ -176,6 +199,10 @@ var ChatEngine = /*#__PURE__*/function () {
|
|
|
176
199
|
status: sendRequest ? "pending" : "complete"
|
|
177
200
|
});
|
|
178
201
|
this.messageStore.createMessage(newAIMessage);
|
|
202
|
+
this.eventBus.emit(ChatEngineEventType.MESSAGE_CREATE, {
|
|
203
|
+
message: newAIMessage,
|
|
204
|
+
messages: this.messages
|
|
205
|
+
});
|
|
179
206
|
if (!sendRequest) {
|
|
180
207
|
_context3.next = 1;
|
|
181
208
|
break;
|
|
@@ -199,7 +226,7 @@ var ChatEngine = /*#__PURE__*/function () {
|
|
|
199
226
|
value: function () {
|
|
200
227
|
var _abortChat = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee4() {
|
|
201
228
|
var _this$config;
|
|
202
|
-
var _this$messageStore$la;
|
|
229
|
+
var _this$messageStore$la, messageId;
|
|
203
230
|
return _regeneratorRuntime.wrap(function (_context4) {
|
|
204
231
|
while (1) switch (_context4.prev = _context4.next) {
|
|
205
232
|
case 0:
|
|
@@ -215,7 +242,12 @@ var ChatEngine = /*#__PURE__*/function () {
|
|
|
215
242
|
this.llmService.closeConnect();
|
|
216
243
|
if (!this.config.stream) {
|
|
217
244
|
if ((_this$messageStore$la = this.messageStore.lastAIMessage) !== null && _this$messageStore$la !== void 0 && _this$messageStore$la.id) {
|
|
218
|
-
this.messageStore.
|
|
245
|
+
messageId = this.messageStore.lastAIMessage.id;
|
|
246
|
+
this.messageStore.removeMessage(messageId);
|
|
247
|
+
this.eventBus.emit(ChatEngineEventType.MESSAGE_DELETE, {
|
|
248
|
+
messageId: messageId,
|
|
249
|
+
messages: this.messages
|
|
250
|
+
});
|
|
219
251
|
}
|
|
220
252
|
}
|
|
221
253
|
} catch (error) {
|
|
@@ -247,6 +279,9 @@ var ChatEngine = /*#__PURE__*/function () {
|
|
|
247
279
|
key: "clearMessages",
|
|
248
280
|
value: function clearMessages() {
|
|
249
281
|
this.messageStore.clearHistory();
|
|
282
|
+
this.eventBus.emit(ChatEngineEventType.MESSAGE_CLEAR, {
|
|
283
|
+
timestamp: Date.now()
|
|
284
|
+
});
|
|
250
285
|
}
|
|
251
286
|
}, {
|
|
252
287
|
key: "regenerateAIMessage",
|
|
@@ -302,6 +337,10 @@ var ChatEngine = /*#__PURE__*/function () {
|
|
|
302
337
|
while (1) switch (_context6.prev = _context6.next) {
|
|
303
338
|
case 0:
|
|
304
339
|
id = params.messageID;
|
|
340
|
+
this.eventBus.emit(ChatEngineEventType.REQUEST_START, {
|
|
341
|
+
params: params,
|
|
342
|
+
messageId: id
|
|
343
|
+
});
|
|
305
344
|
_context6.prev = 1;
|
|
306
345
|
if (!this.config.stream) {
|
|
307
346
|
_context6.next = 3;
|
|
@@ -324,6 +363,11 @@ var ChatEngine = /*#__PURE__*/function () {
|
|
|
324
363
|
_context6.prev = 5;
|
|
325
364
|
_t = _context6["catch"](1);
|
|
326
365
|
this.setMessageStatus(id, "error");
|
|
366
|
+
this.eventBus.emit(ChatEngineEventType.REQUEST_ERROR, {
|
|
367
|
+
messageId: id,
|
|
368
|
+
error: _t,
|
|
369
|
+
params: params
|
|
370
|
+
});
|
|
327
371
|
throw _t;
|
|
328
372
|
case 6:
|
|
329
373
|
case "end":
|
|
@@ -346,7 +390,7 @@ var ChatEngine = /*#__PURE__*/function () {
|
|
|
346
390
|
key: "handleBatchRequest",
|
|
347
391
|
value: function () {
|
|
348
392
|
var _handleBatchRequest = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee7(params) {
|
|
349
|
-
var id, result;
|
|
393
|
+
var id, result, message;
|
|
350
394
|
return _regeneratorRuntime.wrap(function (_context7) {
|
|
351
395
|
while (1) switch (_context7.prev = _context7.next) {
|
|
352
396
|
case 0:
|
|
@@ -365,8 +409,21 @@ var ChatEngine = /*#__PURE__*/function () {
|
|
|
365
409
|
if (result) {
|
|
366
410
|
this.processMessageResult(id, result);
|
|
367
411
|
this.setMessageStatus(id, "complete");
|
|
412
|
+
message = this.messageStore.getMessageByID(id);
|
|
413
|
+
if (message) {
|
|
414
|
+
this.eventBus.emit(ChatEngineEventType.REQUEST_COMPLETE, {
|
|
415
|
+
messageId: id,
|
|
416
|
+
params: params,
|
|
417
|
+
message: message
|
|
418
|
+
});
|
|
419
|
+
}
|
|
368
420
|
} else {
|
|
369
421
|
this.setMessageStatus(id, "error");
|
|
422
|
+
this.eventBus.emit(ChatEngineEventType.REQUEST_ERROR, {
|
|
423
|
+
messageId: id,
|
|
424
|
+
error: new Error("Batch request returned empty result"),
|
|
425
|
+
params: params
|
|
426
|
+
});
|
|
370
427
|
}
|
|
371
428
|
case 3:
|
|
372
429
|
case "end":
|
|
@@ -385,6 +442,10 @@ var ChatEngine = /*#__PURE__*/function () {
|
|
|
385
442
|
var _this$config$onError, _this$config2;
|
|
386
443
|
this.setMessageStatus(id, "error");
|
|
387
444
|
(_this$config$onError = (_this$config2 = this.config).onError) === null || _this$config$onError === void 0 || _this$config$onError.call(_this$config2, error);
|
|
445
|
+
this.eventBus.emit(ChatEngineEventType.REQUEST_ERROR, {
|
|
446
|
+
messageId: id,
|
|
447
|
+
error: error
|
|
448
|
+
});
|
|
388
449
|
}
|
|
389
450
|
}, {
|
|
390
451
|
key: "handleComplete",
|
|
@@ -399,6 +460,21 @@ var ChatEngine = /*#__PURE__*/function () {
|
|
|
399
460
|
});
|
|
400
461
|
this.setMessageStatus(id, isAborted ? "stop" : allContentFailed ? "error" : "complete");
|
|
401
462
|
}
|
|
463
|
+
var message = this.messageStore.getMessageByID(id);
|
|
464
|
+
if (message) {
|
|
465
|
+
if (isAborted) {
|
|
466
|
+
this.eventBus.emit(ChatEngineEventType.REQUEST_ABORT, {
|
|
467
|
+
messageId: id,
|
|
468
|
+
params: params
|
|
469
|
+
});
|
|
470
|
+
} else {
|
|
471
|
+
this.eventBus.emit(ChatEngineEventType.REQUEST_COMPLETE, {
|
|
472
|
+
messageId: id,
|
|
473
|
+
params: params,
|
|
474
|
+
message: message
|
|
475
|
+
});
|
|
476
|
+
}
|
|
477
|
+
}
|
|
402
478
|
}
|
|
403
479
|
}, {
|
|
404
480
|
key: "handleStreamRequest",
|
|
@@ -453,13 +529,28 @@ var ChatEngine = /*#__PURE__*/function () {
|
|
|
453
529
|
result = _this.aguiAdapter.handleAGUIEvent(chunk, {
|
|
454
530
|
onRunStart: function onRunStart(event) {
|
|
455
531
|
var _this$config$onStart, _this$config4;
|
|
456
|
-
|
|
532
|
+
(_this$config$onStart = (_this$config4 = _this.config).onStart) === null || _this$config$onStart === void 0 || _this$config$onStart.call(_this$config4, JSON.stringify(event));
|
|
533
|
+
_this.eventBus.emit(ChatEngineEventType.AGUI_RUN_START, {
|
|
534
|
+
runId: event.runId || "",
|
|
535
|
+
threadId: event.threadId,
|
|
536
|
+
timestamp: Date.now()
|
|
537
|
+
});
|
|
457
538
|
},
|
|
458
|
-
onRunComplete: function onRunComplete(isAborted,
|
|
459
|
-
|
|
539
|
+
onRunComplete: function onRunComplete(isAborted, requestParams, event) {
|
|
540
|
+
_this.handleComplete(messageId, isAborted, requestParams, event);
|
|
541
|
+
if (!isAborted) {
|
|
542
|
+
_this.eventBus.emit(ChatEngineEventType.AGUI_RUN_COMPLETE, {
|
|
543
|
+
runId: (event === null || event === void 0 ? void 0 : event.runId) || "",
|
|
544
|
+
threadId: event === null || event === void 0 ? void 0 : event.threadId,
|
|
545
|
+
timestamp: Date.now()
|
|
546
|
+
});
|
|
547
|
+
}
|
|
460
548
|
},
|
|
461
549
|
onRunError: function onRunError(error) {
|
|
462
|
-
|
|
550
|
+
_this.handleError(messageId, error);
|
|
551
|
+
_this.eventBus.emit(ChatEngineEventType.AGUI_RUN_ERROR, {
|
|
552
|
+
error: error
|
|
553
|
+
});
|
|
463
554
|
}
|
|
464
555
|
});
|
|
465
556
|
}
|
|
@@ -469,6 +560,11 @@ var ChatEngine = /*#__PURE__*/function () {
|
|
|
469
560
|
result = userResult;
|
|
470
561
|
}
|
|
471
562
|
}
|
|
563
|
+
_this.eventBus.emit(ChatEngineEventType.REQUEST_STREAM, {
|
|
564
|
+
messageId: messageId,
|
|
565
|
+
chunk: chunk,
|
|
566
|
+
content: result
|
|
567
|
+
});
|
|
472
568
|
_this.processMessageResult(messageId, result);
|
|
473
569
|
return result;
|
|
474
570
|
},
|
|
@@ -512,6 +608,11 @@ var ChatEngine = /*#__PURE__*/function () {
|
|
|
512
608
|
if (_this2.config.onMessage) {
|
|
513
609
|
result = _this2.config.onMessage(chunk, _this2.messageStore.getMessageByID(messageId));
|
|
514
610
|
}
|
|
611
|
+
_this2.eventBus.emit(ChatEngineEventType.REQUEST_STREAM, {
|
|
612
|
+
messageId: messageId,
|
|
613
|
+
chunk: chunk,
|
|
614
|
+
content: result
|
|
615
|
+
});
|
|
515
616
|
_this2.processMessageResult(messageId, result);
|
|
516
617
|
return result;
|
|
517
618
|
},
|
|
@@ -544,6 +645,14 @@ var ChatEngine = /*#__PURE__*/function () {
|
|
|
544
645
|
} else {
|
|
545
646
|
this.processContentUpdate(messageId, result);
|
|
546
647
|
}
|
|
648
|
+
var message = this.messageStore.getMessageByID(messageId);
|
|
649
|
+
if (message) {
|
|
650
|
+
this.eventBus.emit(ChatEngineEventType.MESSAGE_UPDATE, {
|
|
651
|
+
messageId: messageId,
|
|
652
|
+
content: result,
|
|
653
|
+
message: message
|
|
654
|
+
});
|
|
655
|
+
}
|
|
547
656
|
}
|
|
548
657
|
}, {
|
|
549
658
|
key: "convertMessages",
|
|
@@ -562,7 +671,16 @@ var ChatEngine = /*#__PURE__*/function () {
|
|
|
562
671
|
}, {
|
|
563
672
|
key: "setMessageStatus",
|
|
564
673
|
value: function setMessageStatus(messageId, status) {
|
|
674
|
+
var _this$messageStore$ge;
|
|
675
|
+
var previousStatus = (_this$messageStore$ge = this.messageStore.getMessageByID(messageId)) === null || _this$messageStore$ge === void 0 ? void 0 : _this$messageStore$ge.status;
|
|
565
676
|
this.messageStore.setMessageStatus(messageId, status);
|
|
677
|
+
if (status) {
|
|
678
|
+
this.eventBus.emit(ChatEngineEventType.MESSAGE_STATUS_CHANGE, {
|
|
679
|
+
messageId: messageId,
|
|
680
|
+
status: status,
|
|
681
|
+
previousStatus: previousStatus
|
|
682
|
+
});
|
|
683
|
+
}
|
|
566
684
|
}
|
|
567
685
|
}, {
|
|
568
686
|
key: "processContentUpdate",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../../../../pro-components/chat/chat-engine/core/index.ts"],"sourcesContent":["/* eslint-disable no-param-reassign */\n/* eslint-disable class-methods-use-this */\nimport { AGUIAdapter } from './adapters/agui';\nimport { MessageStore } from './store/message';\nimport MessageProcessor from './processor';\nimport { LLMService } from './server';\nimport type {\n AIContentChunkUpdate,\n AIMessageContent,\n ChatMessagesData,\n ChatMessageSetterMode,\n ChatRequestParams,\n ChatServiceConfig,\n ChatServiceConfigSetter,\n ChatStatus,\n IChatEngine,\n SSEChunkData,\n SystemMessage,\n ToolCall,\n} from './type';\nimport { isAIMessage } from './utils';\n\nexport default class ChatEngine implements IChatEngine {\n public messageStore: MessageStore;\n\n private messageProcessor: MessageProcessor;\n\n private llmService!: LLMService;\n\n private config!: ChatServiceConfig;\n\n private lastRequestParams: ChatRequestParams | undefined;\n\n private stopReceive = false;\n\n private aguiAdapter: AGUIAdapter | null = null;\n\n constructor() {\n this.messageProcessor = new MessageProcessor();\n this.messageStore = new MessageStore();\n }\n\n /**\n * 获取当前所有消息\n * @returns 消息数组\n * @description 返回消息存储中的所有消息\n */\n get messages(): ChatMessagesData[] {\n return this.messageStore.messages;\n }\n\n /**\n * 获取当前聊天状态\n * @returns 聊天状态:'idle'、'pending'、'streaming'、'complete'、'stop'或'error'\n * @description 返回最后一条消息的状态,如果没有消息则返回'idle'\n */\n get status(): ChatStatus {\n return this.messages.at(-1)?.status || 'idle';\n }\n\n /**\n * 销毁聊天引擎实例\n * @description 中止请求,清理消息存储和适配器,释放资源\n */\n destroy(): void {\n // 中止当前请求\n this.abortChat();\n\n // 清理消息存储\n this.messageStore.clearHistory();\n\n // 清理适配器\n this.aguiAdapter = null;\n }\n\n /**\n * 初始化聊天引擎\n * @param configSetter 聊天服务配置或配置生成函数\n * @param initialMessages 初始消息列表,用于恢复历史对话\n * @description 设置初始消息、配置服务参数,并根据协议类型初始化适配器\n */\n public init(configSetter: ChatServiceConfigSetter, initialMessages?: ChatMessagesData[]) {\n this.messageStore.initialize(this.convertMessages(initialMessages));\n this.config = typeof configSetter === 'function' ? configSetter() : configSetter || {};\n this.llmService = new LLMService();\n // 初始化AGUI适配器\n if (this.config.protocol === 'agui') {\n this.aguiAdapter = new AGUIAdapter();\n }\n }\n\n /**\n * 发送用户消息并获取AI回复\n * @param requestParams 请求参数,包含用户输入的文本和附件\n * @param sendRequest 是否立即发送\n * @description 创建用户消息和AI消息,并发送请求获取AI回复\n */\n public async sendUserMessage(requestParams: ChatRequestParams, sendRequest = true) {\n const { prompt, attachments, ...customParams } = requestParams;\n\n // 检查条件:prompt和attachments至少传入一个,且如果设置了就不能为空\n const hasValidPrompt = prompt && prompt.trim() !== '';\n const hasValidAttachments = Array.isArray(attachments) && attachments.length > 0;\n\n // 如果两者都没有有效值,则直接返回\n if (!hasValidPrompt && !hasValidAttachments) {\n console.warn('[ChatEngine] sendUserMessage: 必须提供有效的prompt或attachments');\n return;\n }\n\n const userMessage = this.messageProcessor.createUserMessage(prompt, attachments);\n const aiMessage = this.messageProcessor.createAssistantMessage();\n this.messageStore.createMultiMessages([userMessage, aiMessage]);\n if (sendRequest) {\n const params = {\n ...requestParams,\n messageID: aiMessage.id,\n ...customParams, // 透传用户自定义参数\n };\n this.sendRequest(params);\n }\n }\n\n /**\n * 发送系统消息\n * @param msg 系统消息文本内容\n * @description 创建并存储一条系统消息,通常用于设置上下文或控制对话流程\n */\n public async sendSystemMessage(msg: string) {\n this.messageStore.createMessage({\n role: 'system',\n content: [\n {\n type: 'text',\n data: msg,\n },\n ],\n } as SystemMessage);\n }\n\n /**\n * 手动发送AI消息\n * @param options 包含请求参数params、发送消息内容content和是否发送请求的标志sendRequest\n * @description 创建并存储一条AI消息,可选择是否同时发送请求\n */\n public async sendAIMessage(\n options: { params?: ChatRequestParams; content?: AIMessageContent[]; sendRequest?: boolean } = {},\n ) {\n const { params = {}, content, sendRequest = true } = options;\n const newAIMessage = this.messageProcessor.createAssistantMessage({\n content,\n status: sendRequest ? 'pending' : 'complete',\n });\n this.messageStore.createMessage(newAIMessage);\n if (sendRequest) {\n params.messageID = newAIMessage.id;\n await this.sendRequest(params);\n }\n }\n\n /**\n * 中止当前进行中的聊天请求\n * @description 停止接收流式响应,关闭连接,并调用配置的onAbort回调\n */\n public async abortChat() {\n this.stopReceive = true;\n\n if (this.config?.onAbort) {\n await this.config.onAbort();\n }\n\n try {\n this.llmService.closeConnect();\n if (!this.config.stream) {\n // 只有在批量模式下才删除最后一条AI消息\n if (this.messageStore.lastAIMessage?.id) {\n this.messageStore.removeMessage(this.messageStore.lastAIMessage.id);\n }\n }\n } catch (error) {\n console.warn('Error during service cleanup:', error);\n }\n }\n\n /**\n * 注册内容块合并策略\n * @param type 内容类型,如'text'、'markdown'等\n * @param handler 合并处理函数,接收新块和现有块,返回合并后的内容块\n * @description 用于自定义不同类型内容的增量更新逻辑\n */\n public registerMergeStrategy<T extends AIMessageContent>(\n type: T['type'], // 使用类型中定义的type字段作为参数类型\n handler: (chunk: T, existing?: T) => T,\n ) {\n this.messageProcessor.registerHandler(type, handler);\n }\n\n /**\n * 设置消息列表\n * @param messages 要设置的消息数组\n * @param mode 设置模式:'replace'(替换)、'prepend'(前置)、'append'(追加),默认为'replace'\n * @description 用于批量更新消息,如加载历史消息或重置对话\n */\n public setMessages(messages: ChatMessagesData[], mode: ChatMessageSetterMode = 'replace') {\n this.messageStore.setMessages(messages, mode);\n }\n\n /**\n * 清空所有消息\n * @description 清除消息存储中的所有历史记录\n */\n public clearMessages(): void {\n this.messageStore.clearHistory();\n }\n\n /**\n * 重新生成AI回复\n * @param keepVersion 是否保留历史版本,默认为false\n * @description\n * - 当keepVersion=false时:删除最后一条AI消息,创建新消息并重新请求\n * - 当keepVersion=true时:保留旧消息,创建分支消息并重新请求\n */\n public async regenerateAIMessage(keepVersion = false) {\n const { lastAIMessage } = this.messageStore;\n if (!lastAIMessage) return;\n\n if (!keepVersion) {\n // 删除最后一条AI消息\n this.messageStore.removeMessage(lastAIMessage.id);\n } else {\n // todo: 保留历史版本,创建新分支\n this.messageStore.createMessageBranch(lastAIMessage.id);\n }\n\n // 创建新的AI消息\n const newAIMessage = this.messageProcessor.createAssistantMessage();\n this.messageStore.createMessage(newAIMessage);\n\n // 重新发起请求\n const params = {\n ...(this.lastRequestParams || {}),\n messageID: newAIMessage.id,\n prompt: this.lastRequestParams?.prompt ?? '',\n };\n\n await this.sendRequest(params);\n }\n\n /**\n * 发送请求获取AI回复\n * @param params 请求参数\n * @description 根据配置选择流式或批量请求模式,处理响应并更新消息状态\n */\n public async sendRequest(params: ChatRequestParams) {\n const { messageID: id } = params;\n try {\n if (this.config.stream) {\n // 处理sse流式响应模式\n this.stopReceive = false;\n await this.handleStreamRequest(params);\n } else {\n // 处理批量响应模式\n await this.handleBatchRequest(params);\n }\n this.lastRequestParams = params;\n } catch (error) {\n this.setMessageStatus(id!, 'error');\n throw error;\n }\n }\n\n /**\n * 根据名称获取工具调用\n * @param name 工具调用名称\n * @returns 匹配的工具调用对象,如果未找到则返回undefined\n * @description 用于获取特定名称的工具调用信息,仅在AGUI协议下可用\n */\n public getToolcallByName(name: string): ToolCall | undefined {\n return this.aguiAdapter?.getToolcallByName(name);\n }\n\n private async handleBatchRequest(params: ChatRequestParams) {\n const id = params.messageID;\n if (!id) return;\n this.setMessageStatus(id, 'pending');\n const result = await this.llmService.handleBatchRequest(params, this.config);\n if (result) {\n this.processMessageResult(id, result);\n this.setMessageStatus(id, 'complete');\n } else {\n this.setMessageStatus(id, 'error');\n }\n }\n\n private handleError(id: string, error: any) {\n this.setMessageStatus(id, 'error');\n this.config.onError?.(error);\n }\n\n private handleComplete(id: string, isAborted: boolean, params: ChatRequestParams, chunk?: any) {\n // 先调用用户自定义的 onComplete 回调,让业务层决定如何处理\n const customResult = this.config.onComplete?.(isAborted, params, chunk);\n // 如果用户返回了自定义内容,处理这些内容\n if (Array.isArray(customResult) || (customResult && 'status' in customResult)) {\n this.processMessageResult(id, customResult);\n } else {\n // 所有消息内容块都失败才算消息体失败\n const allContentFailed = this.messageStore.messages.every((content) => content.status === 'error');\n // eslint-disable-next-line no-nested-ternary\n this.setMessageStatus(id, isAborted ? 'stop' : allContentFailed ? 'error' : 'complete');\n }\n }\n\n /**\n * 处理流式请求\n * 根据协议类型选择不同的处理策略\n */\n private async handleStreamRequest(params: ChatRequestParams) {\n const id = params.messageID;\n const isAGUI = this.config.protocol === 'agui';\n\n if (id) {\n this.setMessageStatus(id, 'streaming');\n }\n\n // 根据协议类型选择处理策略\n if (isAGUI && this.aguiAdapter) {\n await this.handleAGUIStreamRequest(params, id);\n } else {\n await this.handleDefaultStreamRequest(params, id);\n }\n }\n\n /**\n * 处理AGUI协议的流式请求\n */\n private async handleAGUIStreamRequest(params: ChatRequestParams, messageId?: string) {\n await this.llmService.handleStreamRequest(params, {\n ...this.config,\n onMessage: (chunk: SSEChunkData) => {\n if (this.stopReceive || !messageId) return null;\n\n let result;\n\n // SSE数据 → AGUIEventMapper.mapEvent → 用户自定义onMessage(解析后数据 + 原始chunk)\n // 首先使用AGUI适配器进行通用协议解析\n if (this.aguiAdapter) {\n result = this.aguiAdapter.handleAGUIEvent(chunk, {\n onRunStart: (event) => this.config.onStart?.(JSON.stringify(event)),\n onRunComplete: (isAborted, params, event) => this.handleComplete(messageId, isAborted, params, event),\n onRunError: (error) => this.handleError(messageId, error),\n });\n }\n\n // 然后调用用户自定义的onMessage,传入解析后的结果和原始数据\n if (this.config.onMessage) {\n const userResult = this.config.onMessage(chunk, this.messageStore.getMessageByID(messageId), result);\n // 如果用户返回了自定义结果,使用用户的结果\n if (userResult) {\n result = userResult;\n }\n }\n // 处理消息结果\n this.processMessageResult(messageId, result);\n return result;\n },\n onError: (error) => {\n if (messageId) this.handleError(messageId, error);\n },\n onComplete: (isAborted) => {\n // AGUI的完成事件由AGUIAdapter内部处理,这里只处理中断情况\n if (isAborted && messageId) {\n this.handleComplete(messageId, isAborted, params);\n }\n },\n });\n }\n\n /**\n * 处理默认协议的流式请求\n */\n private async handleDefaultStreamRequest(params: ChatRequestParams, messageId?: string) {\n await this.llmService.handleStreamRequest(params, {\n ...this.config,\n onStart: (chunk) => {\n this.config.onStart?.(chunk);\n },\n onMessage: (chunk: SSEChunkData) => {\n if (this.stopReceive || !messageId) return null;\n\n let result = null;\n\n // 使用默认的消息处理\n if (this.config.onMessage) {\n result = this.config.onMessage(chunk, this.messageStore.getMessageByID(messageId));\n }\n\n // 处理消息结果\n this.processMessageResult(messageId, result);\n return result;\n },\n onError: (error) => {\n if (messageId) this.handleError(messageId, error);\n },\n onComplete: (isAborted) => {\n if (messageId) {\n this.handleComplete(messageId, isAborted, params);\n }\n },\n });\n }\n\n /**\n * 统一处理消息结果\n * 支持单个内容块、多个内容块和增量更新\n */\n private processMessageResult(messageId: string, result: AIMessageContent | AIMessageContent[] | null) {\n if (!result) return;\n\n // 处理工具调用 - 仅在AGUI协议下处理\n // if (this.aguiAdapter) {\n // const toolCalls = this.aguiAdapter.processToolCalls(result);\n // if (toolCalls.length > 0) {\n // this.messageStore.setMessageToolCalls(messageId, toolCalls);\n // }\n // }\n\n if (Array.isArray(result)) {\n // 处理多个内容块\n this.messageStore.updateMultipleContents(messageId, result);\n } else {\n // 处理单个内容块\n this.processContentUpdate(messageId, result);\n }\n }\n\n private convertMessages(messages?: ChatMessagesData[]) {\n if (!messages) return { messageIds: [], messages: [] };\n\n return {\n messageIds: messages.map((msg) => msg.id),\n messages,\n };\n }\n\n private setMessageStatus(messageId: string, status: ChatMessagesData['status']) {\n this.messageStore.setMessageStatus(messageId, status);\n }\n\n // 处理内容更新逻辑\n private processContentUpdate(messageId: string, rawChunk: AIContentChunkUpdate) {\n const message = this.messageStore.messages.find((m) => m.id === messageId);\n if (!message || !isAIMessage(message) || !message.content) return;\n\n let targetIndex: number;\n // 作为新的内容块追加\n if (rawChunk?.strategy === 'append') {\n targetIndex = -1;\n } else {\n // merge 策略:按 type 查找最后一个匹配的类型\n // 通过 type (如 toolcall-${toolCallName}) 来定位要更新的内容块\n targetIndex = message.content.findIndex((content: AIMessageContent) => content.type === rawChunk.type);\n if (targetIndex !== -1) {\n // 找到最后一个匹配的类型(从后往前查找)\n for (let i = message.content.length - 1; i >= 0; i--) {\n if (message.content[i].type === rawChunk.type) {\n targetIndex = i;\n break;\n }\n }\n }\n }\n const processed = this.messageProcessor.processContentUpdate(\n targetIndex !== -1 ? message.content[targetIndex] : undefined,\n rawChunk,\n );\n\n this.messageStore.appendContent(messageId, processed, targetIndex);\n }\n}\n\nexport * from './utils';\nexport * from './adapters/agui';\nexport type * from './type';\n"],"names":["ChatEngine","_classCallCheck","_defineProperty","messageProcessor","MessageProcessor","messageStore","MessageStore","_createClass","key","get","messages","_this$messages$at","at","status","value","destroy","abortChat","clearHistory","aguiAdapter","init","configSetter","initialMessages","initialize","convertMessages","config","llmService","LLMService","protocol","AGUIAdapter","_sendUserMessage","_asyncToGenerator","_regeneratorRuntime","mark","_callee","requestParams","sendRequest","prompt","attachments","customParams","hasValidPrompt","hasValidAttachments","userMessage","aiMessage","params","_args","arguments","wrap","_context","prev","next","length","undefined","_objectWithoutProperties","_excluded","trim","Array","isArray","console","warn","abrupt","createUserMessage","createAssistantMessage","createMultiMessages","_objectSpread","messageID","id","stop","sendUserMessage","_x","apply","_sendSystemMessage","_callee2","msg","_context2","createMessage","role","content","type","data","sendSystemMessage","_callee3","options","_options$params","_options$sendRequest","newAIMessage","_args3","_context3","sendAIMessage","_sendAIMessage","_abortChat","_callee4","_this$config","_this$messageStore$la","_context4","stopReceive","onAbort","closeConnect","stream","lastAIMessage","removeMessage","error","registerMergeStrategy","handler","registerHandler","setMessages","mode","clearMessages","_regenerateAIMessage","_callee5","_this$lastRequestPara","_this$lastRequestPara2","keepVersion","_args5","_context5","createMessageBranch","lastRequestParams","regenerateAIMessage","_sendRequest","_callee6","_t","_context6","handleStreamRequest","handleBatchRequest","setMessageStatus","getToolcallByName","name","_this$aguiAdapter","_handleBatchRequest","_callee7","result","_context7","processMessageResult","handleError","_this$config$onError","_this$config2","onError","call","handleComplete","isAborted","chunk","_this$config$onComple","_this$config3","customResult","onComplete","allContentFailed","every","_handleStreamRequest","_callee8","isAGUI","_context8","handleAGUIStreamRequest","handleDefaultStreamRequest","_callee9","messageId","_this","_context9","onMessage","handleAGUIEvent","onRunStart","event","_this$config$onStart","_this$config4","onStart","JSON","stringify","onRunComplete","onRunError","userResult","getMessageByID","_x6","_x7","_handleAGUIStreamRequest","_handleDefaultStreamRequest","_callee0","_this2","_context0","_this2$config$onStart","_this2$config","_x8","_x9","updateMultipleContents","processContentUpdate","messageIds","map","rawChunk","message","find","m","isAIMessage","targetIndex","strategy","findIndex","i","processed","appendContent"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../../../../pro-components/chat/chat-engine/core/index.ts"],"sourcesContent":["/* eslint-disable no-param-reassign */\n/* eslint-disable class-methods-use-this */\nimport { AGUIAdapter } from './adapters/agui';\nimport { ChatEventBus, ChatEngineEventType } from './event-bus';\nimport type { ChatEventBusOptions, IChatEventBus } from './event-bus';\nimport { MessageStore } from './store/message';\nimport MessageProcessor from './processor';\nimport { LLMService } from './server';\nimport type {\n AIContentChunkUpdate,\n AIMessageContent,\n ChatMessagesData,\n ChatMessageSetterMode,\n ChatRequestParams,\n ChatServiceConfig,\n ChatServiceConfigSetter,\n ChatStatus,\n IChatEngine,\n SSEChunkData,\n SystemMessage,\n ToolCall,\n} from './type';\nimport { isAIMessage } from './utils';\n\nexport default class ChatEngine implements IChatEngine {\n public messageStore: MessageStore;\n\n /**\n * 事件总线实例\n * @description 用于发布/订阅引擎事件,支持无 UI 场景下的事件分发\n */\n public readonly eventBus: IChatEventBus;\n\n private messageProcessor: MessageProcessor;\n\n private llmService!: LLMService;\n\n private config!: ChatServiceConfig;\n\n private lastRequestParams: ChatRequestParams | undefined;\n\n private stopReceive = false;\n\n private aguiAdapter: AGUIAdapter | null = null;\n\n constructor(eventBusOptions?: ChatEventBusOptions) {\n this.messageProcessor = new MessageProcessor();\n this.messageStore = new MessageStore();\n this.eventBus = new ChatEventBus(eventBusOptions);\n }\n\n /**\n * 获取当前所有消息\n * @returns 消息数组\n * @description 返回消息存储中的所有消息\n */\n get messages(): ChatMessagesData[] {\n return this.messageStore.messages;\n }\n\n /**\n * 获取当前聊天状态\n * @returns 聊天状态:'idle'、'pending'、'streaming'、'complete'、'stop'或'error'\n * @description 返回最后一条消息的状态,如果没有消息则返回'idle'\n */\n get status(): ChatStatus {\n return this.messages.at(-1)?.status || 'idle';\n }\n\n /**\n * 销毁聊天引擎实例\n * @description 中止请求,清理消息存储和适配器,释放资源\n */\n destroy(): void {\n // 发布销毁事件\n this.eventBus.emit(ChatEngineEventType.ENGINE_DESTROY, {\n timestamp: Date.now(),\n });\n\n // 中止当前请求\n this.abortChat();\n\n // 清理消息存储\n this.messageStore.clearHistory();\n\n // 清理适配器\n this.aguiAdapter = null;\n\n // 销毁事件总线\n this.eventBus.destroy();\n }\n\n /**\n * 初始化聊天引擎\n * @param configSetter 聊天服务配置或配置生成函数\n * @param initialMessages 初始消息列表,用于恢复历史对话\n * @description 设置初始消息、配置服务参数,并根据协议类型初始化适配器\n */\n public init(configSetter: ChatServiceConfigSetter, initialMessages?: ChatMessagesData[]) {\n this.messageStore.initialize(this.convertMessages(initialMessages));\n this.config = typeof configSetter === 'function' ? configSetter() : configSetter || {};\n this.llmService = new LLMService();\n\n // 初始化AGUI适配器\n if (this.config.protocol === 'agui') {\n this.aguiAdapter = new AGUIAdapter();\n }\n\n // 发布初始化事件\n this.eventBus.emit(ChatEngineEventType.ENGINE_INIT, {\n timestamp: Date.now(),\n });\n }\n\n /**\n * 发送用户消息并获取AI回复\n * @param requestParams 请求参数,包含用户输入的文本和附件\n * @param sendRequest 是否立即发送\n * @description 创建用户消息和AI消息,并发送请求获取AI回复\n */\n public async sendUserMessage(requestParams: ChatRequestParams, sendRequest = true) {\n const { prompt, attachments, ...customParams } = requestParams;\n\n // 检查条件:prompt和attachments至少传入一个,且如果设置了就不能为空\n const hasValidPrompt = prompt && prompt.trim() !== '';\n const hasValidAttachments = Array.isArray(attachments) && attachments.length > 0;\n\n // 如果两者都没有有效值,则直接返回\n if (!hasValidPrompt && !hasValidAttachments) {\n console.warn('[ChatEngine] sendUserMessage: 必须提供有效的prompt或attachments');\n return;\n }\n\n const userMessage = this.messageProcessor.createUserMessage(prompt, attachments);\n const aiMessage = this.messageProcessor.createAssistantMessage();\n this.messageStore.createMultiMessages([userMessage, aiMessage]);\n\n // 发布消息创建事件\n this.eventBus.emit(ChatEngineEventType.MESSAGE_CREATE, {\n message: userMessage,\n messages: this.messages,\n });\n\n if (sendRequest) {\n const params = {\n ...requestParams,\n messageID: aiMessage.id,\n ...customParams, // 透传用户自定义参数\n };\n this.sendRequest(params);\n }\n }\n\n /**\n * 发送系统消息\n * @param msg 系统消息文本内容\n * @description 创建并存储一条系统消息,通常用于设置上下文或控制对话流程\n */\n public async sendSystemMessage(msg: string) {\n const systemMessage = {\n role: 'system',\n content: [\n {\n type: 'text',\n data: msg,\n },\n ],\n } as SystemMessage;\n this.messageStore.createMessage(systemMessage);\n\n // 发布消息创建事件\n this.eventBus.emit(ChatEngineEventType.MESSAGE_CREATE, {\n message: systemMessage,\n messages: this.messages,\n });\n }\n\n /**\n * 手动发送AI消息\n * @param options 包含请求参数params、发送消息内容content和是否发送请求的标志sendRequest\n * @description 创建并存储一条AI消息,可选择是否同时发送请求\n */\n public async sendAIMessage(\n options: { params?: ChatRequestParams; content?: AIMessageContent[]; sendRequest?: boolean } = {},\n ) {\n const { params = {}, content, sendRequest = true } = options;\n const newAIMessage = this.messageProcessor.createAssistantMessage({\n content,\n status: sendRequest ? 'pending' : 'complete',\n });\n this.messageStore.createMessage(newAIMessage);\n\n // 发布消息创建事件\n this.eventBus.emit(ChatEngineEventType.MESSAGE_CREATE, {\n message: newAIMessage,\n messages: this.messages,\n });\n\n if (sendRequest) {\n params.messageID = newAIMessage.id;\n await this.sendRequest(params);\n }\n }\n\n /**\n * 中止当前进行中的聊天请求\n * @description 停止接收流式响应,关闭连接,并调用配置的onAbort回调\n */\n public async abortChat() {\n this.stopReceive = true;\n\n if (this.config?.onAbort) {\n await this.config.onAbort();\n }\n\n try {\n this.llmService.closeConnect();\n if (!this.config.stream) {\n // 只有在批量模式下才删除最后一条AI消息\n if (this.messageStore.lastAIMessage?.id) {\n const messageId = this.messageStore.lastAIMessage.id;\n this.messageStore.removeMessage(messageId);\n\n // 发布消息删除事件\n this.eventBus.emit(ChatEngineEventType.MESSAGE_DELETE, {\n messageId,\n messages: this.messages,\n });\n }\n }\n } catch (error) {\n console.warn('Error during service cleanup:', error);\n }\n }\n\n /**\n * 注册内容块合并策略\n * @param type 内容类型,如'text'、'markdown'等\n * @param handler 合并处理函数,接收新块和现有块,返回合并后的内容块\n * @description 用于自定义不同类型内容的增量更新逻辑\n */\n public registerMergeStrategy<T extends AIMessageContent>(\n type: T['type'], // 使用类型中定义的type字段作为参数类型\n handler: (chunk: T, existing?: T) => T,\n ) {\n this.messageProcessor.registerHandler(type, handler);\n }\n\n /**\n * 设置消息列表\n * @param messages 要设置的消息数组\n * @param mode 设置模式:'replace'(替换)、'prepend'(前置)、'append'(追加),默认为'replace'\n * @description 用于批量更新消息,如加载历史消息或重置对话\n */\n public setMessages(messages: ChatMessagesData[], mode: ChatMessageSetterMode = 'replace') {\n this.messageStore.setMessages(messages, mode);\n }\n\n /**\n * 清空所有消息\n * @description 清除消息存储中的所有历史记录\n */\n public clearMessages(): void {\n this.messageStore.clearHistory();\n\n // 发布消息清空事件\n this.eventBus.emit(ChatEngineEventType.MESSAGE_CLEAR, {\n timestamp: Date.now(),\n });\n }\n\n /**\n * 重新生成AI回复\n * @param keepVersion 是否保留历史版本,默认为false\n * @description\n * - 当keepVersion=false时:删除最后一条AI消息,创建新消息并重新请求\n * - 当keepVersion=true时:保留旧消息,创建分支消息并重新请求\n */\n public async regenerateAIMessage(keepVersion = false) {\n const { lastAIMessage } = this.messageStore;\n if (!lastAIMessage) return;\n\n if (!keepVersion) {\n // 删除最后一条AI消息\n this.messageStore.removeMessage(lastAIMessage.id);\n } else {\n // todo: 保留历史版本,创建新分支\n this.messageStore.createMessageBranch(lastAIMessage.id);\n }\n\n // 创建新的AI消息\n const newAIMessage = this.messageProcessor.createAssistantMessage();\n this.messageStore.createMessage(newAIMessage);\n\n // 重新发起请求\n const params = {\n ...(this.lastRequestParams || {}),\n messageID: newAIMessage.id,\n prompt: this.lastRequestParams?.prompt ?? '',\n };\n\n await this.sendRequest(params);\n }\n\n /**\n * 发送请求获取AI回复\n * @param params 请求参数\n * @description 根据配置选择流式或批量请求模式,处理响应并更新消息状态\n */\n public async sendRequest(params: ChatRequestParams) {\n const { messageID: id } = params;\n\n // 发布请求开始事件\n this.eventBus.emit(ChatEngineEventType.REQUEST_START, {\n params,\n messageId: id,\n });\n\n try {\n if (this.config.stream) {\n // 处理sse流式响应模式\n this.stopReceive = false;\n await this.handleStreamRequest(params);\n } else {\n // 处理批量响应模式\n await this.handleBatchRequest(params);\n }\n this.lastRequestParams = params;\n } catch (error) {\n this.setMessageStatus(id!, 'error');\n\n // 发布请求错误事件\n this.eventBus.emit(ChatEngineEventType.REQUEST_ERROR, {\n messageId: id!,\n error,\n params,\n });\n\n throw error;\n }\n }\n\n /**\n * 根据名称获取工具调用\n * @param name 工具调用名称\n * @returns 匹配的工具调用对象,如果未找到则返回undefined\n * @description 用于获取特定名称的工具调用信息,仅在AGUI协议下可用\n */\n public getToolcallByName(name: string): ToolCall | undefined {\n return this.aguiAdapter?.getToolcallByName(name);\n }\n\n private async handleBatchRequest(params: ChatRequestParams) {\n const id = params.messageID;\n if (!id) return;\n this.setMessageStatus(id, 'pending');\n const result = await this.llmService.handleBatchRequest(params, this.config);\n if (result) {\n this.processMessageResult(id, result);\n this.setMessageStatus(id, 'complete');\n\n // 发布请求完成事件\n const message = this.messageStore.getMessageByID(id);\n if (message) {\n this.eventBus.emit(ChatEngineEventType.REQUEST_COMPLETE, {\n messageId: id,\n params,\n message,\n });\n }\n } else {\n this.setMessageStatus(id, 'error');\n\n // 发布请求错误事件\n this.eventBus.emit(ChatEngineEventType.REQUEST_ERROR, {\n messageId: id,\n error: new Error('Batch request returned empty result'),\n params,\n });\n }\n }\n\n private handleError(id: string, error: unknown) {\n\n this.setMessageStatus(id, 'error');\n this.config.onError?.(error as Error);\n\n // 发布请求错误事件\n this.eventBus.emit(ChatEngineEventType.REQUEST_ERROR, {\n messageId: id,\n error,\n });\n }\n\n private handleComplete(id: string, isAborted: boolean, params: ChatRequestParams, chunk?: unknown) {\n // 先调用用户自定义的 onComplete 回调,让业务层决定如何处理\n const customResult = this.config.onComplete?.(isAborted, params, chunk);\n // 如果用户返回了自定义内容,处理这些内容\n if (Array.isArray(customResult) || (customResult && 'status' in customResult)) {\n this.processMessageResult(id, customResult);\n } else {\n // 所有消息内容块都失败才算消息体失败\n const allContentFailed = this.messageStore.messages.every((content) => content.status === 'error');\n // eslint-disable-next-line no-nested-ternary\n this.setMessageStatus(id, isAborted ? 'stop' : allContentFailed ? 'error' : 'complete');\n }\n\n // 发布请求完成/中止事件\n const message = this.messageStore.getMessageByID(id);\n if (message) {\n if (isAborted) {\n this.eventBus.emit(ChatEngineEventType.REQUEST_ABORT, {\n messageId: id,\n params,\n });\n } else {\n this.eventBus.emit(ChatEngineEventType.REQUEST_COMPLETE, {\n messageId: id,\n params,\n message,\n });\n }\n }\n }\n\n /**\n * 处理流式请求\n * 根据协议类型选择不同的处理策略\n */\n private async handleStreamRequest(params: ChatRequestParams) {\n const id = params.messageID;\n const isAGUI = this.config.protocol === 'agui';\n\n if (id) {\n this.setMessageStatus(id, 'streaming');\n }\n\n // 根据协议类型选择处理策略\n if (isAGUI && this.aguiAdapter) {\n await this.handleAGUIStreamRequest(params, id);\n } else {\n await this.handleDefaultStreamRequest(params, id);\n }\n }\n\n /**\n * 处理AGUI协议的流式请求\n */\n private async handleAGUIStreamRequest(params: ChatRequestParams, messageId?: string) {\n await this.llmService.handleStreamRequest(params, {\n ...this.config,\n onMessage: (chunk: SSEChunkData) => {\n if (this.stopReceive || !messageId) return null;\n\n let result;\n\n // SSE数据 → AGUIEventMapper.mapEvent → 用户自定义onMessage(解析后数据 + 原始chunk)\n // 首先使用AGUI适配器进行通用协议解析\n if (this.aguiAdapter) {\n result = this.aguiAdapter.handleAGUIEvent(chunk, {\n onRunStart: (event) => {\n this.config.onStart?.(JSON.stringify(event));\n // 发布 AGUI 运行开始事件\n this.eventBus.emit(ChatEngineEventType.AGUI_RUN_START, {\n runId: event.runId || '',\n threadId: event.threadId,\n timestamp: Date.now(),\n });\n },\n onRunComplete: (isAborted, requestParams, event) => {\n this.handleComplete(messageId, isAborted, requestParams, event);\n // 发布 AGUI 运行完成事件\n if (!isAborted) {\n this.eventBus.emit(ChatEngineEventType.AGUI_RUN_COMPLETE, {\n runId: event?.runId || '',\n threadId: event?.threadId,\n timestamp: Date.now(),\n });\n }\n },\n onRunError: (error) => {\n this.handleError(messageId, error);\n // 发布 AGUI 运行错误事件\n this.eventBus.emit(ChatEngineEventType.AGUI_RUN_ERROR, {\n error,\n });\n },\n });\n }\n\n // 然后调用用户自定义的onMessage,传入解析后的结果和原始数据\n if (this.config.onMessage) {\n const userResult = this.config.onMessage(chunk, this.messageStore.getMessageByID(messageId), result);\n // 如果用户返回了自定义结果,使用用户的结果\n if (userResult) {\n result = userResult;\n }\n }\n\n // 发布流数据事件\n this.eventBus.emit(ChatEngineEventType.REQUEST_STREAM, {\n messageId,\n chunk,\n content: result,\n });\n\n // 处理消息结果\n this.processMessageResult(messageId, result);\n return result;\n },\n onError: (error) => {\n if (messageId) this.handleError(messageId, error);\n },\n onComplete: (isAborted) => {\n // AGUI的完成事件由AGUIAdapter内部处理,这里只处理中断情况\n if (isAborted && messageId) {\n this.handleComplete(messageId, isAborted, params);\n }\n },\n });\n }\n\n /**\n * 处理默认协议的流式请求\n */\n private async handleDefaultStreamRequest(params: ChatRequestParams, messageId?: string) {\n await this.llmService.handleStreamRequest(params, {\n ...this.config,\n onStart: (chunk) => {\n this.config.onStart?.(chunk);\n },\n onMessage: (chunk: SSEChunkData) => {\n if (this.stopReceive || !messageId) return null;\n\n let result = null;\n\n // 使用默认的消息处理\n if (this.config.onMessage) {\n result = this.config.onMessage(chunk, this.messageStore.getMessageByID(messageId));\n }\n\n // 发布流数据事件\n this.eventBus.emit(ChatEngineEventType.REQUEST_STREAM, {\n messageId,\n chunk,\n content: result,\n });\n\n // 处理消息结果\n this.processMessageResult(messageId, result);\n return result;\n },\n onError: (error) => {\n if (messageId) this.handleError(messageId, error);\n },\n onComplete: (isAborted) => {\n if (messageId) {\n this.handleComplete(messageId, isAborted, params);\n }\n },\n });\n }\n\n /**\n * 统一处理消息结果\n * 支持单个内容块、多个内容块和增量更新\n */\n private processMessageResult(messageId: string, result: AIMessageContent | AIMessageContent[] | null) {\n if (!result) return;\n\n // 处理工具调用 - 仅在AGUI协议下处理\n // if (this.aguiAdapter) {\n // const toolCalls = this.aguiAdapter.processToolCalls(result);\n // if (toolCalls.length > 0) {\n // this.messageStore.setMessageToolCalls(messageId, toolCalls);\n // }\n // }\n\n if (Array.isArray(result)) {\n // 处理多个内容块\n this.messageStore.updateMultipleContents(messageId, result);\n } else {\n // 处理单个内容块\n this.processContentUpdate(messageId, result);\n }\n\n // 发布消息更新事件\n const message = this.messageStore.getMessageByID(messageId);\n if (message) {\n this.eventBus.emit(ChatEngineEventType.MESSAGE_UPDATE, {\n messageId,\n content: result,\n message,\n });\n }\n }\n\n private convertMessages(messages?: ChatMessagesData[]) {\n if (!messages) return { messageIds: [], messages: [] };\n\n return {\n messageIds: messages.map((msg) => msg.id),\n messages,\n };\n }\n\n private setMessageStatus(messageId: string, status: ChatMessagesData['status']) {\n const previousStatus = this.messageStore.getMessageByID(messageId)?.status;\n this.messageStore.setMessageStatus(messageId, status);\n\n // 发布消息状态变化事件\n if (status) {\n this.eventBus.emit(ChatEngineEventType.MESSAGE_STATUS_CHANGE, {\n messageId,\n status,\n previousStatus,\n });\n }\n }\n\n // 处理内容更新逻辑\n private processContentUpdate(messageId: string, rawChunk: AIContentChunkUpdate) {\n const message = this.messageStore.messages.find((m) => m.id === messageId);\n if (!message || !isAIMessage(message) || !message.content) return;\n\n let targetIndex: number;\n // 作为新的内容块追加\n if (rawChunk?.strategy === 'append') {\n targetIndex = -1;\n } else {\n // merge 策略:按 type 查找最后一个匹配的类型\n // 通过 type (如 toolcall-${toolCallName}) 来定位要更新的内容块\n targetIndex = message.content.findIndex((content: AIMessageContent) => content.type === rawChunk.type);\n if (targetIndex !== -1) {\n // 找到最后一个匹配的类型(从后往前查找)\n for (let i = message.content.length - 1; i >= 0; i--) {\n if (message.content[i].type === rawChunk.type) {\n targetIndex = i;\n break;\n }\n }\n }\n }\n const processed = this.messageProcessor.processContentUpdate(\n targetIndex !== -1 ? message.content[targetIndex] : undefined,\n rawChunk,\n );\n\n this.messageStore.appendContent(messageId, processed, targetIndex);\n }\n}\n\nexport * from './utils';\nexport * from './adapters/agui';\nexport * from './event-bus';\nexport type * from './type';\n"],"names":["ChatEngine","eventBusOptions","_classCallCheck","_defineProperty","messageProcessor","MessageProcessor","messageStore","MessageStore","eventBus","ChatEventBus","_createClass","key","get","messages","_this$messages$at","at","status","value","destroy","emit","ChatEngineEventType","ENGINE_DESTROY","timestamp","Date","now","abortChat","clearHistory","aguiAdapter","init","configSetter","initialMessages","initialize","convertMessages","config","llmService","LLMService","protocol","AGUIAdapter","ENGINE_INIT","_sendUserMessage","_asyncToGenerator","_regeneratorRuntime","mark","_callee","requestParams","sendRequest","prompt","attachments","customParams","hasValidPrompt","hasValidAttachments","userMessage","aiMessage","params","_args","arguments","wrap","_context","prev","next","length","undefined","_objectWithoutProperties","_excluded","trim","Array","isArray","console","warn","abrupt","createUserMessage","createAssistantMessage","createMultiMessages","MESSAGE_CREATE","message","_objectSpread","messageID","id","stop","sendUserMessage","_x","apply","_sendSystemMessage","_callee2","msg","systemMessage","_context2","role","content","type","data","createMessage","sendSystemMessage","_callee3","options","_options$params","_options$sendRequest","newAIMessage","_args3","_context3","sendAIMessage","_sendAIMessage","_abortChat","_callee4","_this$config","_this$messageStore$la","messageId","_context4","stopReceive","onAbort","closeConnect","stream","lastAIMessage","removeMessage","MESSAGE_DELETE","error","registerMergeStrategy","handler","registerHandler","setMessages","mode","clearMessages","MESSAGE_CLEAR","_regenerateAIMessage","_callee5","_this$lastRequestPara","_this$lastRequestPara2","keepVersion","_args5","_context5","createMessageBranch","lastRequestParams","regenerateAIMessage","_sendRequest","_callee6","_t","_context6","REQUEST_START","handleStreamRequest","handleBatchRequest","setMessageStatus","REQUEST_ERROR","getToolcallByName","name","_this$aguiAdapter","_handleBatchRequest","_callee7","result","_context7","processMessageResult","getMessageByID","REQUEST_COMPLETE","Error","handleError","_this$config$onError","_this$config2","onError","call","handleComplete","isAborted","chunk","_this$config$onComple","_this$config3","customResult","onComplete","allContentFailed","every","REQUEST_ABORT","_handleStreamRequest","_callee8","isAGUI","_context8","handleAGUIStreamRequest","handleDefaultStreamRequest","_callee9","_this","_context9","onMessage","handleAGUIEvent","onRunStart","event","_this$config$onStart","_this$config4","onStart","JSON","stringify","AGUI_RUN_START","runId","threadId","onRunComplete","AGUI_RUN_COMPLETE","onRunError","AGUI_RUN_ERROR","userResult","REQUEST_STREAM","_x6","_x7","_handleAGUIStreamRequest","_handleDefaultStreamRequest","_callee0","_this2","_context0","_this2$config$onStart","_this2$config","_x8","_x9","updateMultipleContents","processContentUpdate","MESSAGE_UPDATE","messageIds","map","_this$messageStore$ge","previousStatus","MESSAGE_STATUS_CHANGE","rawChunk","find","m","isAIMessage","targetIndex","strategy","findIndex","i","processed","appendContent"],"mappings":"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"}
|