@blueking/chat-helper 0.0.1-beta.3 → 0.0.1-beta.30

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.
Files changed (43) hide show
  1. package/README.md +962 -63
  2. package/dist/agent/type.d.ts +27 -2
  3. package/dist/agent/type.ts.js +1 -1
  4. package/dist/agent/use-agent.d.ts +506 -436
  5. package/dist/agent/use-agent.ts.js +224 -25
  6. package/dist/event/ag-ui.d.ts +27 -7
  7. package/dist/event/ag-ui.ts.js +180 -150
  8. package/dist/event/type.d.ts +36 -108
  9. package/dist/event/type.ts.js +9 -11
  10. package/dist/http/fetch/fetch.d.ts +40 -36
  11. package/dist/http/fetch/fetch.ts.js +59 -32
  12. package/dist/http/fetch/index.d.ts +1 -0
  13. package/dist/http/fetch/index.ts.js +17 -1
  14. package/dist/http/index.d.ts +24 -16
  15. package/dist/http/index.ts.js +60 -3
  16. package/dist/http/module/agent.d.ts +2 -2
  17. package/dist/http/module/index.d.ts +22 -16
  18. package/dist/http/module/index.ts.js +2 -1
  19. package/dist/http/module/message.d.ts +22 -7
  20. package/dist/http/module/message.ts.js +49 -7
  21. package/dist/http/module/session.d.ts +14 -11
  22. package/dist/http/module/session.ts.js +66 -4
  23. package/dist/http/transform/agent.ts.js +11 -8
  24. package/dist/http/transform/message.d.ts +6 -6
  25. package/dist/http/transform/message.ts.js +542 -118
  26. package/dist/http/transform/session.ts.js +9 -1
  27. package/dist/index.d.ts +2926 -2631
  28. package/dist/index.ts.js +26 -5
  29. package/dist/mediator/index.d.ts +2 -0
  30. package/dist/mediator/index.ts.js +26 -0
  31. package/dist/mediator/type.d.ts +50 -0
  32. package/dist/mediator/type.ts.js +28 -0
  33. package/dist/mediator/use-mediator.d.ts +7 -0
  34. package/dist/mediator/use-mediator.ts.js +47 -0
  35. package/dist/message/type.d.ts +239 -142
  36. package/dist/message/type.ts.js +15 -15
  37. package/dist/message/use-message.d.ts +817 -754
  38. package/dist/message/use-message.ts.js +226 -28
  39. package/dist/session/type.d.ts +10 -0
  40. package/dist/session/use-session.d.ts +1881 -1729
  41. package/dist/session/use-session.ts.js +198 -33
  42. package/dist/type.d.ts +4 -4
  43. package/package.json +2 -1
@@ -51,52 +51,251 @@ function _async_to_generator(fn) {
51
51
  });
52
52
  };
53
53
  }
54
+ function _define_property(obj, key, value) {
55
+ if (key in obj) {
56
+ Object.defineProperty(obj, key, {
57
+ value: value,
58
+ enumerable: true,
59
+ configurable: true,
60
+ writable: true
61
+ });
62
+ } else {
63
+ obj[key] = value;
64
+ }
65
+ return obj;
66
+ }
67
+ function _object_spread(target) {
68
+ for(var i = 1; i < arguments.length; i++){
69
+ var source = arguments[i] != null ? arguments[i] : {};
70
+ var ownKeys = Object.keys(source);
71
+ if (typeof Object.getOwnPropertySymbols === "function") {
72
+ ownKeys = ownKeys.concat(Object.getOwnPropertySymbols(source).filter(function(sym) {
73
+ return Object.getOwnPropertyDescriptor(source, sym).enumerable;
74
+ }));
75
+ }
76
+ ownKeys.forEach(function(key) {
77
+ _define_property(target, key, source[key]);
78
+ });
79
+ }
80
+ return target;
81
+ }
54
82
  import { ref } from 'vue';
55
83
  import { AGUIProtocol } from '../event/index.ts.js';
