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

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 +516 -434
  5. package/dist/agent/use-agent.ts.js +224 -25
  6. package/dist/event/ag-ui.d.ts +39 -7
  7. package/dist/event/ag-ui.ts.js +224 -150
  8. package/dist/event/type.d.ts +99 -107
  9. package/dist/event/type.ts.js +34 -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 +25 -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 +23 -16
  18. package/dist/http/module/index.ts.js +2 -1
  19. package/dist/http/module/message.d.ts +23 -7
  20. package/dist/http/module/message.ts.js +52 -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 +568 -118
  26. package/dist/http/transform/session.ts.js +9 -1
  27. package/dist/index.d.ts +2996 -2616
  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 +280 -140
  36. package/dist/message/type.ts.js +16 -15
  37. package/dist/message/use-message.d.ts +837 -750
  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 +1921 -1721
  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, FlowTaskState } from './type.ts.js';
43
41
  /**
44
42
  * AGUI 协议
45
43
  * @param message - 消息模块
@@ -47,85 +45,171 @@ 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.FlowAgentStart:
58
+ this.handleFlowAgentStartCustomEvent(event);
59
+ break;
60
+ case CustomEventName.FlowAgentResult:
61
+ this.handleFlowAgentResultCustomEvent(event);
62
+ break;
63
+ case CustomEventName.FlowAgentEnd:
64
+ this.handleFlowAgentEndCustomEvent(event);
65
+ break;
66
+ case CustomEventName.ReferenceDocument:
66
67
  this.handleReferenceDocumentCustomEvent(event);
67
68
  break;
69
+ case CustomEventName.KnowledgeRagStart:
70
+ this.handleKnowledgeRagStartCustomEvent(event);
71
+ break;
72
+ case CustomEventName.KnowledgeRagTextContent:
73
+ this.handleKnowledgeRagTextContentCustomEvent(event);
74
+ break;
75
+ case CustomEventName.KnowledgeRagResult:
76
+ this.handleKnowledgeRagResultCustomEvent(event);
77
+ break;
78
+ case CustomEventName.KnowledgeRagEnd:
79
+ this.handleKnowledgeRagEndCustomEvent(event);
80
+ break;
81
+ case CustomEventName.TempMessage:
82
+ this.handleTempMessageCustomEvent(event);
83
+ break;
68
84
  default:
69
85
  break;
70
86
  }
71
87
  }
72
88
  /**
89
+ * 自定义事件 处理流程编排任务结束
90
+ */ handleFlowAgentEndCustomEvent(_event) {
91
+ const message = this.messageModule.getCurrentLoadingMessage();
92
+ if (message && message.role === MessageRole.Activity && message.activityType === ActivityType.FlowAgent) {
93
+ const value = _event.value;
94
+ message.content.task_outputs = value.task_outputs;
95
+ message.status = MessageStatus.Complete;
96
+ }
97
+ }
98
+ /**
99
+ * 自定义事件 处理流程编排任务结果(增量更新节点状态)
100
+ */ handleFlowAgentResultCustomEvent(event) {
101
+ const message = this.messageModule.getCurrentLoadingMessage();
102
+ if (message && message.role === MessageRole.Activity && message.activityType === ActivityType.FlowAgent) {
103
+ message.content = event.value;
104
+ }
105
+ }
106
+ /**
107
+ * 自定义事件 处理流程编排任务开始
108
+ */ handleFlowAgentStartCustomEvent(event) {
109
+ const value = event.value;
110
+ this.messageModule.plusMessage({
111
+ role: MessageRole.Activity,
112
+ activityType: ActivityType.FlowAgent,
113
+ content: {
114
+ nodes: {},
115
+ task_id: Number(value.task_id),
116
+ task_name: '',
117
+ task_outputs: [],
118
+ task_state: FlowTaskState.Created
119
+ },
120
+ status: MessageStatus.Streaming
121
+ });
122
+ }
123
+ /**
124
+ * 自定义事件 处理意图识别结束
125
+ */ handleKnowledgeRagEndCustomEvent(_event) {
126
+ const message = this.messageModule.getCurrentLoadingMessage();
127
+ if (message && message.role === MessageRole.Activity && message.activityType === ActivityType.KnowledgeRag) {
128
+ message.status = MessageStatus.Complete;
129
+ }
130
+ }
131
+ /**
132
+ * 自定义事件 处理意图识别结果
133
+ */ handleKnowledgeRagResultCustomEvent(event) {
134
+ const message = this.messageModule.getCurrentLoadingMessage();
135
+ if (message && message.role === MessageRole.Activity && message.activityType === ActivityType.KnowledgeRag) {
136
+ message.content.referenceDocument = event.value;
137
+ }
138
+ }
139
+ /**
140
+ * 自定义事件 处理意图识别开始
141
+ */ handleKnowledgeRagStartCustomEvent(_event) {
142
+ this.messageModule.plusMessage({
143
+ role: MessageRole.Activity,
144
+ activityType: ActivityType.KnowledgeRag,
145
+ content: {
146
+ content: '',
147
+ referenceDocument: []
148
+ },
149
+ status: MessageStatus.Streaming
150
+ });
151
+ }
152
+ /**
153
+ * 自定义事件 处理意图识别文本
154
+ */ handleKnowledgeRagTextContentCustomEvent(event) {
155
+ const message = this.messageModule.getCurrentLoadingMessage();
156
+ if (message && message.role === MessageRole.Activity && message.activityType === ActivityType.KnowledgeRag) {
157
+ const value = event.value;
158
+ message.content.content = value.cover ? value.chunk.content : message.content.content + value.chunk.content;
159
+ }
160
+ }
161
+ /**
73
162
  * 处理消息快照事件
74
163
  * 用于同步多端消息状态
75
164
  */ handleMessagesSnapshotEvent(event) {
76
- this.messageModule.list.value = event.messages.map(transferMessageApi2Message);
165
+ if (event.messages && event.messages.length > 0) {
166
+ this.messageModule.list.value = event.messages.map(transferMessageApi2Message);
167
+ }
77
168
  }
