@blueking/chat-helper 0.0.12-beta.1 → 0.0.12-beta.3
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/dist/agent/use-agent.d.ts +1276 -4
- package/dist/agent/use-agent.ts.js +136 -19
- package/dist/event/ag-ui.d.ts +13 -1
- package/dist/event/ag-ui.ts.js +83 -14
- package/dist/event/type.d.ts +90 -24
- package/dist/event/type.ts.js +44 -16
- package/dist/http/fetch/fetch.d.ts +20 -0
- package/dist/http/fetch/fetch.ts.js +67 -18
- package/dist/http/index.d.ts +8 -2
- package/dist/http/index.ts.js +2 -1
- package/dist/http/module/index.d.ts +6 -2
- package/dist/http/module/message.d.ts +6 -3
- package/dist/http/module/message.ts.js +18 -1
- package/dist/http/module/session.d.ts +1 -0
- package/dist/http/module/session.ts.js +33 -6
- package/dist/http/transform/message.ts.js +10 -0
- package/dist/index.d.ts +8854 -16
- package/dist/index.ts.js +2 -1
- package/dist/message/type.d.ts +24 -4
- package/dist/message/type.ts.js +7 -0
- package/dist/message/use-message.d.ts +2524 -4
- package/dist/session/use-session.d.ts +5048 -8
- package/dist/session/use-session.ts.js +3 -1
- package/package.json +4 -1
package/dist/event/type.ts.js
CHANGED
|
@@ -27,12 +27,15 @@
|
|
|
27
27
|
CustomEventName["FlowAgentEnd"] = "flow_agent_end";
|
|
28
28
|
CustomEventName["FlowAgentResult"] = "flow_agent_result";
|
|
29
29
|
CustomEventName["FlowAgentStart"] = "flow_agent_start";
|
|
30
|
+
CustomEventName["FlowAgentUpdate"] = "flow_agent_update";
|
|
31
|
+
CustomEventName["FlowAgentRestart"] = "flow_agent_restart";
|
|
30
32
|
CustomEventName["KnowledgeRagEnd"] = "knowledge_rag_end";
|
|
31
33
|
CustomEventName["KnowledgeRagResult"] = "knowledge_rag_result";
|
|
32
34
|
CustomEventName["KnowledgeRagStart"] = "knowledge_rag_start";
|
|
33
35
|
CustomEventName["KnowledgeRagTextContent"] = "knowledge_rag_text_content";
|
|
34
36
|
CustomEventName["ReferenceDocument"] = "reference_document";
|
|
35
37
|
CustomEventName["TempMessage"] = "temp_message";
|
|
38
|
+
CustomEventName["ApprovalResult"] = "approval_result";
|
|
36
39
|
})(CustomEventName || (CustomEventName = {}));
|
|
37
40
|
export var EventType;
|
|
38
41
|
(function(EventType) {
|
|
@@ -65,23 +68,48 @@ export var EventType;
|
|
|
65
68
|
})(EventType || (EventType = {}));
|
|
66
69
|
export var FlowNodeState;
|
|
67
70
|
(function(FlowNodeState) {
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
71
|
+
FlowNodeState["Failed"] = "failed";
|
|
72
|
+
FlowNodeState["Running"] = "running";
|
|
73
|
+
FlowNodeState["Success"] = "success";
|
|
74
|
+
FlowNodeState["Suspended"] = "suspended";
|
|
72
75
|
})(FlowNodeState || (FlowNodeState = {}));
|
|
73
76
|
export var FlowTaskState;
|
|
74
77
|
(function(FlowTaskState) {
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
78
|
+
FlowTaskState["Blocked"] = "BLOCKED";
|
|
79
|
+
FlowTaskState["Created"] = "CREATED";
|
|
80
|
+
FlowTaskState["Failed"] = "FAILED";
|
|
81
|
+
FlowTaskState["Finished"] = "FINISHED";
|
|
82
|
+
FlowTaskState["LoopReady"] = "LOOP_READY";
|
|
83
|
+
FlowTaskState["Ready"] = "READY";
|
|
84
|
+
FlowTaskState["Revoked"] = "REVOKED";
|
|
85
|
+
FlowTaskState["RollBackFailed"] = "ROLL_BACK_FAILED";
|
|
86
|
+
FlowTaskState["RollBackSuccess"] = "ROLL_BACK_SUCCESS";
|
|
87
|
+
FlowTaskState["RollingBack"] = "ROLLING_BACK";
|
|
88
|
+
FlowTaskState["Running"] = "RUNNING";
|
|
89
|
+
FlowTaskState["Suspended"] = "SUSPENDED";
|
|
87
90
|
})(FlowTaskState || (FlowTaskState = {}));
|
|
91
|
+
export var RunFinishedOutcomeType;
|
|
92
|
+
(function(RunFinishedOutcomeType) {
|
|
93
|
+
RunFinishedOutcomeType["Success"] = "success";
|
|
94
|
+
RunFinishedOutcomeType["Interrupt"] = "interrupt";
|
|
95
|
+
})(RunFinishedOutcomeType || (RunFinishedOutcomeType = {}));
|
|
96
|
+
export var ApprovalInterruptTicketStatus;
|
|
97
|
+
(function(ApprovalInterruptTicketStatus) {
|
|
98
|
+
ApprovalInterruptTicketStatus["Abandoned"] = "abandoned";
|
|
99
|
+
ApprovalInterruptTicketStatus["Approved"] = "approved";
|
|
100
|
+
ApprovalInterruptTicketStatus["Cancelled"] = "cancelled";
|
|
101
|
+
ApprovalInterruptTicketStatus["Draft"] = "draft";
|
|
102
|
+
ApprovalInterruptTicketStatus["Expired"] = "expired";
|
|
103
|
+
ApprovalInterruptTicketStatus["Rejected"] = "rejected";
|
|
104
|
+
ApprovalInterruptTicketStatus["Pending"] = "pending";
|
|
105
|
+
})(ApprovalInterruptTicketStatus || (ApprovalInterruptTicketStatus = {}));
|
|
106
|
+
export var InterruptReason;
|
|
107
|
+
(function(InterruptReason) {
|
|
108
|
+
InterruptReason["AIDevToolApproval"] = "aidev:tool_approval";
|
|
109
|
+
InterruptReason["UserQuestion"] = "aidev:user_question";
|
|
110
|
+
})(InterruptReason || (InterruptReason = {}));
|
|
111
|
+
export var ResumeStatus;
|
|
112
|
+
(function(ResumeStatus) {
|
|
113
|
+
ResumeStatus["Resolved"] = "resolved";
|
|
114
|
+
ResumeStatus["Cancelled"] = "cancelled";
|
|
115
|
+
})(ResumeStatus || (ResumeStatus = {}));
|
|
@@ -45,6 +45,13 @@ export interface ISSEProtocol {
|
|
|
45
45
|
onMessage?: (event: unknown) => void;
|
|
46
46
|
onStart?: () => void;
|
|
47
47
|
}
|
|
48
|
+
/** 全局错误处理器类型 */
|
|
49
|
+
export type GlobalErrorHandler = (error: IRequestError) => void;
|
|
50
|
+
/** 错误处理器配置 */
|
|
51
|
+
export interface ErrorHandlerOptions {
|
|
52
|
+
/** 忽略的 URL 模式(字符串包含匹配或正则) */
|
|
53
|
+
ignoreErrors?: Array<string | RegExp>;
|
|
54
|
+
}
|
|
48
55
|
interface IInterceptor<T> {
|
|
49
56
|
fulfilled?: (value: T) => T;
|
|
50
57
|
rejected?: (error: unknown) => unknown;
|
|
@@ -62,7 +69,20 @@ export declare class FetchClient {
|
|
|
62
69
|
request: InterceptorManager<IRequestConfig>;
|
|
63
70
|
response: InterceptorManager<IResponse>;
|
|
64
71
|
};
|
|
72
|
+
/** 全局错误处理器 */
|
|
73
|
+
private globalErrorHandler?;
|
|
74
|
+
/** 忽略的错误 URL 模式 */
|
|
75
|
+
private ignoreErrorPatterns;
|
|
65
76
|
constructor(config?: IRequestConfig);
|
|
77
|
+
/**
|
|
78
|
+
* 注册全局错误处理器
|
|
79
|
+
* 所有 HTTP 错误(request 和 streamRequest)都会经过此处理器
|
|
80
|
+
*/
|
|
81
|
+
onError(handler: GlobalErrorHandler, options?: ErrorHandlerOptions): void;
|
|
82
|
+
/** 判断是否应忽略该错误 */
|
|
83
|
+
private shouldIgnoreError;
|
|
84
|
+
/** 统一错误分发 */
|
|
85
|
+
private dispatchError;
|
|
66
86
|
applyResponseErrorInterceptors(error: unknown): unknown;
|
|
67
87
|
create(config?: IRequestConfig): FetchClient;
|
|
68
88
|
delete<T = unknown>(url: string, params?: Record<string, unknown>, config?: IRequestConfig): Promise<T>;
|
|
@@ -132,6 +132,35 @@ class InterceptorManager {
|
|
|
132
132
|
}
|
|
133
133
|
}
|
|
134
134
|
export class FetchClient {
|
|
135
|
+
/**
|
|
136
|
+
* 注册全局错误处理器
|
|
137
|
+
* 所有 HTTP 错误(request 和 streamRequest)都会经过此处理器
|
|
138
|
+
*/ onError(handler, options) {
|
|
139
|
+
this.globalErrorHandler = handler;
|
|
140
|
+
if (options === null || options === void 0 ? void 0 : options.ignoreErrors) {
|
|
141
|
+
this.ignoreErrorPatterns = options.ignoreErrors;
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
/** 判断是否应忽略该错误 */ shouldIgnoreError(error) {
|
|
145
|
+
var _error_config, _error_config1;
|
|
146
|
+
// 同时匹配相对路径和完整 URL
|
|
147
|
+
const url = ((_error_config = error.config) === null || _error_config === void 0 ? void 0 : _error_config.url) || '';
|
|
148
|
+
const baseURL = ((_error_config1 = error.config) === null || _error_config1 === void 0 ? void 0 : _error_config1.baseURL) || '';
|
|
149
|
+
const fullURL = baseURL && !url.startsWith('http') ? baseURL + url : url;
|
|
150
|
+
return this.ignoreErrorPatterns.some((pattern)=>{
|
|
151
|
+
if (typeof pattern === 'string') {
|
|
152
|
+
// 字符串模式:同时检查相对路径和完整 URL
|
|
153
|
+
return url.includes(pattern) || fullURL.includes(pattern);
|
|
154
|
+
}
|
|
155
|
+
// 正则模式:同时检查相对路径和完整 URL
|
|
156
|
+
return pattern.test(url) || pattern.test(fullURL);
|
|
157
|
+
});
|
|
158
|
+
}
|
|
159
|
+
/** 统一错误分发 */ dispatchError(error) {
|
|
160
|
+
if (this.globalErrorHandler && !this.shouldIgnoreError(error)) {
|
|
161
|
+
this.globalErrorHandler(error);
|
|
162
|
+
}
|
|
163
|
+
}
|
|
135
164
|
applyResponseErrorInterceptors(error) {
|
|
136
165
|
let rejectedError = error;
|
|
137
166
|
this.interceptors.response.forEach((interceptor)=>{
|
|
@@ -323,11 +352,13 @@ export class FetchClient {
|
|
|
323
352
|
if (timeoutId) {
|
|
324
353
|
clearTimeout(timeoutId);
|
|
325
354
|
}
|
|
355
|
+
// 用户手动取消请求
|
|
326
356
|
if (error instanceof Error && error.name === 'AbortError') {
|
|
327
|
-
|
|
328
|
-
|
|
357
|
+
console.warn('User canceled request', error.message);
|
|
358
|
+
return;
|
|
329
359
|
}
|
|
330
360
|
const requestError = error.isAxiosError === true ? error : createError(error.message, requestConfig, error.code, undefined);
|
|
361
|
+
_this.dispatchError(requestError);
|
|
331
362
|
throw _this.applyResponseErrorInterceptors(requestError);
|
|
332
363
|
}
|
|
333
364
|
})();
|
|
@@ -340,13 +371,31 @@ export class FetchClient {
|
|
|
340
371
|
streamRequest(config) {
|
|
341
372
|
var _this = this;
|
|
342
373
|
return _async_to_generator(function*() {
|
|
343
|
-
|
|
374
|
+
// 错误去重:标记是否已调用过全局错误处理器
|
|
375
|
+
let errorDispatched = false;
|
|
376
|
+
// 包装 onError 回调,统一调用全局错误处理器
|
|
377
|
+
const originalOnError = config.onError;
|
|
378
|
+
const wrappedOnError = (error)=>{
|
|
379
|
+
if (!errorDispatched) {
|
|
380
|
+
// 将 requestConfig 附加到错误对象,以便 shouldIgnoreError 能匹配 URL
|
|
381
|
+
const errorWithConfig = error;
|
|
382
|
+
if (!errorWithConfig.config) {
|
|
383
|
+
errorWithConfig.config = requestConfig;
|
|
384
|
+
}
|
|
385
|
+
_this.dispatchError(errorWithConfig);
|
|
386
|
+
errorDispatched = true;
|
|
387
|
+
}
|
|
388
|
+
originalOnError === null || originalOnError === void 0 ? void 0 : originalOnError(error);
|
|
389
|
+
};
|
|
390
|
+
const wrappedConfig = _object_spread_props(_object_spread({}, config), {
|
|
391
|
+
onError: wrappedOnError
|
|
392
|
+
});
|
|
393
|
+
const { url, fetchConfig, requestConfig } = _this.prepareRequest(wrappedConfig, true);
|
|
344
394
|
try {
|
|
345
|
-
var
|
|
395
|
+
var _wrappedConfig_onStart, _fetchResponse_body;
|
|
346
396
|
const fetchResponse = yield fetch(url, fetchConfig);
|
|
347
397
|
const validateStatus = requestConfig.validateStatus || _this.defaults.validateStatus;
|
|
348
398
|
if (!validateStatus(fetchResponse.status)) {
|
|
349
|
-
var _config_onError;
|
|
350
399
|
let message = `Request failed with status code ${fetchResponse.status}`;
|
|
351
400
|
try {
|
|
352
401
|
var _errorData_error;
|
|
@@ -358,15 +407,14 @@ export class FetchClient {
|
|
|
358
407
|
message = `Request failed with status code ${fetchResponse.status}`;
|
|
359
408
|
}
|
|
360
409
|
const error = createError(message, requestConfig, `ERR_BAD_RESPONSE`, undefined);
|
|
361
|
-
(
|
|
410
|
+
wrappedOnError(error);
|
|
362
411
|
return;
|
|
363
412
|
}
|
|
364
|
-
(
|
|
413
|
+
(_wrappedConfig_onStart = wrappedConfig.onStart) === null || _wrappedConfig_onStart === void 0 ? void 0 : _wrappedConfig_onStart.call(wrappedConfig);
|
|
365
414
|
const reader = (_fetchResponse_body = fetchResponse.body) === null || _fetchResponse_body === void 0 ? void 0 : _fetchResponse_body.pipeThrough(new window.TextDecoderStream()).getReader();
|
|
366
415
|
if (!reader) {
|
|
367
|
-
var _config_onError1;
|
|
368
416
|
const error = new Error('IResponse body is not readable');
|
|
369
|
-
(
|
|
417
|
+
wrappedOnError(error);
|
|
370
418
|
return;
|
|
371
419
|
}
|
|
372
420
|
// 缓存跨行分片数据
|
|
@@ -383,17 +431,17 @@ export class FetchClient {
|
|
|
383
431
|
while(true){
|
|
384
432
|
const { value, done } = yield reader.read();
|
|
385
433
|
if (done) {
|
|
386
|
-
var
|
|
387
|
-
(
|
|
434
|
+
var _wrappedConfig_onDone;
|
|
435
|
+
(_wrappedConfig_onDone = wrappedConfig.onDone) === null || _wrappedConfig_onDone === void 0 ? void 0 : _wrappedConfig_onDone.call(wrappedConfig);
|
|
388
436
|
break;
|
|
389
437
|
}
|
|
390
438
|
const values = (temp + value.toString()).split('\n');
|
|
391
439
|
values.forEach((value)=>{
|
|
392
440
|
const item = value.replace('data:', '').trim();
|
|
393
441
|
if (isJson(item)) {
|
|
394
|
-
var
|
|
442
|
+
var _wrappedConfig_onMessage;
|
|
395
443
|
const json = JSON.parse(item);
|
|
396
|
-
(
|
|
444
|
+
(_wrappedConfig_onMessage = wrappedConfig.onMessage) === null || _wrappedConfig_onMessage === void 0 ? void 0 : _wrappedConfig_onMessage.call(wrappedConfig, json);
|
|
397
445
|
temp = '';
|
|
398
446
|
} else if (item) {
|
|
399
447
|
temp = item;
|
|
@@ -403,12 +451,11 @@ export class FetchClient {
|
|
|
403
451
|
} catch (error) {
|
|
404
452
|
if (error instanceof Error) {
|
|
405
453
|
if (error.name === 'AbortError') {
|
|
406
|
-
var
|
|
407
|
-
(
|
|
408
|
-
|
|
409
|
-
var _config_onError2;
|
|
410
|
-
(_config_onError2 = config.onError) === null || _config_onError2 === void 0 ? void 0 : _config_onError2.call(config, error);
|
|
454
|
+
var _wrappedConfig_onDone1;
|
|
455
|
+
(_wrappedConfig_onDone1 = wrappedConfig.onDone) === null || _wrappedConfig_onDone1 === void 0 ? void 0 : _wrappedConfig_onDone1.call(wrappedConfig);
|
|
456
|
+
return;
|
|
411
457
|
}
|
|
458
|
+
wrappedOnError(error);
|
|
412
459
|
}
|
|
413
460
|
throw error;
|
|
414
461
|
}
|
|
@@ -417,6 +464,8 @@ export class FetchClient {
|
|
|
417
464
|
constructor(config = {}){
|
|
418
465
|
_define_property(this, "defaults", void 0);
|
|
419
466
|
_define_property(this, "interceptors", void 0);
|
|
467
|
+
/** 全局错误处理器 */ _define_property(this, "globalErrorHandler", void 0);
|
|
468
|
+
/** 忽略的错误 URL 模式 */ _define_property(this, "ignoreErrorPatterns", []);
|
|
420
469
|
this.defaults = mergeConfig({
|
|
421
470
|
method: 'GET',
|
|
422
471
|
headers: {
|
package/dist/http/index.d.ts
CHANGED
|
@@ -8,6 +8,8 @@ export * from './transform';
|
|
|
8
8
|
*/
|
|
9
9
|
export declare const useHttp: (options: IUseChatHelperOptions) => {
|
|
10
10
|
reset: (newOptions: IUseChatHelperOptions) => void;
|
|
11
|
+
/** 注册全局错误处理器 */
|
|
12
|
+
onError: (handler: import("./fetch").GlobalErrorHandler, options?: import("./fetch").ErrorHandlerOptions) => void;
|
|
11
13
|
agent: {
|
|
12
14
|
getAgentInfo: (config?: import("./fetch").IRequestConfig) => Promise<import("..").IAgentInfo>;
|
|
13
15
|
};
|
|
@@ -31,17 +33,21 @@ export declare const useHttp: (options: IUseChatHelperOptions) => {
|
|
|
31
33
|
uploadFile: (sessionCode: string, file: File, config?: import("./fetch").IRequestConfig) => Promise<{
|
|
32
34
|
download_url?: string;
|
|
33
35
|
}>;
|
|
36
|
+
isResumeSession: (sessionCode: string, config?: import("./fetch").IRequestConfig) => Promise<boolean>;
|
|
34
37
|
};
|
|
35
38
|
message: {
|
|
36
39
|
getMessages: (sessionCode: string, limit?: number, config?: import("./fetch").IRequestConfig) => Promise<import("..").IMessage[]>;
|
|
37
|
-
plusMessage: (data: import("..").IMessage, config?: import("./fetch").IRequestConfig) => Promise<import("..").IActivityMessage | import("..").IAssistantMessage | import("..").IDeveloperMessage | import("..").IGuideMessage | import("..").IHiddenAssistantMessage | import("..").IHiddenGuideMessage | import("..").IHiddenMessage | import("..").IHiddenSystemMessage | import("..").IHiddenUserMessage | import("..").IInfoMessage | import("..").IPauseMessage | import("..").IPlaceholderMessage | import("..").IReasoningMessage | import("..").ISystemMessage | import("..").ITemplateAssistantMessage | import("..").ITemplateGuideMessage | import("..").ITemplateHiddenMessage | import("..").ITemplateSystemMessage | import("..").ITemplateUserMessage | import("..").IToolMessage | import("..").IUserMessage>;
|
|
38
|
-
modifyMessage: (data: import("..").IMessage, config?: import("./fetch").IRequestConfig) => Promise<import("..").IActivityMessage | import("..").IAssistantMessage | import("..").IDeveloperMessage | import("..").IGuideMessage | import("..").IHiddenAssistantMessage | import("..").IHiddenGuideMessage | import("..").IHiddenMessage | import("..").IHiddenSystemMessage | import("..").IHiddenUserMessage | import("..").IInfoMessage | import("..").IPauseMessage | import("..").IPlaceholderMessage | import("..").IReasoningMessage | import("..").ISystemMessage | import("..").ITemplateAssistantMessage | import("..").ITemplateGuideMessage | import("..").ITemplateHiddenMessage | import("..").ITemplateSystemMessage | import("..").ITemplateUserMessage | import("..").IToolMessage | import("..").IUserMessage>;
|
|
40
|
+
plusMessage: (data: import("..").IMessage, config?: import("./fetch").IRequestConfig) => Promise<import("..").IActivityMessage | import("..").IAssistantMessage | import("..").IDeveloperMessage | import("..").IInterruptMessage | import("..").IGuideMessage | import("..").IHiddenAssistantMessage | import("..").IHiddenGuideMessage | import("..").IHiddenMessage | import("..").IHiddenSystemMessage | import("..").IHiddenUserMessage | import("..").IInfoMessage | import("..").IPauseMessage | import("..").IPlaceholderMessage | import("..").IReasoningMessage | import("..").ISystemMessage | import("..").ITemplateAssistantMessage | import("..").ITemplateGuideMessage | import("..").ITemplateHiddenMessage | import("..").ITemplateSystemMessage | import("..").ITemplateUserMessage | import("..").IToolMessage | import("..").IUserMessage>;
|
|
41
|
+
modifyMessage: (data: import("..").IMessage, config?: import("./fetch").IRequestConfig) => Promise<import("..").IActivityMessage | import("..").IAssistantMessage | import("..").IDeveloperMessage | import("..").IInterruptMessage | import("..").IGuideMessage | import("..").IHiddenAssistantMessage | import("..").IHiddenGuideMessage | import("..").IHiddenMessage | import("..").IHiddenSystemMessage | import("..").IHiddenUserMessage | import("..").IInfoMessage | import("..").IPauseMessage | import("..").IPlaceholderMessage | import("..").IReasoningMessage | import("..").ISystemMessage | import("..").ITemplateAssistantMessage | import("..").ITemplateGuideMessage | import("..").ITemplateHiddenMessage | import("..").ITemplateSystemMessage | import("..").ITemplateUserMessage | import("..").IToolMessage | import("..").IUserMessage>;
|
|
39
42
|
deleteMessage: (id: string, config?: import("./fetch").IRequestConfig) => Promise<import("..").IMessage>;
|
|
40
43
|
batchDeleteMessages: (ids: string[], config?: import("./fetch").IRequestConfig) => Promise<number>;
|
|
41
44
|
shareMessages: (sessionCode: string, contentIds: string[], expiredAt?: number, config?: import("./fetch").IRequestConfig) => Promise<import("./module/message").IShareMessagesResponse>;
|
|
42
45
|
stopChat: (sessionCode: string, config?: import("./fetch").IRequestConfig) => Promise<void>;
|
|
43
46
|
getFlowAgentTaskInfo: (taskId: number, config?: import("./fetch").IRequestConfig) => Promise<unknown>;
|
|
44
47
|
getFlowAgentTaskNodeInfo: (taskId: number, nodeId: string, config?: import("./fetch").IRequestConfig) => Promise<import("..").IFlowAgentTaskNodeInfo>;
|
|
48
|
+
retryFlowAgentTaskNode: (sessionCode: string, nodeId: string, taskId: number, config?: import("./fetch").IRequestConfig) => Promise<void>;
|
|
49
|
+
skipFlowAgentTaskNode: (sessionCode: string, nodeId: string, taskId: number, config?: import("./fetch").IRequestConfig) => Promise<void>;
|
|
50
|
+
userOperation: (sessionCode: string, operation: import("..").UserOperation, payload: import("..").IUserOperationPayload, config?: import("./fetch").IRequestConfig) => Promise<void>;
|
|
45
51
|
};
|
|
46
52
|
fetchClient: import("./fetch").FetchClient;
|
|
47
53
|
};
|
package/dist/http/index.ts.js
CHANGED
|
@@ -28,17 +28,21 @@ export declare const useModule: (fetchClient: FetchClient) => {
|
|
|
28
28
|
uploadFile: (sessionCode: string, file: File, config?: import("../fetch").IRequestConfig) => Promise<{
|
|
29
29
|
download_url?: string;
|
|
30
30
|
}>;
|
|
31
|
+
isResumeSession: (sessionCode: string, config?: import("../fetch").IRequestConfig) => Promise<boolean>;
|
|
31
32
|
};
|
|
32
33
|
message: {
|
|
33
34
|
getMessages: (sessionCode: string, limit?: number, config?: import("../fetch").IRequestConfig) => Promise<import("../..").IMessage[]>;
|
|
34
|
-
plusMessage: (data: import("../..").IMessage, config?: import("../fetch").IRequestConfig) => Promise<import("../..").IActivityMessage | import("../..").IAssistantMessage | import("../..").IDeveloperMessage | import("../..").IGuideMessage | import("../..").IHiddenAssistantMessage | import("../..").IHiddenGuideMessage | import("../..").IHiddenMessage | import("../..").IHiddenSystemMessage | import("../..").IHiddenUserMessage | import("../..").IInfoMessage | import("../..").IPauseMessage | import("../..").IPlaceholderMessage | import("../..").IReasoningMessage | import("../..").ISystemMessage | import("../..").ITemplateAssistantMessage | import("../..").ITemplateGuideMessage | import("../..").ITemplateHiddenMessage | import("../..").ITemplateSystemMessage | import("../..").ITemplateUserMessage | import("../..").IToolMessage | import("../..").IUserMessage>;
|
|
35
|
-
modifyMessage: (data: import("../..").IMessage, config?: import("../fetch").IRequestConfig) => Promise<import("../..").IActivityMessage | import("../..").IAssistantMessage | import("../..").IDeveloperMessage | import("../..").IGuideMessage | import("../..").IHiddenAssistantMessage | import("../..").IHiddenGuideMessage | import("../..").IHiddenMessage | import("../..").IHiddenSystemMessage | import("../..").IHiddenUserMessage | import("../..").IInfoMessage | import("../..").IPauseMessage | import("../..").IPlaceholderMessage | import("../..").IReasoningMessage | import("../..").ISystemMessage | import("../..").ITemplateAssistantMessage | import("../..").ITemplateGuideMessage | import("../..").ITemplateHiddenMessage | import("../..").ITemplateSystemMessage | import("../..").ITemplateUserMessage | import("../..").IToolMessage | import("../..").IUserMessage>;
|
|
35
|
+
plusMessage: (data: import("../..").IMessage, config?: import("../fetch").IRequestConfig) => Promise<import("../..").IActivityMessage | import("../..").IAssistantMessage | import("../..").IDeveloperMessage | import("../..").IInterruptMessage | import("../..").IGuideMessage | import("../..").IHiddenAssistantMessage | import("../..").IHiddenGuideMessage | import("../..").IHiddenMessage | import("../..").IHiddenSystemMessage | import("../..").IHiddenUserMessage | import("../..").IInfoMessage | import("../..").IPauseMessage | import("../..").IPlaceholderMessage | import("../..").IReasoningMessage | import("../..").ISystemMessage | import("../..").ITemplateAssistantMessage | import("../..").ITemplateGuideMessage | import("../..").ITemplateHiddenMessage | import("../..").ITemplateSystemMessage | import("../..").ITemplateUserMessage | import("../..").IToolMessage | import("../..").IUserMessage>;
|
|
36
|
+
modifyMessage: (data: import("../..").IMessage, config?: import("../fetch").IRequestConfig) => Promise<import("../..").IActivityMessage | import("../..").IAssistantMessage | import("../..").IDeveloperMessage | import("../..").IInterruptMessage | import("../..").IGuideMessage | import("../..").IHiddenAssistantMessage | import("../..").IHiddenGuideMessage | import("../..").IHiddenMessage | import("../..").IHiddenSystemMessage | import("../..").IHiddenUserMessage | import("../..").IInfoMessage | import("../..").IPauseMessage | import("../..").IPlaceholderMessage | import("../..").IReasoningMessage | import("../..").ISystemMessage | import("../..").ITemplateAssistantMessage | import("../..").ITemplateGuideMessage | import("../..").ITemplateHiddenMessage | import("../..").ITemplateSystemMessage | import("../..").ITemplateUserMessage | import("../..").IToolMessage | import("../..").IUserMessage>;
|
|
36
37
|
deleteMessage: (id: string, config?: import("../fetch").IRequestConfig) => Promise<import("../..").IMessage>;
|
|
37
38
|
batchDeleteMessages: (ids: string[], config?: import("../fetch").IRequestConfig) => Promise<number>;
|
|
38
39
|
shareMessages: (sessionCode: string, contentIds: string[], expiredAt?: number, config?: import("../fetch").IRequestConfig) => Promise<import("./message").IShareMessagesResponse>;
|
|
39
40
|
stopChat: (sessionCode: string, config?: import("../fetch").IRequestConfig) => Promise<void>;
|
|
40
41
|
getFlowAgentTaskInfo: (taskId: number, config?: import("../fetch").IRequestConfig) => Promise<unknown>;
|
|
41
42
|
getFlowAgentTaskNodeInfo: (taskId: number, nodeId: string, config?: import("../fetch").IRequestConfig) => Promise<import("../..").IFlowAgentTaskNodeInfo>;
|
|
43
|
+
retryFlowAgentTaskNode: (sessionCode: string, nodeId: string, taskId: number, config?: import("../fetch").IRequestConfig) => Promise<void>;
|
|
44
|
+
skipFlowAgentTaskNode: (sessionCode: string, nodeId: string, taskId: number, config?: import("../fetch").IRequestConfig) => Promise<void>;
|
|
45
|
+
userOperation: (sessionCode: string, operation: import("../..").UserOperation, payload: import("../..").IUserOperationPayload, config?: import("../fetch").IRequestConfig) => Promise<void>;
|
|
42
46
|
};
|
|
43
47
|
fetchClient: FetchClient;
|
|
44
48
|
};
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { IFlowAgentTaskNodeInfo, IMessage } from '../../message/type';
|
|
1
|
+
import type { IFlowAgentTaskNodeInfo, IMessage, IUserOperationPayload, UserOperation } from '../../message/type';
|
|
2
2
|
import type { FetchClient, IRequestConfig } from '../fetch';
|
|
3
3
|
/**
|
|
4
4
|
* 分享消息接口返回数据
|
|
@@ -20,12 +20,15 @@ export interface IShareMessagesResponse {
|
|
|
20
20
|
*/
|
|
21
21
|
export declare const useMessage: (fetchClient: FetchClient) => {
|
|
22
22
|
getMessages: (sessionCode: string, limit?: number, config?: IRequestConfig) => Promise<IMessage[]>;
|
|
23
|
-
plusMessage: (data: IMessage, config?: IRequestConfig) => Promise<import("../../message/type").IActivityMessage | import("../../message/type").IAssistantMessage | import("../../message/type").IDeveloperMessage | import("../../message/type").IGuideMessage | import("../../message/type").IHiddenAssistantMessage | import("../../message/type").IHiddenGuideMessage | import("../../message/type").IHiddenMessage | import("../../message/type").IHiddenSystemMessage | import("../../message/type").IHiddenUserMessage | import("../../message/type").IInfoMessage | import("../../message/type").IPauseMessage | import("../../message/type").IPlaceholderMessage | import("../../message/type").IReasoningMessage | import("../../message/type").ISystemMessage | import("../../message/type").ITemplateAssistantMessage | import("../../message/type").ITemplateGuideMessage | import("../../message/type").ITemplateHiddenMessage | import("../../message/type").ITemplateSystemMessage | import("../../message/type").ITemplateUserMessage | import("../../message/type").IToolMessage | import("../../message/type").IUserMessage>;
|
|
24
|
-
modifyMessage: (data: IMessage, config?: IRequestConfig) => Promise<import("../../message/type").IActivityMessage | import("../../message/type").IAssistantMessage | import("../../message/type").IDeveloperMessage | import("../../message/type").IGuideMessage | import("../../message/type").IHiddenAssistantMessage | import("../../message/type").IHiddenGuideMessage | import("../../message/type").IHiddenMessage | import("../../message/type").IHiddenSystemMessage | import("../../message/type").IHiddenUserMessage | import("../../message/type").IInfoMessage | import("../../message/type").IPauseMessage | import("../../message/type").IPlaceholderMessage | import("../../message/type").IReasoningMessage | import("../../message/type").ISystemMessage | import("../../message/type").ITemplateAssistantMessage | import("../../message/type").ITemplateGuideMessage | import("../../message/type").ITemplateHiddenMessage | import("../../message/type").ITemplateSystemMessage | import("../../message/type").ITemplateUserMessage | import("../../message/type").IToolMessage | import("../../message/type").IUserMessage>;
|
|
23
|
+
plusMessage: (data: IMessage, config?: IRequestConfig) => Promise<import("../../message/type").IActivityMessage | import("../../message/type").IAssistantMessage | import("../../message/type").IDeveloperMessage | import("../../message/type").IInterruptMessage | import("../../message/type").IGuideMessage | import("../../message/type").IHiddenAssistantMessage | import("../../message/type").IHiddenGuideMessage | import("../../message/type").IHiddenMessage | import("../../message/type").IHiddenSystemMessage | import("../../message/type").IHiddenUserMessage | import("../../message/type").IInfoMessage | import("../../message/type").IPauseMessage | import("../../message/type").IPlaceholderMessage | import("../../message/type").IReasoningMessage | import("../../message/type").ISystemMessage | import("../../message/type").ITemplateAssistantMessage | import("../../message/type").ITemplateGuideMessage | import("../../message/type").ITemplateHiddenMessage | import("../../message/type").ITemplateSystemMessage | import("../../message/type").ITemplateUserMessage | import("../../message/type").IToolMessage | import("../../message/type").IUserMessage>;
|
|
24
|
+
modifyMessage: (data: IMessage, config?: IRequestConfig) => Promise<import("../../message/type").IActivityMessage | import("../../message/type").IAssistantMessage | import("../../message/type").IDeveloperMessage | import("../../message/type").IInterruptMessage | import("../../message/type").IGuideMessage | import("../../message/type").IHiddenAssistantMessage | import("../../message/type").IHiddenGuideMessage | import("../../message/type").IHiddenMessage | import("../../message/type").IHiddenSystemMessage | import("../../message/type").IHiddenUserMessage | import("../../message/type").IInfoMessage | import("../../message/type").IPauseMessage | import("../../message/type").IPlaceholderMessage | import("../../message/type").IReasoningMessage | import("../../message/type").ISystemMessage | import("../../message/type").ITemplateAssistantMessage | import("../../message/type").ITemplateGuideMessage | import("../../message/type").ITemplateHiddenMessage | import("../../message/type").ITemplateSystemMessage | import("../../message/type").ITemplateUserMessage | import("../../message/type").IToolMessage | import("../../message/type").IUserMessage>;
|
|
25
25
|
deleteMessage: (id: string, config?: IRequestConfig) => Promise<IMessage>;
|
|
26
26
|
batchDeleteMessages: (ids: string[], config?: IRequestConfig) => Promise<number>;
|
|
27
27
|
shareMessages: (sessionCode: string, contentIds: string[], expiredAt?: number, config?: IRequestConfig) => Promise<IShareMessagesResponse>;
|
|
28
28
|
stopChat: (sessionCode: string, config?: IRequestConfig) => Promise<void>;
|
|
29
29
|
getFlowAgentTaskInfo: (taskId: number, config?: IRequestConfig) => Promise<unknown>;
|
|
30
30
|
getFlowAgentTaskNodeInfo: (taskId: number, nodeId: string, config?: IRequestConfig) => Promise<IFlowAgentTaskNodeInfo>;
|
|
31
|
+
retryFlowAgentTaskNode: (sessionCode: string, nodeId: string, taskId: number, config?: IRequestConfig) => Promise<void>;
|
|
32
|
+
skipFlowAgentTaskNode: (sessionCode: string, nodeId: string, taskId: number, config?: IRequestConfig) => Promise<void>;
|
|
33
|
+
userOperation: (sessionCode: string, operation: UserOperation, payload: IUserOperationPayload, config?: IRequestConfig) => Promise<void>;
|
|
31
34
|
};
|
|
@@ -86,6 +86,20 @@ import { transferMessage2MessageApi, transferMessageApi2Message } from '../trans
|
|
|
86
86
|
const getFlowAgentTaskInfo = (taskId, config)=>fetchClient.get(`flow_agent/${taskId}/task_info/`, undefined, config);
|
|
87
87
|
// 获取流程引擎任务节点详情
|
|
88
88
|
const getFlowAgentTaskNodeInfo = (taskId, nodeId, config)=>fetchClient.get(`flow_agent/${taskId}/task_node_info/${nodeId}/`, undefined, config);
|
|
89
|
+
// 重试流程引擎任务节点
|
|
90
|
+
const retryFlowAgentTaskNode = (sessionCode, nodeId, taskId, config)=>fetchClient.post(`flow_agent/${sessionCode}/node/${nodeId}/retry/`, {
|
|
91
|
+
task_id: taskId
|
|
92
|
+
}, config);
|
|
93
|
+
// 跳过流程引擎任务节点
|
|
94
|
+
const skipFlowAgentTaskNode = (sessionCode, nodeId, taskId, config)=>fetchClient.post(`flow_agent/${sessionCode}/node/${nodeId}/skip/`, {
|
|
95
|
+
task_id: taskId
|
|
96
|
+
}, config);
|
|
97
|
+
// 用户操作
|
|
98
|
+
const userOperation = (sessionCode, operation, payload, config)=>fetchClient.post(`user_operation/`, {
|
|
99
|
+
session_code: sessionCode,
|
|
100
|
+
operation,
|
|
101
|
+
payload
|
|
102
|
+
}, config);
|
|
89
103
|
return {
|
|
90
104
|
getMessages,
|
|
91
105
|
plusMessage,
|
|
@@ -95,6 +109,9 @@ import { transferMessage2MessageApi, transferMessageApi2Message } from '../trans
|
|
|
95
109
|
shareMessages,
|
|
96
110
|
stopChat,
|
|
97
111
|
getFlowAgentTaskInfo,
|
|
98
|
-
getFlowAgentTaskNodeInfo
|
|
112
|
+
getFlowAgentTaskNodeInfo,
|
|
113
|
+
retryFlowAgentTaskNode,
|
|
114
|
+
skipFlowAgentTaskNode,
|
|
115
|
+
userOperation
|
|
99
116
|
};
|
|
100
117
|
};
|
|
@@ -25,4 +25,5 @@ export declare const useSession: (fetchClient: FetchClient) => {
|
|
|
25
25
|
uploadFile: (sessionCode: string, file: File, config?: IRequestConfig) => Promise<{
|
|
26
26
|
download_url?: string;
|
|
27
27
|
}>;
|
|
28
|
+
isResumeSession: (sessionCode: string, config?: IRequestConfig) => Promise<boolean>;
|
|
28
29
|
};
|
|
@@ -75,6 +75,27 @@ function _object_spread_props(target, source) {
|
|
|
75
75
|
return target;
|
|
76
76
|
}
|
|
77
77
|
import { transferSession2SessionApi, transferSessionApi2Session, transferSessionFeedback2SessionFeedbackApi, transferSessionFeedbackApi2SessionFeedback } from '../transform/session.ts.js';
|
|
78
|
+
import { resolveRequestValue } from '../fetch/index.ts.js';
|
|
79
|
+
/** 上传接口传输用文件名前缀,与原始展示名解耦 */ const UPLOAD_FILE_NAME_PREFIX = 'upload_file';
|
|
80
|
+
/** 从原始文件名提取 ASCII 安全扩展名,用于保留文件类型 */ const getSafeFileExtension = (fileName)=>{
|
|
81
|
+
const extension = fileName.split('.').pop();
|
|
82
|
+
if (!extension || extension === fileName) {
|
|
83
|
+
return '';
|
|
84
|
+
}
|
|
85
|
+
const safeExtension = extension.replace(/[^A-Za-z0-9]/g, '').slice(0, 20).toLowerCase();
|
|
86
|
+
return safeExtension ? `.${safeExtension}` : '';
|
|
87
|
+
};
|
|
88
|
+
/**
|
|
89
|
+
* 生成上传接口使用的 ASCII 安全文件名。
|
|
90
|
+
* 中文等非 ASCII 原名不能用于 URL path / Content-Disposition(浏览器与后端均可能编码失败),
|
|
91
|
+
* 原始 file.name 仍保留在 File 对象上,由 chat-x 发送消息时作为展示名使用。
|
|
92
|
+
*/ const buildSafeUploadFileName = (file)=>{
|
|
93
|
+
const suffix = `${Date.now()}_${Math.random().toString(36).slice(2, 8)}`;
|
|
94
|
+
return `${UPLOAD_FILE_NAME_PREFIX}_${suffix}${getSafeFileExtension(file.name)}`;
|
|
95
|
+
};
|
|
96
|
+
/** Content-Disposition 仅允许 ASCII,须与 upload path 中的 file_name 一致 */ const buildUploadContentDisposition = (fileName)=>{
|
|
97
|
+
return `attachment; filename="${fileName}"`;
|
|
98
|
+
};
|
|
78
99
|
/**
|
|
79
100
|
* session 相关 http 接口
|
|
80
101
|
* @param fetchClient - 请求客户端
|
|
@@ -104,15 +125,20 @@ import { transferSession2SessionApi, transferSessionApi2Session, transferSession
|
|
|
104
125
|
}, config);
|
|
105
126
|
// 会话重命名
|
|
106
127
|
const renameSession = (sessionCode, config)=>fetchClient.post(`session/${sessionCode}/ai_rename/`, undefined, config).then((res)=>transferSessionApi2Session(res));
|
|
107
|
-
//
|
|
128
|
+
// 上传文件到会话(传输名与展示名分离,见 buildSafeUploadFileName)
|
|
108
129
|
const uploadFile = (sessionCode, file, config)=>{
|
|
109
|
-
const
|
|
130
|
+
const safeFileName = buildSafeUploadFileName(file);
|
|
131
|
+
const fileName = encodeURIComponent(safeFileName);
|
|
132
|
+
var _resolveRequestValue;
|
|
133
|
+
const headers = (_resolveRequestValue = resolveRequestValue(config === null || config === void 0 ? void 0 : config.headers)) !== null && _resolveRequestValue !== void 0 ? _resolveRequestValue : {};
|
|
110
134
|
return file.arrayBuffer().then((content)=>fetchClient.post(`session/${sessionCode}/upload/${fileName}/`, content, _object_spread_props(_object_spread({}, config), {
|
|
111
|
-
headers: {
|
|
112
|
-
'Content-Disposition':
|
|
113
|
-
}
|
|
135
|
+
headers: _object_spread_props(_object_spread({}, headers), {
|
|
136
|
+
'Content-Disposition': buildUploadContentDisposition(safeFileName)
|
|
137
|
+
})
|
|
114
138
|
})));
|
|
115
139
|
};
|
|
140
|
+
// 轮询接口,判断是否可以继续聊天
|
|
141
|
+
const isResumeSession = (sessionCode, config)=>fetchClient.get(`session/${sessionCode}/is_resume/`, undefined, config);
|
|
116
142
|
return {
|
|
117
143
|
clearSession,
|
|
118
144
|
getSessions,
|
|
@@ -124,6 +150,7 @@ import { transferSession2SessionApi, transferSessionApi2Session, transferSession
|
|
|
124
150
|
postSessionFeedback,
|
|
125
151
|
getSessionFeedbackReasons,
|
|
126
152
|
renameSession,
|
|
127
|
-
uploadFile
|
|
153
|
+
uploadFile,
|
|
154
|
+
isResumeSession
|
|
128
155
|
};
|
|
129
156
|
};
|
|
@@ -337,6 +337,11 @@ import { ActivityType, MessageRole, MessageType } from '../../message/type.ts.js
|
|
|
337
337
|
});
|
|
338
338
|
return result;
|
|
339
339
|
}
|
|
340
|
+
case MessageRole.Interrupt:
|
|
341
|
+
{
|
|
342
|
+
const result = _object_spread({}, baseMessage, data);
|
|
343
|
+
return result;
|
|
344
|
+
}
|
|
340
345
|
}
|
|
341
346
|
};
|
|
342
347
|
/**
|
|
@@ -601,5 +606,10 @@ import { ActivityType, MessageRole, MessageType } from '../../message/type.ts.js
|
|
|
601
606
|
});
|
|
602
607
|
return result;
|
|
603
608
|
}
|
|
609
|
+
case MessageRole.Interrupt:
|
|
610
|
+
{
|
|
611
|
+
const result = _object_spread({}, baseMessage, data);
|
|
612
|
+
return result;
|
|
613
|
+
}
|
|
604
614
|
}
|
|
605
615
|
};
|