56
- import { useFetch } from '../http/fetch/index.ts.js';
57
- export const useAgent = (options, http, message)=>{
58
- const { fetchClient } = useFetch(options);
84
+ import { MessageRole, MessageStatus } from '../message/index.ts.js';
85
+ /**
86
+ * Agent 模块
87
+ * @param options - 配置选项
88
+ * @param mediator - 中介者模块,用于获取其他模块的引用
89
+ */ export const useAgent = (mediator, protocol)=>{
59
90
  const info = ref(null);
60
91
  const isInfoLoading = ref(false);
61
- let chatController = null;
92
+ const isChatting = ref(false);
93
+ let usedProtocol = protocol || new AGUIProtocol();
94
+ let abortController = null;
62
95
  const getAgentInfo = ()=>{
96
+ var _mediator_http;
63
97
  isInfoLoading.value = true;
64
- return http.agent.getAgentInfo().then((res)=>{
98
+ return (_mediator_http = mediator.http) === null || _mediator_http === void 0 ? void 0 : _mediator_http.agent.getAgentInfo().then((res)=>{
65
99
  info.value = res;
66
- }).finally(()=>{
100
+ })['finally'](()=>{
67
101
  isInfoLoading.value = false;
68
102
  });
69
103
  };
70
- const chat = ()=>{
71
- chatController = new AbortController();
72
- const protocol = options.protocol || new AGUIProtocol();
73
- // ag-ui 协议需要注入消息模块
74
- if (protocol instanceof AGUIProtocol) {
75
- protocol.injectMessageModule(message);
104
+ // 处理角色消息
105
+ const handleRole = (data, sessionCode)=>{
106
+ var _data_promptSetting_content, _data_promptSetting;
107
+ const lastRoleMessage = (_data_promptSetting = data.promptSetting) === null || _data_promptSetting === void 0 ? void 0 : (_data_promptSetting_content = _data_promptSetting.content) === null || _data_promptSetting_content === void 0 ? void 0 : _data_promptSetting_content.at(-1);
108
+ if ((lastRoleMessage === null || lastRoleMessage === void 0 ? void 0 : lastRoleMessage.role) === MessageRole.Pause) {
109
+ var _mediator_message;
110
+ (_mediator_message = mediator.message) === null || _mediator_message === void 0 ? void 0 : _mediator_message.createAndPlusMessage({
111
+ role: MessageRole.Assistant,
112
+ content: lastRoleMessage.content,
113
+ status: MessageStatus.Complete,
114
+ sessionCode,
115
+ property: {
116
+ extra: {
117
+ pause: true
118
+ }
119
+ }
120
+ });
76
121
  }
77
- fetchClient.streamRequest({
78
- url: 'agent/chat/',
79
- controller: chatController,
80
- onDone: protocol.onDone,
81
- onError: protocol.onError,
82
- onMessage: protocol.onMessage,
83
- onStart: protocol.onStart
122
+ };
123
+ const streamRequest = function() {
124
+ var _ref = _async_to_generator(function*(sessionCode, url, config) {
125
+ var // 发起聊天
126
+ _mediator_http;
127
+ // ag-ui 协议需要注入消息模块
128
+ if (usedProtocol instanceof AGUIProtocol) {
129
+ usedProtocol.injectMessageModule(mediator.message);
130
+ }
131
+ // 事件代理
132
+ const onDone = ()=>{
133
+ var _usedProtocol_onDone;
134
+ isChatting.value = false;
135
+ (_usedProtocol_onDone = usedProtocol.onDone) === null || _usedProtocol_onDone === void 0 ? void 0 : _usedProtocol_onDone.call(usedProtocol);
136
+ };
137
+ const onError = (error)=>{
138
+ var _usedProtocol_onError;
139
+ isChatting.value = false;
140
+ (_usedProtocol_onError = usedProtocol.onError) === null || _usedProtocol_onError === void 0 ? void 0 : _usedProtocol_onError.call(usedProtocol, error);
141
+ };
142
+ const onMessage = (event)=>{
143
+ var _usedProtocol_onMessage;
144
+ (_usedProtocol_onMessage = usedProtocol.onMessage) === null || _usedProtocol_onMessage === void 0 ? void 0 : _usedProtocol_onMessage.call(usedProtocol, event);
145
+ };
146
+ const onStart = ()=>{
147
+ var _usedProtocol_onStart;
148
+ isChatting.value = true;
149
+ (_usedProtocol_onStart = usedProtocol.onStart) === null || _usedProtocol_onStart === void 0 ? void 0 : _usedProtocol_onStart.call(usedProtocol);
150
+ };
151
+ // 创建 AbortController
152
+ abortController = new AbortController();
153
+ (_mediator_http = mediator.http) === null || _mediator_http === void 0 ? void 0 : _mediator_http.fetchClient.streamRequest(_object_spread({
154
+ url: url || 'chat_completion/',
155
+ method: 'POST',
156
+ data: {
157
+ session_code: sessionCode
158
+ },
159
+ controller: abortController,
160
+ onDone,
161
+ onError,
162
+ onMessage,
163
+ onStart
164
+ }, config));
165
+ });
166
+ return function streamRequest(sessionCode, url, config) {
167
+ return _ref.apply(this, arguments);
168
+ };
169
+ }();
170
+ /**
171
+ * 发送聊天消息
172
+ * @param userInput - 用户输入的消息内容
173
+ * @param sessionCode - 会话代码
174
+ * @param url - 请求 URL(可选)
175
+ * @param config - 请求配置(可选)
176
+ * @param property - 消息属性,用于传递引用内容或快捷键相关信息(可选)
177
+ */ const chat = function() {
178
+ var _ref = _async_to_generator(function*(userInput, sessionCode, url, config, property) {
179
+ var _mediator_message;
180
+ // 先新增一个 message
181
+ yield (_mediator_message = mediator.message) === null || _mediator_message === void 0 ? void 0 : _mediator_message.createAndPlusMessage(_object_spread({
182
+ role: MessageRole.User,
183
+ content: userInput,
184
+ status: MessageStatus.Complete,
185
+ sessionCode
186
+ }, property && {
187
+ property
188
+ }));
189
+ // 发起聊天
190
+ streamRequest(sessionCode, url, config);
84
191
  });
192
+ return function chat(userInput, sessionCode, url, config, property) {
193
+ return _ref.apply(this, arguments);
194
+ };
195
+ }();
196
+ /**
197
+ * 恢复流式聊天
198
+ * 如果最后一条消息处于流式传输中或是用户消息,重新建立连接
199
+ * @param sessionCode - 会话代码
200
+ * @param url - 请求 URL(可选)
201
+ * @param config - 请求配置(可选)
202
+ */ const resumeStreamingChat = (sessionCode, url, config)=>{
203
+ var _mediator_message;
204
+ const lastMessage = (_mediator_message = mediator.message) === null || _mediator_message === void 0 ? void 0 : _mediator_message.list.value.at(-1);
205
+ if ((lastMessage === null || lastMessage === void 0 ? void 0 : lastMessage.status) === MessageStatus.Streaming || (lastMessage === null || lastMessage === void 0 ? void 0 : lastMessage.role) === MessageRole.User) {
206
+ streamRequest(sessionCode, url, config);
207
+ }
208
+ };
209
+ /**
210
+ * 中止聊天(纯前端中止,后端继续处理)
211
+ */ const abortChat = ()=>{
212
+ var _abortController_abort;
213
+ abortController === null || abortController === void 0 ? void 0 : (_abortController_abort = abortController.abort) === null || _abortController_abort === void 0 ? void 0 : _abortController_abort.call(abortController);
214
+ abortController = null;
85
215
  };
86
- const stopChat = function() {
87
- var _ref = _async_to_generator(function*() {
88
- chatController === null || chatController === void 0 ? void 0 : chatController.abort();
89
- chatController = null;
216
+ /**
217
+ * 停止会话,后端中止
218
+ * @param sessionCode - 会话代码
219
+ */ const stopChat = function() {
220
+ var _ref = _async_to_generator(function*(sessionCode) {
221
+ var _mediator_http_message;
222
+ return (_mediator_http_message = mediator.http.message) === null || _mediator_http_message === void 0 ? void 0 : _mediator_http_message.stopChat(sessionCode);
90
223
  });
91
- return function stopChat() {
224
+ return function stopChat(sessionCode) {
92
225
  return _ref.apply(this, arguments);
93
226
  };
94
227
  }();
228
+ /**
229
+ * 重新发送消息(乐观更新)
230
+ * 删除指定用户消息及其后续所有消息,同时创建新消息并重新发送
231
+ *
232
+ * @param messageId - 用户消息 ID(id 字段)
233
+ * @param sessionCode - 会话编码
234
+ * @param newContent - 新内容(可选,不传则使用原消息内容;支持多模态)
235
+ * @param url - 请求 URL(可选)
236
+ * @param config - 请求配置(可选)
237
+ */ const resendMessage = function() {
238
+ var _ref = _async_to_generator(function*(messageId, sessionCode, newContent, url, config) {
239
+ var _mediator_message, _mediator_message1, _mediator_message2;
240
+ const messages = ((_mediator_message = mediator.message) === null || _mediator_message === void 0 ? void 0 : _mediator_message.list.value) || [];
241
+ // 1. 找到目标用户消息
242
+ const messageIndex = messages.findIndex((m)=>String(m.id) === messageId);
243
+ if (messageIndex === -1) {
244
+ throw new Error(`Message not found: ${messageId}`);
245
+ }
246
+ const targetMessage = messages[messageIndex];
247
+ if (targetMessage.role !== MessageRole.User) {
248
+ throw new Error('Can only resend user messages');
249
+ }
250
+ // 2. 获取原消息内容和 property(在删除前保存)
251
+ const originalContent = targetMessage.content;
252
+ const originalProperty = targetMessage.property;
253
+ // 3. 确定最终发送的内容
254
+ const finalContent = newContent !== null && newContent !== void 0 ? newContent : originalContent;
255
+ // 4. 收集需要删除的消息(目标用户消息 + 后续所有消息)
256
+ const messagesToDelete = messages.slice(messageIndex);
257
+ // 5. 并行执行删除和创建(乐观更新:立即更新 UI,API 调用在后台进行)
258
+ // 不等待 API 返回,让 UI 立即响应
259
+ const deletePromise = (_mediator_message1 = mediator.message) === null || _mediator_message1 === void 0 ? void 0 : _mediator_message1.deleteMessages(messagesToDelete);
260
+ const createPromise = (_mediator_message2 = mediator.message) === null || _mediator_message2 === void 0 ? void 0 : _mediator_message2.createAndPlusMessage(_object_spread({
261
+ role: MessageRole.User,
262
+ content: finalContent,
263
+ status: MessageStatus.Complete,
264
+ sessionCode
265
+ }, originalProperty && {
266
+ property: originalProperty
267
+ }));
268
+ // 6. 立即发起流式请求(不等待删除和创建的 API 完成)
269
+ streamRequest(sessionCode, url, config);
270
+ // 7. 在后台等待 API 完成,处理可能的错误
271
+ Promise.all([
272
+ deletePromise,
273
+ createPromise
274
+ ])['catch']((error)=>{
275
+ console.error('[resendMessage] API error:', error);
276
+ });
277
+ });
278
+ return function resendMessage(messageId, sessionCode, newContent, url, config) {
279
+ return _ref.apply(this, arguments);
280
+ };
281
+ }();
282
+ const reset = (protocol)=>{
283
+ // 重置状态
284
+ usedProtocol = protocol || new AGUIProtocol();
285
+ info.value = null;
286
+ isInfoLoading.value = false;
287
+ };
95
288
  return {
96
289
  info,
97
290
  isInfoLoading,
291
+ isChatting,
98
292
  chat,
293
+ handleRole,
294
+ resendMessage,
295
+ resumeStreamingChat,
296
+ abortChat,
99
297
  stopChat,
100
- getAgentInfo
298
+ getAgentInfo,
299
+ reset
101
300
  };
102
301
  };
@@ -31,6 +31,22 @@ export declare class AGUIProtocol implements ISSEProtocol {
31
31
  * 处理自定义事件
32
32
  */
33
33
  handleCustomEvent(event: ICustomEvent): void;
34
+ /**
35
+ * 自定义事件 处理意图识别结束
36
+ */
37
+ handleKnowledgeRagEndCustomEvent(_event: ICustomEvent): void;
38
+ /**
39
+ * 自定义事件 处理意图识别结果
40
+ */
41
+ handleKnowledgeRagResultCustomEvent(event: ICustomEvent): void;
42
+ /**
43
+ * 自定义事件 处理意图识别开始
44
+ */
45
+ handleKnowledgeRagStartCustomEvent(_event: ICustomEvent): void;
46
+ /**
47
+ * 自定义事件 处理意图识别文本
48
+ */
49
+ handleKnowledgeRagTextContentCustomEvent(event: ICustomEvent): void;
34
50
  /**
35
51
  * 处理消息快照事件
36
52
  * 用于同步多端消息状态
@@ -52,11 +68,11 @@ export declare class AGUIProtocol implements ISSEProtocol {
52
68
  /**
53
69
  * 处理运行完成事件
54
70
  */
55
- handleRunFinishedEvent(event: IRunFinishedEvent): void;
71
+ handleRunFinishedEvent(_event: IRunFinishedEvent): void;
56
72
  /**
57
73
  * 处理运行开始事件
58
74
  */
59
- handleRunStartedEvent(event: IRunStartedEvent): void;
75
+ handleRunStartedEvent(_event: IRunStartedEvent): void;
60
76
  /**
61
77
  * 处理状态增量更新事件
62
78
  */
@@ -74,11 +90,15 @@ export declare class AGUIProtocol implements ISSEProtocol {
74
90
  */
75
91
  handleStepStartedEvent(_event: IStepStartedEvent): void;
76
92
  /**
77
- * 处理文本消息块事件(流式输出)
93
+ * 自定义事件 处理临时消息,转换为 AI 文本消息
94
+ */
95
+ handleTempMessageCustomEvent(event: ICustomEvent): void;
96
+ /**
97
+ * 处理文本消息块事件
78
98
  */
79
99
  handleTextMessageChunkEvent(event: ITextMessageChunkEvent): void;
80
100
  /**
81
- * 处理文本消息内容事件
101
+ * 处理文本消息内容事件(流式输出)
82
102
  */
83
103
  handleTextMessageContentEvent(event: ITextMessageContentEvent): void;
84
104
  /**
@@ -96,7 +116,7 @@ export declare class AGUIProtocol implements ISSEProtocol {
96
116
  /**
97
117
  * 处理思考开始事件
98
118
  */
99
- handleThinkingStartEvent(event: IThinkingStartEvent): void;
119
+ handleThinkingStartEvent(_event: IThinkingStartEvent): void;
100
120
  /**
101
121
  * 处理思考文本消息内容事件
102
122
  */
@@ -116,7 +136,7 @@ export declare class AGUIProtocol implements ISSEProtocol {
116
136
  /**
117
137
  * 处理工具调用块事件
118
138
  */
119
- handleToolCallChunkEvent(event: IToolCallChunkEvent): void;
139
+ handleToolCallChunkEvent(_event: IToolCallChunkEvent): void;
120
140
  /**
121
141
  * 处理工具调用结束事件
122
142
  */
@@ -131,7 +151,7 @@ export declare class AGUIProtocol implements ISSEProtocol {
131
151
  handleToolCallStartEvent(event: IToolCallStartEvent): void;
132
152
  injectMessageModule(message: IMessageModule): void;
133
153
  onDone(): void;
134
- onError(error: unknown): void;
154
+ onError(error: Error): void;
135
155
  onMessage(message: unknown): void;
136
156
  onStart(): void;
137
157
  }