78
169
  /**
79
170
  * 处理原始事件
80
171
  * 透传底层 AI 服务的原始事件
81
172
  */ handleRawEvent(_event) {
82
- // console.log('Raw:', event);
173
+ // console.log('Raw:', _event);
83
174
  }
84
175
  /**
85
176
  * 自定义事件 处理参考文档事件
86
177
  */ 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
- }
178
+ // 可以在这里处理参考文档事件
179
+ this.messageModule.plusMessage({
180
+ role: MessageRole.Activity,
181
+ activityType: ActivityType.ReferenceDocument,
182
+ content: event.value,
183
+ status: MessageStatus.Complete
184
+ });
96
185
  }
97
186
  /**
98
187
  * 处理运行错误事件
99
188
  */ handleRunErrorEvent(event) {
189
+ // 先把最后一个loading消息标记为complete
100
190
  const message = this.messageModule.getCurrentLoadingMessage();
101
191
  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
- ];
192
+ message.status = MessageStatus.Complete;
110
193
  }
194
+ // 然后创建一个错误消息
195
+ this.messageModule.plusMessage({
196
+ role: MessageRole.Assistant,
197
+ content: event.message,
198
+ status: MessageStatus.Error
199
+ });
111
200
  }
112
201
  /**
113
202
  * 处理运行完成事件
114
- */ handleRunFinishedEvent(event) {
115
- const message = this.messageModule.getMessageById(event.runId);
203
+ */ handleRunFinishedEvent(_event) {
204
+ const message = this.messageModule.getCurrentLoadingMessage();
116
205
  if (message) {
117
206
  message.status = MessageStatus.Complete;
118
207
  }
119
208
  }
120
209
  /**
121
210
  * 处理运行开始事件
122
- */ handleRunStartedEvent(event) {
123
- this.messageModule.plusMessage({
124
- id: event.runId,
125
- role: MessageRole.Assistant,
126
- content: [],
127
- status: MessageStatus.Streaming
128
- });
211
+ */ handleRunStartedEvent(_event) {
212
+ // 运行开始,可以在这里初始化相关状态
129
213
  }
130
214
  /**
131
215
  * 处理状态增量更新事件
@@ -141,190 +225,180 @@ let tempTimestamp = 0;
141
225
  /**
142
226
  * 处理步骤完成事件
143
227
  */ handleStepFinishedEvent(_event) {
144
- // console.log('StepFinished:', event);
228
+ // console.log('StepFinished:', _event);
145
229
  }
146
230
  /**
147
231
  * 处理步骤开始事件
148
232
  */ handleStepStartedEvent(_event) {
149
- // console.log('StepStarted:', event);
233
+ // console.log('StepStarted:', _event);
150
234
  }
151
235
  /**
152
- * 处理文本消息块事件(流式输出)
236
+ * 自定义事件 处理临时消息,转换为 AI 文本消息
237
+ */ handleTempMessageCustomEvent(event) {
238
+ const value = event.value;
239
+ this.messageModule.plusMessage({
240
+ role: MessageRole.Assistant,
241
+ content: value.message,
242
+ status: value.status
243
+ });
244
+ }
245
+ /**
246
+ * 处理文本消息块事件
153
247
  */ handleTextMessageChunkEvent(event) {
154
248
  const message = this.messageModule.getCurrentLoadingMessage();
155
249
  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
- }
250
+ message.content += event.delta || '';
251
+ } else {
252
+ this.messageModule.plusMessage({
253
+ role: event.role,
254
+ content: event.delta || '',
255
+ status: MessageStatus.Complete,
256
+ messageId: event.messageId
257
+ });
169
258
  }
170
259
  }
