@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
@@ -35,11 +35,9 @@
35
35
  }
36
36
  return obj;
37
37
  }
38
- import { transferMessageApi2Message } from '../http/transform/message.ts.js';
39
- import { MessageContentStatus, MessageContentType, MessageRole, MessageStatus } from '../message/index.ts.js';
40
- import { CustomEventType, EventType } from './type.ts.js';
41
- // 临时存储时间戳
42
- let tempTimestamp = 0;
38
+ import { transferMessageApi2Message } from '../http/transform/index.ts.js';
39
+ import { ActivityType, MessageRole, MessageStatus, MessageType } from '../message/index.ts.js';
40
+ import { CustomEventName, EventType } from './type.ts.js';
43
41
  /**
44
42
  * AGUI 协议
45
43
  * @param message - 消息模块
@@ -47,85 +45,127 @@ let tempTimestamp = 0;
47
45
  /**
48
46
  * 处理活动增量更新事件
49
47
  * 使用 JSON Patch 格式增量更新活动数据
50
- */ handleActivityDeltaEvent(_event) {
51
- // 可以在这里实现 JSON Patch 逻辑
52
- // console.log('ActivityDelta:', event);
53
- }
48
+ */ handleActivityDeltaEvent(_event) {}
54
49
  /**
55
50
  * 处理活动快照事件
56
51
  * 记录活动的完整状态
57
- */ handleActivitySnapshotEvent(_event) {
58
- // 可以在这里存储活动快照
59
- // console.log('ActivitySnapshot:', event);
60
- }
52
+ */ handleActivitySnapshotEvent(_event) {}
61
53
  /**
62
54
  * 处理自定义事件
63
55
  */ handleCustomEvent(event) {
64
- switch(event.value.type){
65
- case CustomEventType.ReferenceDocument:
56
+ switch(event.name){
57
+ case CustomEventName.ReferenceDocument:
66
58
  this.handleReferenceDocumentCustomEvent(event);
67
59
  break;
60
+ case CustomEventName.KnowledgeRagStart:
61
+ this.handleKnowledgeRagStartCustomEvent(event);
62
+ break;
63
+ case CustomEventName.KnowledgeRagTextContent:
64
+ this.handleKnowledgeRagTextContentCustomEvent(event);
65
+ break;
66
+ case CustomEventName.KnowledgeRagResult:
67
+ this.handleKnowledgeRagResultCustomEvent(event);
68
+ break;
69
+ case CustomEventName.KnowledgeRagEnd:
70
+ this.handleKnowledgeRagEndCustomEvent(event);
71
+ break;
72
+ case CustomEventName.TempMessage:
73
+ this.handleTempMessageCustomEvent(event);
74
+ break;
68
75
  default:
69
76
  break;
70
77
  }
71
78
  }
72
79
  /**
80
+ * 自定义事件 处理意图识别结束
81
+ */ handleKnowledgeRagEndCustomEvent(_event) {
82
+ const message = this.messageModule.getCurrentLoadingMessage();
83
+ if (message && message.role === MessageRole.Activity && message.activityType === ActivityType.KnowledgeRag) {
84
+ message.status = MessageStatus.Complete;
85
+ }
86
+ }
87
+ /**
88
+ * 自定义事件 处理意图识别结果
89
+ */ handleKnowledgeRagResultCustomEvent(event) {
90
+ const message = this.messageModule.getCurrentLoadingMessage();
91
+ if (message && message.role === MessageRole.Activity && message.activityType === ActivityType.KnowledgeRag) {
92
+ message.content.referenceDocument = event.value;
93
+ }
94
+ }
95
+ /**
96
+ * 自定义事件 处理意图识别开始
97
+ */ handleKnowledgeRagStartCustomEvent(_event) {
98
+ this.messageModule.plusMessage({
99
+ role: MessageRole.Activity,
100
+ activityType: ActivityType.KnowledgeRag,
101
+ content: {
102
+ content: '',
103
+ referenceDocument: []
104
+ },
105
+ status: MessageStatus.Streaming
106
+ });
107
+ }
108
+ /**
109
+ * 自定义事件 处理意图识别文本
110
+ */ handleKnowledgeRagTextContentCustomEvent(event) {
111
+ const message = this.messageModule.getCurrentLoadingMessage();
112
+ if (message && message.role === MessageRole.Activity && message.activityType === ActivityType.KnowledgeRag) {
113
+ const value = event.value;
114
+ message.content.content = value.cover ? value.chunk.content : message.content.content + value.chunk.content;
115
+ }
116
+ }
117
+ /**
73
118
  * 处理消息快照事件
74
119
  * 用于同步多端消息状态
75
120
  */ handleMessagesSnapshotEvent(event) {
76
- this.messageModule.list.value = event.messages.map(transferMessageApi2Message);
121
+ if (event.messages && event.messages.length > 0) {
122
+ this.messageModule.list.value = event.messages.map(transferMessageApi2Message);
123
+ }
77
124
  }
78
125
  /**
79
126
  * 处理原始事件
80
127
  * 透传底层 AI 服务的原始事件
81
128
  */ handleRawEvent(_event) {
82
- // console.log('Raw:', event);
129
+ // console.log('Raw:', _event);
83
130
  }
84
131
  /**
85
132
  * 自定义事件 处理参考文档事件
86
133
  */ handleReferenceDocumentCustomEvent(event) {
87
- const message = this.messageModule.getCurrentLoadingMessage();
88
- if (message && message.role === MessageRole.Assistant) {
89
- const referenceDocumentMessageContent = {
90
- type: MessageContentType.ReferenceDocument,
91
- data: event.value.data,
92
- status: MessageContentStatus.Streaming
93
- };
94
- message.content.push(referenceDocumentMessageContent);
95
- }
134
+ // 可以在这里处理参考文档事件
135
+ this.messageModule.plusMessage({
136
+ role: MessageRole.Activity,
137
+ activityType: ActivityType.ReferenceDocument,
138
+ content: event.value,
139
+ status: MessageStatus.Complete
140
+ });
96
141
  }
97
142
  /**
98
143
  * 处理运行错误事件
99
144
  */ handleRunErrorEvent(event) {
145
+ // 先把最后一个loading消息标记为complete
100
146
  const message = this.messageModule.getCurrentLoadingMessage();
101
147
  if (message) {
102
- message.status = MessageStatus.Error;
103
- message.content = [
104
- {
105
- type: MessageContentType.Text,
106
- data: event.message,
107
- status: MessageContentStatus.Error
108
- }
109
- ];
148
+ message.status = MessageStatus.Complete;
110
149
  }
150
+ // 然后创建一个错误消息
151
+ this.messageModule.plusMessage({
152
+ role: MessageRole.Assistant,
153
+ content: event.message,
154
+ status: MessageStatus.Error
155
+ });
111
156
  }
112
157
  /**
113
158
  * 处理运行完成事件
114
- */ handleRunFinishedEvent(event) {
115
- const message = this.messageModule.getMessageById(event.runId);
159
+ */ handleRunFinishedEvent(_event) {
160
+ const message = this.messageModule.getCurrentLoadingMessage();
116
161
  if (message) {
117
162
  message.status = MessageStatus.Complete;
118
163
  }
119
164
  }
120
165
  /**
121
166
  * 处理运行开始事件
122
- */ handleRunStartedEvent(event) {
123
- this.messageModule.plusMessage({
124
- id: event.runId,
125
- role: MessageRole.Assistant,
126
- content: [],
127
- status: MessageStatus.Streaming
128
- });
167
+ */ handleRunStartedEvent(_event) {
168
+ // 运行开始,可以在这里初始化相关状态
129
169
  }
130
170
  /**
131
171
  * 处理状态增量更新事件
@@ -141,190 +181,180 @@ let tempTimestamp = 0;
141
181
  /**
142
182
  * 处理步骤完成事件
143
183
  */ handleStepFinishedEvent(_event) {
144
- // console.log('StepFinished:', event);
184
+ // console.log('StepFinished:', _event);
145
185
  }
146
186
  /**
147
187
  * 处理步骤开始事件
148
188
  */ handleStepStartedEvent(_event) {
149
- // console.log('StepStarted:', event);
189
+ // console.log('StepStarted:', _event);
190
+ }
191
+ /**
192
+ * 自定义事件 处理临时消息,转换为 AI 文本消息
193
+ */ handleTempMessageCustomEvent(event) {
194
+ const value = event.value;
195
+ this.messageModule.plusMessage({
196
+ role: MessageRole.Assistant,
197
+ content: value.message,
198
+ status: value.status
199
+ });
150
200
  }
151
201
  /**
152
- * 处理文本消息块事件(流式输出)
202
+ * 处理文本消息块事件
153
203
  */ handleTextMessageChunkEvent(event) {
154
204
  const message = this.messageModule.getCurrentLoadingMessage();
155
205
  if (message) {
156
- const messageContent = message.content.find((item)=>item.type === MessageContentType.Text && item.id === event.messageId);
157
- if (messageContent) {
158
- // 增量
159
- messageContent.data += event.delta;
160
- } else {
161
- // 新增
162
- message.content.push({
163
- id: event.messageId,
164
- status: MessageContentStatus.Complete,
165
- type: MessageContentType.Text,
166
- data: event.delta
167
- });
168
- }
206
+ message.content += event.delta || '';
207
+ } else {
208
+ this.messageModule.plusMessage({
209
+ role: event.role,
210
+ content: event.delta || '',
211
+ status: MessageStatus.Complete,
212
+ messageId: event.messageId
213
+ });
169
214
  }
170
215
  }
171
216
  /**
172
- * 处理文本消息内容事件
217
+ * 处理文本消息内容事件(流式输出)
173
218
  */ handleTextMessageContentEvent(event) {
174
- const message = this.messageModule.getCurrentLoadingMessage();
219
+ const message = this.messageModule.getMessageByMessageId(event.messageId);
175
220
  if (message) {
176
- const messageContent = message.content.find((item)=>item.type === MessageContentType.Text && item.id === event.messageId);
177
- if (messageContent) {
178
- messageContent.data += event.delta;
179
- }
221
+ message.content += event.delta;
180
222
  }
181
223
  }
182
224
  /**
183
225
  * 处理文本消息结束事件
184
226
  */ handleTextMessageEndEvent(event) {
185
- const message = this.messageModule.getCurrentLoadingMessage();
227
+ const message = this.messageModule.getMessageByMessageId(event.messageId);
186
228
  if (message) {
187
- const messageContent = message.content.find((item)=>item.type === MessageContentType.Text && item.id === event.messageId);
188
- if (messageContent) {
189
- messageContent.status = MessageContentStatus.Complete;
190
- }
229
+ message.status = MessageStatus.Complete;
191
230
  }
192
231
  }
193
232
  /**
194
233
  * 处理文本消息开始事件
195
234
  */ handleTextMessageStartEvent(event) {
196
- const message = this.messageModule.getCurrentLoadingMessage();
197
- if (message) {
198
- message.content.push({
199
- id: event.messageId,
200
- status: MessageContentStatus.Streaming,
201
- type: MessageContentType.Text,
202
- data: ''
203
- });
204
- }
235
+ this.messageModule.plusMessage({
236
+ role: event.role,
237
+ content: '',
238
+ status: MessageStatus.Streaming,
239
+ messageId: event.messageId
240
+ });
205
241
  }
206
242
  /**
207
243
  * 处理思考结束事件
208
244
  */ handleThinkingEndEvent(event) {
209
245
  const message = this.messageModule.getCurrentLoadingMessage();
210
- if (message && message.role === MessageRole.Assistant) {
211
- const lastThinkingMessageContent = message.content.findLast((item)=>item.type === MessageContentType.Thinking);
212
- if (lastThinkingMessageContent) {
213
- lastThinkingMessageContent.status = MessageContentStatus.Complete;
214
- lastThinkingMessageContent.data.duration = event.timestamp - tempTimestamp;
215
- }
246
+ if (message && message.role === MessageRole.Reasoning) {
247
+ message.duration = event.duration;
248
+ message.status = MessageStatus.Complete;
216
249
  }
217
250
  }
218
251
  /**
219
252
  * 处理思考开始事件
220
- */ handleThinkingStartEvent(event) {
221
- const message = this.messageModule.getCurrentLoadingMessage();
222
- if (message && message.role === MessageRole.Assistant) {
223
- // 临时存储时间戳
224
- tempTimestamp = event.timestamp;
225
- // 创建思考消息内容
226
- const thinkingMessageContent = {
227
- status: MessageContentStatus.Streaming,
228
- type: MessageContentType.Thinking,
229
- data: {
230
- text: '',
231
- title: event.title
232
- }
233
- };
234
- message.content.push(thinkingMessageContent);
235
- }
253
+ */ handleThinkingStartEvent(_event) {
254
+ this.messageModule.plusMessage({
255
+ role: MessageRole.Reasoning,
256
+ content: [],
257
+ status: MessageStatus.Streaming
258
+ });
236
259
  }
237
260
  /**
238
261
  * 处理思考文本消息内容事件
239
262
  */ handleThinkingTextMessageContentEvent(event) {
240
263
  const message = this.messageModule.getCurrentLoadingMessage();
241
- if (message && message.role === MessageRole.Assistant) {
242
- const lastThinkingMessageContent = message.content.findLast((item)=>item.type === MessageContentType.Thinking);
243
- if (lastThinkingMessageContent) {
244
- lastThinkingMessageContent.data.text += event.delta;
245
- }
264
+ if (message && message.role === MessageRole.Reasoning) {
265
+ message.content[message.content.length - 1] += event.delta;
246
266
  }
247
267
  }
248
268
  /**
249
269
  * 处理思考文本消息结束事件
250
270
  */ handleThinkingTextMessageEndEvent(_event) {
251
- // console.log(event);
271
+ // console.log(_event);
252
272
  }
253
273
  /**
254
274
  * 处理思考文本消息开始事件
255
275
  */ handleThinkingTextMessageStartEvent(_event) {
256
- // console.log(event);
276
+ const message = this.messageModule.getCurrentLoadingMessage();
277
+ if (message && message.role === MessageRole.Reasoning) {
278
+ message.content.push('');
279
+ }
257
280
  }
258
281
  /**
259
282
  * 处理工具调用参数事件
260
283
  */ handleToolCallArgsEvent(event) {
261
- const message = this.messageModule.getCurrentLoadingMessage();
262
- if (message && message.role === MessageRole.Assistant) {
263
- const toolCallMessageContent = message.content.find((item)=>item.type === MessageContentType.ToolCall && item.data.toolCallId === event.toolCallId);
264
- if ((toolCallMessageContent === null || toolCallMessageContent === void 0 ? void 0 : toolCallMessageContent.type) === MessageContentType.ToolCall) {
265
- toolCallMessageContent.data.args += event.delta;
284
+ this.messageModule.list.value.forEach((item)=>{
285
+ if (item.role === MessageRole.Assistant && item.toolCalls) {
286
+ item.toolCalls.forEach((toolCall)=>{
287
+ if (toolCall.id === event.toolCallId) {
288
+ toolCall['function'].arguments += event.delta;
289
+ }
290
+ });
266
291
  }
267
- }
292
+ });
268
293
  }
269
294
  /**
270
295
  * 处理工具调用块事件
271
- */ handleToolCallChunkEvent(event) {
272
- const message = this.messageModule.getCurrentLoadingMessage();
273
- if (message && message.role === MessageRole.Assistant) {
274
- const toolCallMessageContent = message.content.find((item)=>item.type === MessageContentType.ToolCall && item.data.toolCallId === event.toolCallId);
275
- if ((toolCallMessageContent === null || toolCallMessageContent === void 0 ? void 0 : toolCallMessageContent.type) === MessageContentType.ToolCall) {
276
- toolCallMessageContent.data.chunk += event.delta;
277
- }
278
- }
279
- }
296
+ */ handleToolCallChunkEvent(_event) {}
280
297
  /**
281
298
  * 处理工具调用结束事件
282
299
  */ handleToolCallEndEvent(event) {
283
- const message = this.messageModule.getCurrentLoadingMessage();
284
- if (message && message.role === MessageRole.Assistant) {
285
- const toolCallMessageContent = message.content.find((item)=>item.type === MessageContentType.ToolCall && item.data.toolCallId === event.toolCallId);
286
- if ((toolCallMessageContent === null || toolCallMessageContent === void 0 ? void 0 : toolCallMessageContent.type) === MessageContentType.ToolCall) {
287
- toolCallMessageContent.status = MessageContentStatus.Complete;
300
+ this.messageModule.list.value.forEach((item)=>{
301
+ if (item.role === MessageRole.Assistant && item.toolCalls) {
302
+ if (item.toolCalls.some((toolCall)=>toolCall.id === event.toolCallId)) {
303
+ item.status = MessageStatus.Complete;
304
+ }
288
305
  }
289
- }
306
+ });
290
307
  }
291
308
  /**
292
309
  * 处理工具调用结果事件
293
310
  */ handleToolCallResultEvent(event) {
294
- const message = this.messageModule.getCurrentLoadingMessage();
295
- if (message && message.role === MessageRole.Assistant) {
296
- const toolCallMessageContent = message.content.find((item)=>item.type === MessageContentType.ToolCall && item.data.toolCallId === event.toolCallId);
297
- if ((toolCallMessageContent === null || toolCallMessageContent === void 0 ? void 0 : toolCallMessageContent.type) === MessageContentType.ToolCall) {
298
- toolCallMessageContent.data.result += event.content;
299
- }
300
- }
311
+ this.messageModule.plusMessage({
312
+ role: MessageRole.Tool,
313
+ content: event.content,
314
+ duration: event.duration,
315
+ status: MessageStatus.Complete,
316
+ toolCallId: event.toolCallId,
317
+ messageId: event.messageId
318
+ });
301
319
  }
302
320
  /**
303
321
  * 处理工具调用开始事件
304
322
  */ handleToolCallStartEvent(event) {
305
- const message = this.messageModule.getCurrentLoadingMessage();
306
- if (message && message.role === MessageRole.Assistant) {
307
- const toolCallMessageContent = {
308
- status: MessageContentStatus.Streaming,
309
- type: MessageContentType.ToolCall,
310
- data: {
311
- toolCallId: event.toolCallId,
312
- toolCallName: event.toolCallName,
313
- parentMessageId: event.parentMessageId
323
+ this.messageModule.plusMessage({
324
+ role: MessageRole.Assistant,
325
+ content: '',
326
+ status: MessageStatus.Streaming,
327
+ toolCalls: [
328
+ {
329
+ id: event.toolCallId,
330
+ type: MessageType.Function,
331
+ function: {
332
+ mcpName: event.mcpName,
333
+ name: event.toolCallName,
334
+ arguments: '',
335
+ description: event.description
336
+ }
314
337
  }
315
- };
316
- message.content.push(toolCallMessageContent);
317
- }
338
+ ]
339
+ });
318
340
  }
319
341
  injectMessageModule(message) {
320
342
  this.messageModule = message;
321
343
  }
322
344
  onDone() {
323
- var _this_onDoneCallback, _this;
345
+ var // 回调给上层
346
+ _this_onDoneCallback, _this;
324
347
  (_this_onDoneCallback = (_this = this).onDoneCallback) === null || _this_onDoneCallback === void 0 ? void 0 : _this_onDoneCallback.call(_this);
325
348
  }
326
349
  onError(error) {
327
- var _this_onErrorCallback, _this;
350
+ var // 回调给上层
351
+ _this_onErrorCallback, _this;
352
+ // 创建一个错误消息
353
+ this.messageModule.plusMessage({
354
+ role: MessageRole.Assistant,
355
+ content: error.message,
356
+ status: MessageStatus.Error
357
+ });
328
358
  (_this_onErrorCallback = (_this = this).onErrorCallback) === null || _this_onErrorCallback === void 0 ? void 0 : _this_onErrorCallback.call(_this, error);
329
359
  }
330
360
  onMessage(message) {