171
260
  /**
172
- * 处理文本消息内容事件
261
+ * 处理文本消息内容事件(流式输出)
173
262
  */ handleTextMessageContentEvent(event) {
174
- const message = this.messageModule.getCurrentLoadingMessage();
263
+ const message = this.messageModule.getMessageByMessageId(event.messageId);
175
264
  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
- }
265
+ message.content += event.delta;
180
266
  }
181
267
  }
182
268
  /**
183
269
  * 处理文本消息结束事件
184
270
  */ handleTextMessageEndEvent(event) {
185
- const message = this.messageModule.getCurrentLoadingMessage();
271
+ const message = this.messageModule.getMessageByMessageId(event.messageId);
186
272
  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
- }
273
+ message.status = MessageStatus.Complete;
191
274
  }
192
275
  }
193
276
  /**
194
277
  * 处理文本消息开始事件
195
278
  */ 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
- }
279
+ this.messageModule.plusMessage({
280
+ role: event.role,
281
+ content: '',
282
+ status: MessageStatus.Streaming,
283
+ messageId: event.messageId
284
+ });
205
285
  }
206
286
  /**
207
287
  * 处理思考结束事件
208
288
  */ handleThinkingEndEvent(event) {
209
289
  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
- }
290
+ if (message && message.role === MessageRole.Reasoning) {
291
+ message.duration = event.duration;
292
+ message.status = MessageStatus.Complete;
216
293
  }
217
294
  }
218
295
  /**
219
296
  * 处理思考开始事件
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
- }
297
+ */ handleThinkingStartEvent(_event) {
298
+ this.messageModule.plusMessage({
299
+ role: MessageRole.Reasoning,
300
+ content: [],
301
+ status: MessageStatus.Streaming
302
+ });
236
303
  }
237
304
  /**
238
305
  * 处理思考文本消息内容事件
239
306
  */ handleThinkingTextMessageContentEvent(event) {
240
307
  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
- }
308
+ if (message && message.role === MessageRole.Reasoning) {
309
+ message.content[message.content.length - 1] += event.delta;
246
310
  }
247
311
  }
248
312
  /**
249
313
  * 处理思考文本消息结束事件
250
314
  */ handleThinkingTextMessageEndEvent(_event) {
251
- // console.log(event);
315
+ // console.log(_event);
252
316
  }
253
317
  /**
254
318
  * 处理思考文本消息开始事件
255
319
  */ handleThinkingTextMessageStartEvent(_event) {
256
- // console.log(event);
320
+ const message = this.messageModule.getCurrentLoadingMessage();
321
+ if (message && message.role === MessageRole.Reasoning) {
322
+ message.content.push('');
323
+ }
257
324
  }
258
325
  /**
259
326
  * 处理工具调用参数事件
260
327
  */ 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;
328
+ this.messageModule.list.value.forEach((item)=>{
329
+ if (item.role === MessageRole.Assistant && item.toolCalls) {
330
+ item.toolCalls.forEach((toolCall)=>{
331
+ if (toolCall.id === event.toolCallId) {
332
+ toolCall['function'].arguments += event.delta;
333
+ }
334
+ });
266
335
  }
267
- }
336
+ });
268
337
  }
269
338
  /**
270
339
  * 处理工具调用块事件
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
- }
340
+ */ handleToolCallChunkEvent(_event) {}
280
341
  /**
281
342
  * 处理工具调用结束事件
282
343
  */ 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;
344
+ this.messageModule.list.value.forEach((item)=>{
345
+ if (item.role === MessageRole.Assistant && item.toolCalls) {
346
+ if (item.toolCalls.some((toolCall)=>toolCall.id === event.toolCallId)) {
347
+ item.status = MessageStatus.Complete;
348
+ }
288
349
  }
289
- }
350
+ });
290
351
  }
291
352
  /**
292
353
  * 处理工具调用结果事件
293
354
  */ 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
- }
355
+ this.messageModule.plusMessage({
356
+ role: MessageRole.Tool,
357
+ content: event.content,
358
+ duration: event.duration,
359
+ status: MessageStatus.Complete,
360
+ toolCallId: event.toolCallId,
361
+ messageId: event.messageId
362
+ });
301
363
  }
302
364
  /**
303
365
  * 处理工具调用开始事件
304
366
  */ 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
367
+ this.messageModule.plusMessage({
368
+ role: MessageRole.Assistant,
369
+ content: '',
370
+ status: MessageStatus.Streaming,
371
+ toolCalls: [
372
+ {
373
+ id: event.toolCallId,
374
+ type: MessageType.Function,
375
+ function: {
376
+ mcpName: event.mcpName,
377
+ name: event.toolCallName,
378
+ arguments: '',
379
+ description: event.description
380
+ }
314
381
  }
315
- };
316
- message.content.push(toolCallMessageContent);
317
- }
382
+ ]
383
+ });
318
384
  }
319
385
  injectMessageModule(message) {
320
386
  this.messageModule = message;
321
387
  }
322
388
  onDone() {
323
- var _this_onDoneCallback, _this;
389
+ var // 回调给上层
390
+ _this_onDoneCallback, _this;
324
391
  (_this_onDoneCallback = (_this = this).onDoneCallback) === null || _this_onDoneCallback === void 0 ? void 0 : _this_onDoneCallback.call(_this);
325
392
  }
326
393
  onError(error) {
327
- var _this_onErrorCallback, _this;
394
+ var // 回调给上层
395
+ _this_onErrorCallback, _this;
396
+ // 创建一个错误消息
397
+ this.messageModule.plusMessage({
398
+ role: MessageRole.Assistant,
399
+ content: error.message,
400
+ status: MessageStatus.Error
401
+ });
328
402
  (_this_onErrorCallback = (_this = this).onErrorCallback) === null || _this_onErrorCallback === void 0 ? void 0 : _this_onErrorCallback.call(_this, error);
329
403
  }
330
404
  onMessage(message) {