paul-ai-assistant 1.0.6 → 1.0.8
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/1.async.js +1 -1
- package/dist/1387.async.js +1 -1
- package/dist/1424.async.js +258 -0
- package/dist/1481.async.js +1 -1
- package/dist/1548.async.js +1 -1
- package/dist/1805.async.js +1150 -0
- package/dist/1815.async.js +2 -2
- package/dist/1819.async.js +1 -1
- package/dist/1851.async.js +1 -1
- package/dist/2369.async.js +263 -0
- package/dist/2491.async.js +2 -2
- package/dist/2678.async.js +1 -1
- package/dist/2856.async.js +1 -1
- package/dist/295.async.js +1 -1
- package/dist/3098.async.js +1 -1
- package/dist/3138.async.js +1 -1
- package/dist/34.async.js +6 -6
- package/dist/3472.async.js +1 -1
- package/dist/3614.async.js +1 -1
- package/dist/3959.async.js +1 -1
- package/dist/404.html +0 -1
- package/dist/4445.async.js +18 -0
- package/dist/4484.async.js +1 -1
- package/dist/4498.async.js +1 -1
- package/dist/4911.async.js +1 -1
- package/dist/4927.async.js +1 -1
- package/dist/5067.async.js +1 -1
- package/dist/5588.async.js +1 -1
- package/dist/5754.async.js +1 -1
- package/dist/6355.async.js +4 -4
- package/dist/6662.async.js +1 -1
- package/dist/6680.async.js +13 -13
- package/dist/6690.async.js +5 -5
- package/dist/6949.async.js +1 -0
- package/dist/7267.async.js +3 -3
- package/dist/7329.async.js +1 -1
- package/dist/7718.async.js +6 -6
- package/dist/7762.async.js +1 -1
- package/dist/7787.async.js +5 -5
- package/dist/7929.async.js +1 -1
- package/dist/804.async.js +1 -0
- package/dist/8164.async.js +1 -1
- package/dist/834.async.js +1 -1
- package/dist/8456.async.js +1 -1
- package/dist/8542.async.js +1 -1
- package/dist/8749.async.js +1 -1
- package/dist/8914.async.js +10 -10
- package/dist/9570.async.js +1 -1
- package/dist/components/llm-trace-v2/index.html +0 -1
- package/dist/components/llm-trace-v3/index.html +0 -1
- package/dist/components/llm-trace-v3-advanced/index.html +0 -1
- package/dist/components/llm-trace-v3-examples/index.html +0 -1
- package/dist/components/llm-trace-v3-visual-demos/index.html +0 -1
- package/dist/demos.async.js +9 -383
- package/dist/demos__index.md.async.js +1 -1
- package/dist/demos__markdown-latex-mermaid__index.md.async.js +1 -1
- package/dist/demos__toolChatType__index.md.async.js +6 -1
- package/dist/docs/index.html +0 -1
- package/dist/docs__components__llm-trace-v2.md.async.js +1 -1
- package/dist/docs__components__llm-trace-v3-advanced.md.async.js +1 -1
- package/dist/docs__components__llm-trace-v3-examples.md.async.js +1 -1
- package/dist/docs__components__llm-trace-v3-visual-demos.md.async.js +1 -1
- package/dist/docs__components__llm-trace-v3.md.async.js +1 -1
- package/dist/docs__docs__index.md.async.js +1 -1
- package/dist/docs__index.md.async.js +1 -1
- package/dist/dumi__tmp-production__dumi__theme__ContextWrapper.async.js +1 -1
- package/dist/index.html +0 -1
- package/dist/markdown-latex-mermaid/index.html +0 -1
- package/dist/meta__demos.async.js +16538 -4968
- package/dist/meta__docs.async.js +28 -29
- package/dist/nm__dumi__dist__client__pages__404.async.js +2 -2
- package/dist/nm__dumi__dist__client__pages__Demo__index.async.js +1 -1
- package/dist/nm__dumi__theme-default__layouts__DocLayout__index.async.js +1 -1
- package/dist/preload_helper.js +1 -1
- package/dist/tool-chat-type/index.html +0 -1
- package/dist/umi.js +63 -63
- package/dist/~demos/:id/index.html +0 -1
- package/dist/~demos/demos-markdown-latex-mermaid-demo-markdown-latex-mermaid/index.html +0 -1
- package/dist/~demos/demos-tool-chat-type-demo-agentschemaformdemo/index.html +0 -1
- package/dist/~demos/demos-tool-chat-type-demo-assistant-drawer/index.html +0 -1
- package/dist/~demos/demos-tool-chat-type-demo-chat-input-demo/index.html +0 -1
- package/dist/~demos/demos-tool-chat-type-demo-chat-list-demo/index.html +0 -1
- package/dist/~demos/demos-tool-chat-type-demo-chat-scenario-demo/index.html +0 -1
- package/dist/~demos/{demos-customer-service-typewriter-demo-customer-service-demo → demos-tool-chat-type-demo-default-demo}/index.html +0 -1
- package/dist/~demos/demos-tool-chat-type-demo-schema-input/index.html +0 -1
- package/dist/~demos/demos-tool-chat-type-demo-toolchattype/index.html +0 -1
- package/dist/~demos/docs-components-llm-trace-v-2-demo-0/index.html +0 -1
- package/dist/~demos/docs-components-llm-trace-v-2-demo-1/index.html +0 -1
- package/dist/~demos/docs-components-llm-trace-v-2-demo-2/index.html +0 -1
- package/dist/~demos/docs-components-llm-trace-v-2-demo-3/index.html +0 -1
- package/dist/~demos/docs-components-llm-trace-v-2-demo-4/index.html +0 -1
- package/dist/~demos/docs-components-llm-trace-v-3-advanced-demo-0/index.html +0 -1
- package/dist/~demos/docs-components-llm-trace-v-3-advanced-demo-1/index.html +0 -1
- package/dist/~demos/docs-components-llm-trace-v-3-advanced-demo-2/index.html +0 -1
- package/dist/~demos/docs-components-llm-trace-v-3-advanced-demo-3/index.html +0 -1
- package/dist/~demos/docs-components-llm-trace-v-3-demo-0/index.html +0 -1
- package/dist/~demos/docs-components-llm-trace-v-3-demo-1/index.html +0 -1
- package/dist/~demos/docs-components-llm-trace-v-3-demo-2/index.html +0 -1
- package/dist/~demos/docs-components-llm-trace-v-3-demo-3/index.html +0 -1
- package/dist/~demos/docs-components-llm-trace-v-3-examples-demo-0/index.html +0 -1
- package/dist/~demos/docs-components-llm-trace-v-3-examples-demo-1/index.html +0 -1
- package/dist/~demos/docs-components-llm-trace-v-3-examples-demo-2/index.html +0 -1
- package/dist/~demos/docs-components-llm-trace-v-3-examples-demo-3/index.html +0 -1
- package/dist/~demos/docs-components-llm-trace-v-3-examples-demo-4/index.html +0 -1
- package/dist/~demos/docs-components-llm-trace-v-3-visual-demos-demo-0/index.html +0 -1
- package/dist/~demos/docs-components-llm-trace-v-3-visual-demos-demo-1/index.html +0 -1
- package/dist/~demos/docs-components-llm-trace-v-3-visual-demos-demo-2/index.html +0 -1
- package/dist/~demos/docs-components-llm-trace-v-3-visual-demos-demo-3/index.html +0 -1
- package/dist/~demos/docs-components-llm-trace-v-3-visual-demos-demo-4/index.html +0 -1
- package/dist/~demos/docs-components-llm-trace-v-3-visual-demos-demo-5/index.html +0 -1
- package/dist/~demos/docs-components-llm-trace-v-3-visual-demos-demo-6/index.html +0 -1
- package/dist/~demos/docs-components-llm-trace-v-3-visual-demos-demo-7/index.html +0 -1
- package/es/AssistantChat/AssistantChatCard/OperationCard/AigcTipsRender/index.js +1 -1
- package/es/context/index.js +175 -42
- package/es/hooks/index.js +1 -0
- package/es/hooks/useAutoSend.js +95 -0
- package/es/index.js +8 -1
- package/es/service/conversation.js +74 -0
- package/es/service/index.js +1 -0
- package/es/utils/apushAssistant.js +21 -12
- package/package.json +3 -1
- package/dist/1013.async.js +0 -1
- package/dist/123.async.js +0 -258
- package/dist/6254.async.js +0 -30286
- package/dist/7084.async.js +0 -247
- package/dist/9725.async.js +0 -18
- package/dist/customer-service-typewriter/index.html +0 -44
- package/dist/demos__customerServiceTypewriter__index.md.async.js +0 -2
- package/dist/~demos/demos-customer-service-typewriter-demo-smart-scroll-demo/index.html +0 -44
- package/es/utils/im.js +0 -386
package/es/context/index.js
CHANGED
|
@@ -4,14 +4,14 @@ import _asyncToGenerator from "@babel/runtime/helpers/esm/asyncToGenerator";
|
|
|
4
4
|
import _objectSpread from "@babel/runtime/helpers/esm/objectSpread2";
|
|
5
5
|
import _slicedToArray from "@babel/runtime/helpers/esm/slicedToArray";
|
|
6
6
|
import _objectWithoutProperties from "@babel/runtime/helpers/esm/objectWithoutProperties";
|
|
7
|
-
var _excluded = ["children", "bizId", "bizDomain", "locateAfterSingleMessageUpdate", "dataSource", "interruptLlmMessageScroll", "toolConfig", "placeholder", "messageCardWidth", "enableWsConnectCallback", "onSend", "assistantChat", "log", "logTrace", "messagesMaxLength", "mode", "activeToken", "onStopMessage", "imConnectCallback", "chatTitle", "isAssistant", "isThirdEmbed", "getApiHost"],
|
|
7
|
+
var _excluded = ["children", "bizId", "bizDomain", "locateAfterSingleMessageUpdate", "dataSource", "interruptLlmMessageScroll", "toolConfig", "placeholder", "messageCardWidth", "enableWsConnectCallback", "onSend", "assistantChat", "log", "logTrace", "messagesMaxLength", "mode", "activeToken", "onStopMessage", "imConnectCallback", "chatTitle", "isAssistant", "isThirdEmbed", "getApiHost", "subjectId", "autoConnect", "autoSendMessage", "onConnectionReady", "onSendSuccess", "onSendError"],
|
|
8
8
|
_excluded2 = ["chatType", "onSuccessCallback"];
|
|
9
9
|
import React, { createContext, useEffect, useRef, useState } from 'react';
|
|
10
10
|
import { event } from "../utils/event";
|
|
11
11
|
import { getWorkId } from "../utils/helpers";
|
|
12
12
|
import { FEATURE_MODE_TYPE_KEY } from "../components/ModelSelect/const";
|
|
13
13
|
import { ASSIST_CHAT_EVENT } from "../constants/assistChatEvent";
|
|
14
|
-
import { CHAT_TYPE, ChatTypeEnum, COPILOT_TOOL_TYPE_ENUM, initPlaceholder } from "../constants/common";
|
|
14
|
+
import { CHAT_TYPE, ChatTypeEnum, COPILOT_TOOL_TYPE_ENUM, initPlaceholder, REQUEST_SUCCESS_CODE } from "../constants/common";
|
|
15
15
|
import { LOG_TRACE_TYPE_ENUMS } from "../constants/logTrace";
|
|
16
16
|
import { ASSISTANT_APUSH_MESSAGE_TYPE_ENUMS, disconnectAssistantWs, startAssistantWs } from "../utils/apushAssistant";
|
|
17
17
|
import { triggerPlugin } from "../utils/clientPlugin";
|
|
@@ -21,17 +21,53 @@ import { AesCustomLogEventEnum, setAesCustomEvent } from "../utils/log";
|
|
|
21
21
|
import { updateMessageList, updateMessageValue, updateSingleMessage } from "./utils/messages";
|
|
22
22
|
import { clickSendMessage, sendMessageRequest, stopMessage, successCallback } from "./utils/send";
|
|
23
23
|
import { clearContext, initTools, searchTools } from "./utils/tool";
|
|
24
|
+
import { getConversationConnection } from "../service/conversation";
|
|
25
|
+
import { useAutoSend } from "../hooks/useAutoSend";
|
|
26
|
+
|
|
27
|
+
// ======================================= URL 参数工具函数 =======================================
|
|
28
|
+
var SUBJECT_ID_URL_PARAM = 'subjectId';
|
|
29
|
+
|
|
30
|
+
/**
|
|
31
|
+
* 从 URL 中读取 subjectId 参数
|
|
32
|
+
*/
|
|
33
|
+
var getSubjectIdFromUrl = function getSubjectIdFromUrl() {
|
|
34
|
+
if (typeof window === 'undefined') return null;
|
|
35
|
+
var urlParams = new URLSearchParams(window.location.search);
|
|
36
|
+
return urlParams.get(SUBJECT_ID_URL_PARAM);
|
|
37
|
+
};
|
|
38
|
+
|
|
39
|
+
/**
|
|
40
|
+
* 将 subjectId 写入 URL(使用 history.pushState 产生浏览历史)
|
|
41
|
+
* 只有当 URL 中的 subjectId 与传入的不同时才更新
|
|
42
|
+
*/
|
|
43
|
+
var updateUrlWithSubjectId = function updateUrlWithSubjectId(subjectId) {
|
|
44
|
+
if (typeof window === 'undefined') return;
|
|
45
|
+
|
|
46
|
+
// 获取当前 URL 中的 subjectId
|
|
47
|
+
var currentSubjectId = getSubjectIdFromUrl();
|
|
48
|
+
var newSubjectId = String(subjectId);
|
|
49
|
+
|
|
50
|
+
// 如果 subjectId 没有变化,不更新 URL
|
|
51
|
+
if (currentSubjectId === newSubjectId) {
|
|
52
|
+
return;
|
|
53
|
+
}
|
|
54
|
+
var url = new URL(window.location.href);
|
|
55
|
+
url.searchParams.set(SUBJECT_ID_URL_PARAM, newSubjectId);
|
|
56
|
+
window.history.pushState({
|
|
57
|
+
subjectId: newSubjectId
|
|
58
|
+
}, '', url.toString());
|
|
59
|
+
};
|
|
24
60
|
export var AssistantChatContext = /*#__PURE__*/createContext({
|
|
25
61
|
bizId: '',
|
|
26
|
-
bizDomain: '
|
|
62
|
+
bizDomain: 'CHAT',
|
|
27
63
|
messagesLoading: true
|
|
28
64
|
});
|
|
29
65
|
var AssistantChatProvider = function AssistantChatProvider() {
|
|
30
66
|
var props = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
|
|
31
67
|
var children = props.children,
|
|
32
|
-
|
|
68
|
+
propBizId = props.bizId,
|
|
33
69
|
_props$bizDomain = props.bizDomain,
|
|
34
|
-
bizDomain = _props$bizDomain === void 0 ? '
|
|
70
|
+
bizDomain = _props$bizDomain === void 0 ? 'CHAT' : _props$bizDomain,
|
|
35
71
|
_props$locateAfterSin = props.locateAfterSingleMessageUpdate,
|
|
36
72
|
locateAfterSingleMessageUpdate = _props$locateAfterSin === void 0 ? true : _props$locateAfterSin,
|
|
37
73
|
dataSource = props.dataSource,
|
|
@@ -45,7 +81,7 @@ var AssistantChatProvider = function AssistantChatProvider() {
|
|
|
45
81
|
_props$enableWsConnec = props.enableWsConnectCallback,
|
|
46
82
|
enableWsConnectCallback = _props$enableWsConnec === void 0 ? false : _props$enableWsConnec,
|
|
47
83
|
onSend = props.onSend,
|
|
48
|
-
|
|
84
|
+
propAssistantChat = props.assistantChat,
|
|
49
85
|
_props$log = props.log,
|
|
50
86
|
log = _props$log === void 0 ? setAesCustomEvent : _props$log,
|
|
51
87
|
logTrace = props.logTrace,
|
|
@@ -61,44 +97,63 @@ var AssistantChatProvider = function AssistantChatProvider() {
|
|
|
61
97
|
isAssistant = _props$isAssistant === void 0 ? false : _props$isAssistant,
|
|
62
98
|
isThirdEmbed = props.isThirdEmbed,
|
|
63
99
|
getApiHost = props.getApiHost,
|
|
100
|
+
subjectId = props.subjectId,
|
|
101
|
+
_props$autoConnect = props.autoConnect,
|
|
102
|
+
autoConnect = _props$autoConnect === void 0 ? true : _props$autoConnect,
|
|
103
|
+
autoSendMessage = props.autoSendMessage,
|
|
104
|
+
onConnectionReady = props.onConnectionReady,
|
|
105
|
+
onSendSuccess = props.onSendSuccess,
|
|
106
|
+
onSendError = props.onSendError,
|
|
64
107
|
otherProps = _objectWithoutProperties(props, _excluded);
|
|
108
|
+
|
|
109
|
+
// 内部维护的 bizId,支持自动获取会话时使用
|
|
110
|
+
var _useState = useState(propBizId),
|
|
111
|
+
_useState2 = _slicedToArray(_useState, 2),
|
|
112
|
+
internalBizId = _useState2[0],
|
|
113
|
+
setInternalBizId = _useState2[1];
|
|
114
|
+
// 实际使用的 bizId:优先使用外部传入的,其次使用内部状态
|
|
115
|
+
var bizId = propBizId || internalBizId;
|
|
116
|
+
// 标记是否已自动发送过消息
|
|
117
|
+
var autoSendDoneRef = useRef(false);
|
|
118
|
+
// 标记是否正在获取会话连接
|
|
119
|
+
var isConnectingRef = useRef(false);
|
|
65
120
|
// 是否受控数据
|
|
66
121
|
var hasDefaultDataSource = dataSource && Array.isArray(dataSource);
|
|
67
122
|
// 消息流
|
|
68
|
-
var
|
|
69
|
-
_useState2 = _slicedToArray(_useState, 2),
|
|
70
|
-
messages = _useState2[0],
|
|
71
|
-
setMessageList = _useState2[1];
|
|
72
|
-
var _useState3 = useState(true),
|
|
123
|
+
var _useState3 = useState([]),
|
|
73
124
|
_useState4 = _slicedToArray(_useState3, 2),
|
|
74
|
-
|
|
75
|
-
|
|
125
|
+
messages = _useState4[0],
|
|
126
|
+
setMessageList = _useState4[1];
|
|
127
|
+
var _useState5 = useState(true),
|
|
128
|
+
_useState6 = _slicedToArray(_useState5, 2),
|
|
129
|
+
messagesLoading = _useState6[0],
|
|
130
|
+
setMessagesLoading = _useState6[1];
|
|
76
131
|
|
|
77
132
|
// 工具展示List
|
|
78
|
-
var
|
|
79
|
-
_useState6 = _slicedToArray(_useState5, 2),
|
|
80
|
-
toolShowList = _useState6[0],
|
|
81
|
-
setToolShowList = _useState6[1];
|
|
82
|
-
var _useState7 = useState(false),
|
|
133
|
+
var _useState7 = useState([]),
|
|
83
134
|
_useState8 = _slicedToArray(_useState7, 2),
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
// 分享模式相关状态
|
|
135
|
+
toolShowList = _useState8[0],
|
|
136
|
+
setToolShowList = _useState8[1];
|
|
88
137
|
var _useState9 = useState(false),
|
|
89
138
|
_useState10 = _slicedToArray(_useState9, 2),
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
139
|
+
showAddTag = _useState10[0],
|
|
140
|
+
setShowAddTag = _useState10[1];
|
|
141
|
+
|
|
142
|
+
// 分享模式相关状态
|
|
143
|
+
var _useState11 = useState(false),
|
|
93
144
|
_useState12 = _slicedToArray(_useState11, 2),
|
|
94
|
-
|
|
95
|
-
|
|
145
|
+
shareMode = _useState12[0],
|
|
146
|
+
setShareMode = _useState12[1];
|
|
147
|
+
var _useState13 = useState([]),
|
|
148
|
+
_useState14 = _slicedToArray(_useState13, 2),
|
|
149
|
+
selectedMessages = _useState14[0],
|
|
150
|
+
setSelectedMessages = _useState14[1];
|
|
96
151
|
|
|
97
152
|
// WebSocket 连接状态
|
|
98
|
-
var
|
|
99
|
-
|
|
100
|
-
wsConnectionStatus =
|
|
101
|
-
setWsConnectionStatus =
|
|
153
|
+
var _useState15 = useState(null),
|
|
154
|
+
_useState16 = _slicedToArray(_useState15, 2),
|
|
155
|
+
wsConnectionStatus = _useState16[0],
|
|
156
|
+
setWsConnectionStatus = _useState16[1];
|
|
102
157
|
var chatAppRef = useRef(null);
|
|
103
158
|
var chatInputRef = useRef(null);
|
|
104
159
|
var messageListRef = useRef([]);
|
|
@@ -109,21 +164,21 @@ var AssistantChatProvider = function AssistantChatProvider() {
|
|
|
109
164
|
// 请求版本号,用于忽略过时的 API 响应
|
|
110
165
|
var requestVersionRef = useRef(0);
|
|
111
166
|
var inputFormRef = useRef(null);
|
|
112
|
-
var
|
|
113
|
-
|
|
114
|
-
inputFormSchema =
|
|
115
|
-
setInputFormSchema =
|
|
167
|
+
var _useState17 = useState(null),
|
|
168
|
+
_useState18 = _slicedToArray(_useState17, 2),
|
|
169
|
+
inputFormSchema = _useState18[0],
|
|
170
|
+
setInputFormSchema = _useState18[1];
|
|
116
171
|
// 当前消息id
|
|
117
172
|
var currentUpdateMessageIdRef = useRef(null);
|
|
118
173
|
// 当前消息id index
|
|
119
174
|
var currentUpdateMessageIndexRef = useRef(-1);
|
|
120
|
-
var
|
|
175
|
+
var _useState19 = useState({
|
|
121
176
|
thinkingMode: FEATURE_MODE_TYPE_KEY.AUTO,
|
|
122
177
|
webSearchMode: FEATURE_MODE_TYPE_KEY.AUTO
|
|
123
178
|
}),
|
|
124
|
-
|
|
125
|
-
featureConfig =
|
|
126
|
-
setFeatureConfig =
|
|
179
|
+
_useState20 = _slicedToArray(_useState19, 2),
|
|
180
|
+
featureConfig = _useState20[0],
|
|
181
|
+
setFeatureConfig = _useState20[1];
|
|
127
182
|
useEffect(function () {
|
|
128
183
|
if (hasDefaultDataSource) {
|
|
129
184
|
var _chatAppRef$current;
|
|
@@ -140,6 +195,68 @@ var AssistantChatProvider = function AssistantChatProvider() {
|
|
|
140
195
|
}
|
|
141
196
|
}, [dataSource, hasDefaultDataSource]);
|
|
142
197
|
|
|
198
|
+
// ======================================= 开箱即用:自动获取会话连接 =======================================
|
|
199
|
+
/**
|
|
200
|
+
* 自动获取会话连接逻辑
|
|
201
|
+
* 当 autoConnect 为 true 且没有传入 bizId 时,自动调用 API 获取会话连接
|
|
202
|
+
* 只在 CHAT 场景下生效
|
|
203
|
+
*
|
|
204
|
+
* 优先级:propBizId > URL参数中的subjectId > props中的subjectId > 自动创建新会话
|
|
205
|
+
*/
|
|
206
|
+
useEffect(function () {
|
|
207
|
+
// 只有在 CHAT 模式下才启用自动连接
|
|
208
|
+
var isChatMode = mode === ChatTypeEnum.Chat || bizDomain === 'CHAT';
|
|
209
|
+
// 检查是否需要自动连接:启用自动连接 && 没有外部传入的 bizId && 是 CHAT 模式 && 不在连接中
|
|
210
|
+
var shouldAutoConnect = autoConnect && !propBizId && isChatMode && !isConnectingRef.current;
|
|
211
|
+
if (shouldAutoConnect) {
|
|
212
|
+
isConnectingRef.current = true;
|
|
213
|
+
|
|
214
|
+
// 优先从 URL 读取 subjectId,其次使用 props 中的 subjectId
|
|
215
|
+
var urlSubjectId = getSubjectIdFromUrl();
|
|
216
|
+
var effectiveSubjectId = urlSubjectId || subjectId;
|
|
217
|
+
getConversationConnection({
|
|
218
|
+
bizDomain: 'CHAT',
|
|
219
|
+
subjectId: effectiveSubjectId
|
|
220
|
+
}).then(function (res) {
|
|
221
|
+
if ((res === null || res === void 0 ? void 0 : res.code) === REQUEST_SUCCESS_CODE) {
|
|
222
|
+
var connectionInfo = res.data;
|
|
223
|
+
// 更新内部 bizId
|
|
224
|
+
setInternalBizId(connectionInfo.subjectId);
|
|
225
|
+
// 将 subjectId 持久化到 URL
|
|
226
|
+
updateUrlWithSubjectId(connectionInfo.subjectId);
|
|
227
|
+
// 触发回调
|
|
228
|
+
onConnectionReady === null || onConnectionReady === void 0 || onConnectionReady(connectionInfo);
|
|
229
|
+
} else {
|
|
230
|
+
console.warn('自动获取会话连接失败:', res === null || res === void 0 ? void 0 : res.message);
|
|
231
|
+
}
|
|
232
|
+
}).catch(function (error) {
|
|
233
|
+
console.error('自动获取会话连接出错:', error);
|
|
234
|
+
}).finally(function () {
|
|
235
|
+
isConnectingRef.current = false;
|
|
236
|
+
});
|
|
237
|
+
}
|
|
238
|
+
}, [autoConnect, propBizId, subjectId, mode, bizDomain]);
|
|
239
|
+
|
|
240
|
+
// 当 propBizId 变化时,同步更新内部状态
|
|
241
|
+
useEffect(function () {
|
|
242
|
+
if (propBizId) {
|
|
243
|
+
setInternalBizId(propBizId);
|
|
244
|
+
}
|
|
245
|
+
}, [propBizId]);
|
|
246
|
+
|
|
247
|
+
// ======================================= 内置 onSend 逻辑 =======================================
|
|
248
|
+
/**
|
|
249
|
+
* 使用 useAutoSend Hook 获取有效的 onSend 方法
|
|
250
|
+
* 如果用户传入了 onSend,使用用户的;否则使用内置逻辑
|
|
251
|
+
*/
|
|
252
|
+
var effectiveOnSend = useAutoSend({
|
|
253
|
+
bizId: bizId,
|
|
254
|
+
bizDomain: bizDomain,
|
|
255
|
+
onSend: onSend,
|
|
256
|
+
onSendSuccess: onSendSuccess,
|
|
257
|
+
onSendError: onSendError
|
|
258
|
+
});
|
|
259
|
+
|
|
143
260
|
// ======================================= log埋点 =======================================
|
|
144
261
|
/**
|
|
145
262
|
* 辅助交互通用监控日志上报
|
|
@@ -237,6 +354,19 @@ var AssistantChatProvider = function AssistantChatProvider() {
|
|
|
237
354
|
if (imConnectCallback && typeof imConnectCallback === 'function') {
|
|
238
355
|
imConnectCallback();
|
|
239
356
|
}
|
|
357
|
+
// 开箱即用:自动发送消息
|
|
358
|
+
if (autoSendMessage && !autoSendDoneRef.current) {
|
|
359
|
+
autoSendDoneRef.current = true;
|
|
360
|
+
// 延迟一下,确保消息列表已加载
|
|
361
|
+
setTimeout(function () {
|
|
362
|
+
effectiveOnSend === null || effectiveOnSend === void 0 || effectiveOnSend({
|
|
363
|
+
params: {
|
|
364
|
+
query: autoSendMessage
|
|
365
|
+
},
|
|
366
|
+
featureConfig: featureConfig
|
|
367
|
+
}, function () {});
|
|
368
|
+
}, 100);
|
|
369
|
+
}
|
|
240
370
|
},
|
|
241
371
|
log: log,
|
|
242
372
|
// 连接状态变化回调
|
|
@@ -395,7 +525,7 @@ var AssistantChatProvider = function AssistantChatProvider() {
|
|
|
395
525
|
chatType: chatType
|
|
396
526
|
}, otherSendProps);
|
|
397
527
|
sendMessageRequest({
|
|
398
|
-
onSend:
|
|
528
|
+
onSend: effectiveOnSend,
|
|
399
529
|
sendInfoQuery: sendInfoQuery,
|
|
400
530
|
onSuccessCallback: onSuccessCallback
|
|
401
531
|
// setSendMessageDisabled: chatInputRef?.current?.setSendMessageDisabled,
|
|
@@ -720,9 +850,12 @@ var AssistantChatProvider = function AssistantChatProvider() {
|
|
|
720
850
|
placeholder: placeholder,
|
|
721
851
|
messageCardWidth: messageCardWidth,
|
|
722
852
|
enableWsConnectCallback: enableWsConnectCallback,
|
|
723
|
-
|
|
724
|
-
|
|
853
|
+
// 使用有效的 onSend(可能是用户传入的,也可能是内置的)
|
|
854
|
+
onSend: effectiveOnSend,
|
|
855
|
+
assistantChat: propAssistantChat,
|
|
725
856
|
isAssistant: isAssistant,
|
|
857
|
+
// WebSocket 连接状态
|
|
858
|
+
wsConnectionStatus: wsConnectionStatus,
|
|
726
859
|
textAreaRef: textAreaRef,
|
|
727
860
|
messages: messages,
|
|
728
861
|
setMessageList: setMessageList,
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { useAutoSend } from "./useAutoSend";
|
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
import { useCallback, useRef, useEffect } from 'react';
|
|
2
|
+
import { assistantChat } from "../service/conversation";
|
|
3
|
+
import { getAssistantWsStatus, reconnectAssistantWs } from "../utils/apushAssistant";
|
|
4
|
+
import { REQUEST_SUCCESS_CODE } from "../constants/common";
|
|
5
|
+
/**
|
|
6
|
+
* 内置自动发送消息逻辑的 Hook
|
|
7
|
+
* 如果用户传入了 onSend,直接返回用户的 onSend
|
|
8
|
+
* 否则返回内置的发送逻辑
|
|
9
|
+
*/
|
|
10
|
+
export function useAutoSend(props) {
|
|
11
|
+
var bizId = props.bizId,
|
|
12
|
+
_props$bizDomain = props.bizDomain,
|
|
13
|
+
bizDomain = _props$bizDomain === void 0 ? 'CHAT' : _props$bizDomain,
|
|
14
|
+
userOnSend = props.onSend,
|
|
15
|
+
onSendSuccess = props.onSendSuccess,
|
|
16
|
+
onSendError = props.onSendError;
|
|
17
|
+
var pendingSendRef = useRef(null);
|
|
18
|
+
|
|
19
|
+
// 监听 WebSocket 连接状态,处理待发送消息
|
|
20
|
+
useEffect(function () {
|
|
21
|
+
if (pendingSendRef.current) {
|
|
22
|
+
var _getAssistantWsStatus;
|
|
23
|
+
var status = (getAssistantWsStatus === null || getAssistantWsStatus === void 0 || (_getAssistantWsStatus = getAssistantWsStatus()) === null || _getAssistantWsStatus === void 0 ? void 0 : _getAssistantWsStatus.status) || 'disconnected';
|
|
24
|
+
if (status === 'connected') {
|
|
25
|
+
var pendingSend = pendingSendRef.current;
|
|
26
|
+
pendingSendRef.current = null;
|
|
27
|
+
pendingSend();
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
}, [bizId]);
|
|
31
|
+
|
|
32
|
+
// 内置 onSend 逻辑
|
|
33
|
+
var internalOnSend = useCallback(function (data, onSuccessCallback) {
|
|
34
|
+
var _getAssistantWsStatus2;
|
|
35
|
+
var _ref = (data === null || data === void 0 ? void 0 : data.params) || {},
|
|
36
|
+
query = _ref.query;
|
|
37
|
+
if (!bizId) {
|
|
38
|
+
console.warn('useAutoSend: bizId is required for sending message');
|
|
39
|
+
onSendError === null || onSendError === void 0 || onSendError(new Error('bizId is required'));
|
|
40
|
+
return;
|
|
41
|
+
}
|
|
42
|
+
var doSend = function doSend() {
|
|
43
|
+
var _data$params;
|
|
44
|
+
assistantChat({
|
|
45
|
+
subjectId: String(bizId),
|
|
46
|
+
content: query,
|
|
47
|
+
featureConfig: (data === null || data === void 0 ? void 0 : data.featureConfig) || {},
|
|
48
|
+
attachments: (data === null || data === void 0 || (_data$params = data.params) === null || _data$params === void 0 ? void 0 : _data$params.attachments) || []
|
|
49
|
+
}).then(function (res) {
|
|
50
|
+
if ((res === null || res === void 0 ? void 0 : res.code) === REQUEST_SUCCESS_CODE) {
|
|
51
|
+
onSuccessCallback === null || onSuccessCallback === void 0 || onSuccessCallback(res);
|
|
52
|
+
onSendSuccess === null || onSendSuccess === void 0 || onSendSuccess(res);
|
|
53
|
+
} else {
|
|
54
|
+
onSendError === null || onSendError === void 0 || onSendError(res);
|
|
55
|
+
}
|
|
56
|
+
}).catch(function (error) {
|
|
57
|
+
console.error('useAutoSend: send message failed', error);
|
|
58
|
+
onSendError === null || onSendError === void 0 || onSendError(error);
|
|
59
|
+
});
|
|
60
|
+
};
|
|
61
|
+
|
|
62
|
+
// 检查 WebSocket 连接状态
|
|
63
|
+
var status = (getAssistantWsStatus === null || getAssistantWsStatus === void 0 || (_getAssistantWsStatus2 = getAssistantWsStatus()) === null || _getAssistantWsStatus2 === void 0 ? void 0 : _getAssistantWsStatus2.status) || 'disconnected';
|
|
64
|
+
if (status === 'connected') {
|
|
65
|
+
doSend();
|
|
66
|
+
} else {
|
|
67
|
+
// 保存待发送消息
|
|
68
|
+
pendingSendRef.current = doSend;
|
|
69
|
+
|
|
70
|
+
// 如果连接断开,触发重连
|
|
71
|
+
if (status === 'disconnected') {
|
|
72
|
+
reconnectAssistantWs === null || reconnectAssistantWs === void 0 || reconnectAssistantWs({
|
|
73
|
+
bizId: String(bizId),
|
|
74
|
+
bizDomain: bizDomain
|
|
75
|
+
});
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
// 设置超时,避免无限等待
|
|
79
|
+
setTimeout(function () {
|
|
80
|
+
if (pendingSendRef.current === doSend) {
|
|
81
|
+
pendingSendRef.current = null;
|
|
82
|
+
// 超时后直接尝试发送
|
|
83
|
+
doSend();
|
|
84
|
+
}
|
|
85
|
+
}, 5000);
|
|
86
|
+
}
|
|
87
|
+
}, [bizId, bizDomain, onSendSuccess, onSendError]);
|
|
88
|
+
|
|
89
|
+
// 如果用户传入了 onSend,直接返回用户的
|
|
90
|
+
if (userOnSend) {
|
|
91
|
+
return userOnSend;
|
|
92
|
+
}
|
|
93
|
+
return internalOnSend;
|
|
94
|
+
}
|
|
95
|
+
export default useAutoSend;
|
package/es/index.js
CHANGED
|
@@ -25,6 +25,9 @@ import { ASSIST_CHAT_EVENT } from "./constants/assistChatEvent";
|
|
|
25
25
|
import { BIZ_DOMAIN_TYPE } from "./constants/common";
|
|
26
26
|
import ErrorBoundary from "./ErrorBoundary";
|
|
27
27
|
import { parseLlmComponentUrl } from "./utils/parseUrl";
|
|
28
|
+
// 开箱即用相关导出
|
|
29
|
+
import { getConversationConnection, assistantChat } from "./service/conversation";
|
|
30
|
+
import { useAutoSend } from "./hooks/useAutoSend";
|
|
28
31
|
import "./index.scss";
|
|
29
32
|
|
|
30
33
|
// 导出大模型卡片组件
|
|
@@ -60,4 +63,8 @@ registerAssistChatForm,
|
|
|
60
63
|
// 表单组件
|
|
61
64
|
PaulButtonGroupProps, SelectBlurry, ArrayInput,
|
|
62
65
|
// utils
|
|
63
|
-
parseLlmComponentUrl, ShareContent
|
|
66
|
+
parseLlmComponentUrl, ShareContent,
|
|
67
|
+
// 开箱即用相关
|
|
68
|
+
getConversationConnection, assistantChat, useAutoSend };
|
|
69
|
+
|
|
70
|
+
// 导出开箱即用相关类型
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
import _regeneratorRuntime from "@babel/runtime/helpers/esm/regeneratorRuntime";
|
|
2
|
+
import _asyncToGenerator from "@babel/runtime/helpers/esm/asyncToGenerator";
|
|
3
|
+
import { customRequest } from "../utils/request";
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* 会话连接信息
|
|
7
|
+
*/
|
|
8
|
+
|
|
9
|
+
/**
|
|
10
|
+
* 获取会话连接 API 响应
|
|
11
|
+
*/
|
|
12
|
+
|
|
13
|
+
/**
|
|
14
|
+
* 获取会话连接信息
|
|
15
|
+
* 用于自动创建或获取现有会话
|
|
16
|
+
* @param params 请求参数
|
|
17
|
+
* @returns Promise<IConversationConnectionResponse>
|
|
18
|
+
*/
|
|
19
|
+
export function getConversationConnection(_x) {
|
|
20
|
+
return _getConversationConnection.apply(this, arguments);
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
/**
|
|
24
|
+
* 发送聊天消息
|
|
25
|
+
* @param params 消息参数
|
|
26
|
+
* @returns Promise<any>
|
|
27
|
+
*/
|
|
28
|
+
function _getConversationConnection() {
|
|
29
|
+
_getConversationConnection = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee(params) {
|
|
30
|
+
return _regeneratorRuntime().wrap(function _callee$(_context) {
|
|
31
|
+
while (1) switch (_context.prev = _context.next) {
|
|
32
|
+
case 0:
|
|
33
|
+
return _context.abrupt("return", customRequest({
|
|
34
|
+
method: 'GET',
|
|
35
|
+
url: '/cognipilot/api/conversation/connection',
|
|
36
|
+
query: {
|
|
37
|
+
bizDomain: params.bizDomain || 'CHAT',
|
|
38
|
+
subjectId: params.subjectId
|
|
39
|
+
}
|
|
40
|
+
}));
|
|
41
|
+
case 1:
|
|
42
|
+
case "end":
|
|
43
|
+
return _context.stop();
|
|
44
|
+
}
|
|
45
|
+
}, _callee);
|
|
46
|
+
}));
|
|
47
|
+
return _getConversationConnection.apply(this, arguments);
|
|
48
|
+
}
|
|
49
|
+
export function assistantChat(_x2) {
|
|
50
|
+
return _assistantChat.apply(this, arguments);
|
|
51
|
+
}
|
|
52
|
+
function _assistantChat() {
|
|
53
|
+
_assistantChat = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee2(params) {
|
|
54
|
+
return _regeneratorRuntime().wrap(function _callee2$(_context2) {
|
|
55
|
+
while (1) switch (_context2.prev = _context2.next) {
|
|
56
|
+
case 0:
|
|
57
|
+
return _context2.abrupt("return", customRequest({
|
|
58
|
+
method: 'POST',
|
|
59
|
+
url: '/cognipilot/api/assistant/chat',
|
|
60
|
+
query: {
|
|
61
|
+
subjectId: params.subjectId,
|
|
62
|
+
content: params.content,
|
|
63
|
+
featureConfig: params.featureConfig || {},
|
|
64
|
+
attachments: params.attachments || []
|
|
65
|
+
}
|
|
66
|
+
}));
|
|
67
|
+
case 1:
|
|
68
|
+
case "end":
|
|
69
|
+
return _context2.stop();
|
|
70
|
+
}
|
|
71
|
+
}, _callee2);
|
|
72
|
+
}));
|
|
73
|
+
return _assistantChat.apply(this, arguments);
|
|
74
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { getConversationConnection, assistantChat } from "./conversation";
|
|
@@ -4,7 +4,7 @@ import { customRequest } from "./request";
|
|
|
4
4
|
import { JsonParse } from "./formatData";
|
|
5
5
|
import { AesCustomLogEventEnum } from "./log";
|
|
6
6
|
import { logger } from "./websocketLogger";
|
|
7
|
-
import IM from
|
|
7
|
+
import IM from 'magic-chat-im';
|
|
8
8
|
|
|
9
9
|
// 扩展 Window 接口,声明全局属性
|
|
10
10
|
|
|
@@ -51,29 +51,38 @@ var msgCallback = function msgCallback(v) {
|
|
|
51
51
|
return;
|
|
52
52
|
}
|
|
53
53
|
|
|
54
|
-
// 检查 ticketId 是否匹配
|
|
54
|
+
// 检查 ticketId 或 subjectId 是否匹配
|
|
55
|
+
// STREAM 消息使用 subjectId,其他消息使用 ticketId
|
|
55
56
|
var ticketId = argJson === null || argJson === void 0 ? void 0 : argJson.ticketId;
|
|
56
|
-
var
|
|
57
|
+
var subjectId = argJson === null || argJson === void 0 ? void 0 : argJson.subjectId;
|
|
58
|
+
var isMatch = ticketId === bizId || subjectId === bizId;
|
|
57
59
|
if (isMatch) {
|
|
58
60
|
event.emit(msgType, argJson);
|
|
59
61
|
logger.debug('消息已分发', {
|
|
60
62
|
msgType: msgType,
|
|
61
|
-
ticketId: ticketId
|
|
63
|
+
ticketId: ticketId,
|
|
64
|
+
subjectId: subjectId
|
|
62
65
|
});
|
|
63
66
|
} else {
|
|
64
67
|
// 消息被过滤,记录调试日志
|
|
65
|
-
logger.debug('消息 ticketId 不匹配,已过滤', {
|
|
68
|
+
logger.debug('消息 ticketId/subjectId 不匹配,已过滤', {
|
|
66
69
|
expected: bizId,
|
|
67
|
-
|
|
70
|
+
receivedTicketId: ticketId,
|
|
71
|
+
receivedSubjectId: subjectId,
|
|
68
72
|
msgType: msgType
|
|
69
73
|
});
|
|
70
74
|
}
|
|
71
75
|
};
|
|
72
|
-
var callback = function callback(
|
|
76
|
+
var callback = function callback(message, bizId) {
|
|
73
77
|
try {
|
|
78
|
+
// message 是完整的 WebSocket 消息对象,真正的消息体在 message.msgBody 中
|
|
79
|
+
var msgBody = (message === null || message === void 0 ? void 0 : message.msgBody) || message;
|
|
74
80
|
var _ref3 = msgBody || {},
|
|
75
|
-
|
|
76
|
-
msgDetail = _ref3.msgDetail
|
|
81
|
+
msgVersion = _ref3.msgVersion,
|
|
82
|
+
msgDetail = _ref3.msgDetail,
|
|
83
|
+
msgType = _ref3.msgType;
|
|
84
|
+
// 兼容旧版本的 version 字段
|
|
85
|
+
var version = msgVersion || (msgBody === null || msgBody === void 0 ? void 0 : msgBody.version);
|
|
77
86
|
if (version === '1.0.0') {
|
|
78
87
|
var _msgDetail$, _msgDetail$2;
|
|
79
88
|
if (msgDetail !== null && msgDetail !== void 0 && (_msgDetail$ = msgDetail[0]) !== null && _msgDetail$ !== void 0 && _msgDetail$.arg && msgDetail !== null && msgDetail !== void 0 && (_msgDetail$2 = msgDetail[0]) !== null && _msgDetail$2 !== void 0 && _msgDetail$2.app) {
|
|
@@ -94,8 +103,8 @@ var callback = function callback(msgBody, bizId) {
|
|
|
94
103
|
} else if (version === '2.0.0' || !version) {
|
|
95
104
|
// version 不传默认为 2.0.0
|
|
96
105
|
msgCallback({
|
|
97
|
-
msgType:
|
|
98
|
-
arg:
|
|
106
|
+
msgType: msgType,
|
|
107
|
+
arg: msgDetail,
|
|
99
108
|
bizId: bizId
|
|
100
109
|
});
|
|
101
110
|
}
|
|
@@ -241,11 +250,11 @@ export var startAssistantWs = function startAssistantWs(wsProps) {
|
|
|
241
250
|
});
|
|
242
251
|
}
|
|
243
252
|
};
|
|
253
|
+
console.log(appId, userId, '=====');
|
|
244
254
|
var im = new IM(_objectSpread({
|
|
245
255
|
url: url,
|
|
246
256
|
appKey: "".concat(appId, ",").concat(userId),
|
|
247
257
|
// appKey: `${appId},1000`,
|
|
248
|
-
|
|
249
258
|
commonParams: {
|
|
250
259
|
appId: appId,
|
|
251
260
|
userId: userId
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "paul-ai-assistant",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.8",
|
|
4
4
|
"description": "Paul AI 智能辅助组件",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"Magic Workbench",
|
|
@@ -39,6 +39,7 @@
|
|
|
39
39
|
"prettier": "prettier --write \"src/**/*.{js,jsx,tsx,ts,less,scss,md,json}\" --end-of-line auto",
|
|
40
40
|
"prepublish": "npm run build:docs",
|
|
41
41
|
"publish:beta": "npm run build && tnpm publish",
|
|
42
|
+
"publish:npm": "npm publish --registry=https://registry.npmjs.org --access=public",
|
|
42
43
|
"publish:prod": "npm run build && tnpm publish",
|
|
43
44
|
"start": "dumi dev",
|
|
44
45
|
"test": "jest",
|
|
@@ -97,6 +98,7 @@
|
|
|
97
98
|
"classnames": "^2.2.6",
|
|
98
99
|
"katex": "^0.16.25",
|
|
99
100
|
"lodash": "^4.17.21",
|
|
101
|
+
"magic-chat-im": "^2.9.3",
|
|
100
102
|
"mermaid": "^11.12.1",
|
|
101
103
|
"moment": "^2.24.0",
|
|
102
104
|
"parse-entities": "^4.0.2",
|
package/dist/1013.async.js
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
"use strict";(self.webpackChunk_alife_paul_ai_assistant=self.webpackChunk_alife_paul_ai_assistant||[]).push([[1013],{63001:function(A,f,n){n.d(f,{Z:function(){return d}});var r=n(37834),u="__lodash_hash_undefined__";function _(b){return this.__data__.set(b,u),this}var a=_;function i(b){return this.__data__.has(b)}var o=i;function l(b){var y=-1,O=b==null?0:b.length;for(this.__data__=new r.Z;++y<O;)this.add(b[y])}l.prototype.add=l.prototype.push=a,l.prototype.has=o;var d=l},56530:function(A,f){function n(r,u){for(var _=-1,a=r==null?0:r.length,i=0,o=[];++_<a;){var l=r[_];u(l,_,r)&&(o[i++]=l)}return o}f.Z=n},39370:function(A,f,n){var r=n(39044);function u(_,a){var i=_==null?0:_.length;return!!i&&(0,r.Z)(_,a,0)>-1}f.Z=u},22783:function(A,f){function n(r,u,_){for(var a=-1,i=r==null?0:r.length;++a<i;)if(_(u,r[a]))return!0;return!1}f.Z=n},74073:function(A,f){function n(r,u){for(var _=-1,a=r==null?0:r.length,i=Array(a);++_<a;)i[_]=u(r[_],_,r);return i}f.Z=n},58694:function(A,f){function n(r,u){for(var _=-1,a=u.length,i=r.length;++_<a;)r[i+_]=u[_];return r}f.Z=n},2338:function(A,f){function n(r,u){for(var _=-1,a=r==null?0:r.length;++_<a;)if(u(r[_],_,r))return!0;return!1}f.Z=n},45401:function(A,f,n){n.d(f,{Z:function(){return be}});var r=n(31667),u=n(76579),_=n(72954),a=n(31899),i=n(17179);function o(s,M){return s&&(0,a.Z)(M,(0,i.Z)(M),s)}var l=o,d=n(32957);function b(s,M){return s&&(0,a.Z)(M,(0,d.Z)(M),s)}var y=b,O=n(91050),v=n(87215),p=n(95695);function g(s,M){return(0,a.Z)(s,(0,p.Z)(s),M)}var T=g,B=n(17502);function L(s,M){return(0,a.Z)(s,(0,B.Z)(s),M)}var $=L,Q=n(1808),k=n(4403),W=n(83970),F=Object.prototype,rn=F.hasOwnProperty;function G(s){var M=s.length,K=new s.constructor(M);return M&&typeof s[0]=="string"&&rn.call(s,"index")&&(K.index=s.index,K.input=s.input),K}var H=G,q=n(41884);function jn(s,M){var K=M?(0,q.Z)(s.buffer):s.buffer;return new s.constructor(K,s.byteOffset,s.byteLength)}var dn=jn,un=/\w*$/;function wn(s){var M=new s.constructor(s.source,un.exec(s));return M.lastIndex=s.lastIndex,M}var xn=wn,on=n(17685),vn=on.Z?on.Z.prototype:void 0,cn=vn?vn.valueOf:void 0;function Wn(s){return cn?Object(cn.call(s)):{}}var Fn=Wn,Gn=n(12701),gn="[object Boolean]",ln="[object Date]",Zn="[object Map]",Nn="[object Number]",Hn="[object RegExp]",En="[object Set]",yn="[object String]",tn="[object Symbol]",Yn="[object ArrayBuffer]",An="[object DataView]",$n="[object Float32Array]",Xn="[object Float64Array]",bn="[object Int8Array]",On="[object Int16Array]",Tn="[object Int32Array]",Jn="[object Uint8Array]",Qn="[object Uint8ClampedArray]",zn="[object Uint16Array]",Vn="[object Uint32Array]";function kn(s,M,K){var _n=s.constructor;switch(M){case Yn:return(0,q.Z)(s);case gn:case ln:return new _n(+s);case An:return dn(s,K);case $n:case Xn:case bn:case On:case Tn:case Jn:case Qn:case zn:case Vn:return(0,Gn.Z)(s,K);case Zn:return new _n;case Nn:case yn:return new _n(s);case Hn:return xn(s);case En:return new _n;case tn:return Fn(s)}}var qn=kn,Pn=n(73658),ne=n(27771),ee=n(77008),In=n(18533),re="[object Map]";function Mn(s){return(0,In.Z)(s)&&(0,W.Z)(s)==re}var te=Mn,hn=n(21162),nn=n(98351),pn=nn.Z&&nn.Z.isMap,ae=pn?(0,hn.Z)(pn):te,se=ae,Cn=n(77226),Dn="[object Set]";function _e(s){return(0,In.Z)(s)&&(0,W.Z)(s)==Dn}var fe=_e,Sn=nn.Z&&nn.Z.isSet,ie=Sn?(0,hn.Z)(Sn):fe,ue=ie,oe=1,le=2,de=4,mn="[object Arguments]",ve="[object Array]",ce="[object Boolean]",ge="[object Date]",e="[object Error]",t="[object Function]",c="[object GeneratorFunction]",Z="[object Map]",P="[object Number]",E="[object Object]",D="[object RegExp]",h="[object Set]",S="[object String]",m="[object Symbol]",U="[object WeakMap]",R="[object ArrayBuffer]",C="[object DataView]",N="[object Float32Array]",j="[object Float64Array]",x="[object Int8Array]",Y="[object Int16Array]",X="[object Int32Array]",J="[object Uint8Array]",Ln="[object Uint8ClampedArray]",an="[object Uint16Array]",sn="[object Uint32Array]",I={};I[mn]=I[ve]=I[R]=I[C]=I[ce]=I[ge]=I[N]=I[j]=I[x]=I[Y]=I[X]=I[Z]=I[P]=I[E]=I[D]=I[h]=I[S]=I[m]=I[J]=I[Ln]=I[an]=I[sn]=!0,I[e]=I[t]=I[U]=!1;function Rn(s,M,K,_n,Bn,z){var w,Un=M&oe,Kn=M&le,Oe=M&de;if(K&&(w=Bn?K(s,_n,Bn,z):K(s)),w!==void 0)return w;if(!(0,Cn.Z)(s))return s;var Ze=(0,ne.Z)(s);if(Ze){if(w=H(s),!Un)return(0,v.Z)(s,w)}else{var fn=(0,W.Z)(s),Ee=fn==t||fn==c;if((0,ee.Z)(s))return(0,O.Z)(s,Un);if(fn==E||fn==mn||Ee&&!Bn){if(w=Kn||Ee?{}:(0,Pn.Z)(s),!Un)return Kn?$(s,y(w,s)):T(s,l(w,s))}else{if(!I[fn])return Bn?s:{};w=qn(s,fn,Un)}}z||(z=new r.Z);var ye=z.get(s);if(ye)return ye;z.set(s,w),ue(s)?s.forEach(function(V){w.add(Rn(V,M,K,V,s,z))}):se(s)&&s.forEach(function(V,en){w.set(en,Rn(V,M,K,en,s,z))});var Te=Oe?Kn?k.Z:Q.Z:Kn?d.Z:i.Z,Ae=Ze?void 0:Te(s);return(0,u.Z)(Ae||s,function(V,en){Ae&&(en=V,V=s[en]),(0,_.Z)(w,en,Rn(V,M,K,en,s,z))}),w}var be=Rn},94749:function(A,f,n){var r=n(49811);function u(_,a){var i=[];return(0,r.Z)(_,function(o,l,d){a(o,l,d)&&i.push(o)}),i}f.Z=u},21692:function(A,f){function n(r,u,_,a){for(var i=r.length,o=_+(a?1:-1);a?o--:++o<i;)if(u(r[o],o,r))return o;return-1}f.Z=n},10626:function(A,f,n){n.d(f,{Z:function(){return b}});var r=n(58694),u=n(17685),_=n(29169),a=n(27771),i=u.Z?u.Z.isConcatSpreadable:void 0;function o(y){return(0,a.Z)(y)||(0,_.Z)(y)||!!(i&&y&&y[i])}var l=o;function d(y,O,v,p,g){var T=-1,B=y.length;for(v||(v=l),g||(g=[]);++T<B;){var L=y[T];O>0&&v(L)?O>1?d(L,O-1,v,p,g):(0,r.Z)(g,L):p||(g[g.length]=L)}return g}var b=d},13317:function(A,f,n){var r=n(22823),u=n(62281);function _(a,i){i=(0,r.Z)(i,a);for(var o=0,l=i.length;a!=null&&o<l;)a=a[(0,u.Z)(i[o++])];return o&&o==l?a:void 0}f.Z=_},63327:function(A,f,n){var r=n(58694),u=n(27771);function _(a,i,o){var l=i(a);return(0,u.Z)(a)?l:(0,r.Z)(l,o(a))}f.Z=_},39044:function(A,f,n){n.d(f,{Z:function(){return l}});var r=n(21692);function u(d){return d!==d}var _=u;function a(d,b,y){for(var O=y-1,v=d.length;++O<v;)if(d[O]===b)return O;return-1}var i=a;function o(d,b,y){return b===b?i(d,b,y):(0,r.Z)(d,_,y)}var l=o},2e3:function(A,f,n){n.d(f,{Z:function(){return ge}});var r=n(31667),u=n(63001),_=n(2338),a=n(59548),i=1,o=2;function l(e,t,c,Z,P,E){var D=c&i,h=e.length,S=t.length;if(h!=S&&!(D&&S>h))return!1;var m=E.get(e),U=E.get(t);if(m&&U)return m==t&&U==e;var R=-1,C=!0,N=c&o?new u.Z:void 0;for(E.set(e,t),E.set(t,e);++R<h;){var j=e[R],x=t[R];if(Z)var Y=D?Z(x,j,R,t,e,E):Z(j,x,R,e,t,E);if(Y!==void 0){if(Y)continue;C=!1;break}if(N){if(!(0,_.Z)(t,function(X,J){if(!(0,a.Z)(N,J)&&(j===X||P(j,X,c,Z,E)))return N.push(J)})){C=!1;break}}else if(!(j===x||P(j,x,c,Z,E))){C=!1;break}}return E.delete(e),E.delete(t),C}var d=l,b=n(17685),y=n(84073),O=n(79651);function v(e){var t=-1,c=Array(e.size);return e.forEach(function(Z,P){c[++t]=[P,Z]}),c}var p=v,g=n(6545),T=1,B=2,L="[object Boolean]",$="[object Date]",Q="[object Error]",k="[object Map]",W="[object Number]",F="[object RegExp]",rn="[object Set]",G="[object String]",H="[object Symbol]",q="[object ArrayBuffer]",jn="[object DataView]",dn=b.Z?b.Z.prototype:void 0,un=dn?dn.valueOf:void 0;function wn(e,t,c,Z,P,E,D){switch(c){case jn:if(e.byteLength!=t.byteLength||e.byteOffset!=t.byteOffset)return!1;e=e.buffer,t=t.buffer;case q:return!(e.byteLength!=t.byteLength||!E(new y.Z(e),new y.Z(t)));case L:case $:case W:return(0,O.Z)(+e,+t);case Q:return e.name==t.name&&e.message==t.message;case F:case G:return e==t+"";case k:var h=p;case rn:var S=Z&T;if(h||(h=g.Z),e.size!=t.size&&!S)return!1;var m=D.get(e);if(m)return m==t;Z|=B,D.set(e,t);var U=d(h(e),h(t),Z,P,E,D);return D.delete(e),U;case H:if(un)return un.call(e)==un.call(t)}return!1}var xn=wn,on=n(1808),vn=1,cn=Object.prototype,Wn=cn.hasOwnProperty;function Fn(e,t,c,Z,P,E){var D=c&vn,h=(0,on.Z)(e),S=h.length,m=(0,on.Z)(t),U=m.length;if(S!=U&&!D)return!1;for(var R=S;R--;){var C=h[R];if(!(D?C in t:Wn.call(t,C)))return!1}var N=E.get(e),j=E.get(t);if(N&&j)return N==t&&j==e;var x=!0;E.set(e,t),E.set(t,e);for(var Y=D;++R<S;){C=h[R];var X=e[C],J=t[C];if(Z)var Ln=D?Z(J,X,C,t,e,E):Z(X,J,C,e,t,E);if(!(Ln===void 0?X===J||P(X,J,c,Z,E):Ln)){x=!1;break}Y||(Y=C=="constructor")}if(x&&!Y){var an=e.constructor,sn=t.constructor;an!=sn&&"constructor"in e&&"constructor"in t&&!(typeof an=="function"&&an instanceof an&&typeof sn=="function"&&sn instanceof sn)&&(x=!1)}return E.delete(e),E.delete(t),x}var Gn=Fn,gn=n(83970),ln=n(27771),Zn=n(77008),Nn=n(18843),Hn=1,En="[object Arguments]",yn="[object Array]",tn="[object Object]",Yn=Object.prototype,An=Yn.hasOwnProperty;function $n(e,t,c,Z,P,E){var D=(0,ln.Z)(e),h=(0,ln.Z)(t),S=D?yn:(0,gn.Z)(e),m=h?yn:(0,gn.Z)(t);S=S==En?tn:S,m=m==En?tn:m;var U=S==tn,R=m==tn,C=S==m;if(C&&(0,Zn.Z)(e)){if(!(0,Zn.Z)(t))return!1;D=!0,U=!1}if(C&&!U)return E||(E=new r.Z),D||(0,Nn.Z)(e)?d(e,t,c,Z,P,E):xn(e,t,S,c,Z,P,E);if(!(c&Hn)){var N=U&&An.call(e,"__wrapped__"),j=R&&An.call(t,"__wrapped__");if(N||j){var x=N?e.value():e,Y=j?t.value():t;return E||(E=new r.Z),P(x,Y,c,Z,E)}}return C?(E||(E=new r.Z),Gn(e,t,c,Z,P,E)):!1}var Xn=$n,bn=n(18533);function On(e,t,c,Z,P){return e===t?!0:e==null||t==null||!(0,bn.Z)(e)&&!(0,bn.Z)(t)?e!==e&&t!==t:Xn(e,t,c,Z,On,P)}var Tn=On,Jn=1,Qn=2;function zn(e,t,c,Z){var P=c.length,E=P,D=!Z;if(e==null)return!E;for(e=Object(e);P--;){var h=c[P];if(D&&h[2]?h[1]!==e[h[0]]:!(h[0]in e))return!1}for(;++P<E;){h=c[P];var S=h[0],m=e[S],U=h[1];if(D&&h[2]){if(m===void 0&&!(S in e))return!1}else{var R=new r.Z;if(Z)var C=Z(m,U,S,e,t,R);if(!(C===void 0?Tn(U,m,Jn|Qn,Z,R):C))return!1}}return!0}var Vn=zn,kn=n(77226);function qn(e){return e===e&&!(0,kn.Z)(e)}var Pn=qn,ne=n(17179);function ee(e){for(var t=(0,ne.Z)(e),c=t.length;c--;){var Z=t[c],P=e[Z];t[c]=[Z,P,Pn(P)]}return t}var In=ee;function re(e,t){return function(c){return c==null?!1:c[e]===t&&(t!==void 0||e in Object(c))}}var Mn=re;function te(e){var t=In(e);return t.length==1&&t[0][2]?Mn(t[0][0],t[0][1]):function(c){return c===e||Vn(c,e,t)}}var hn=te,nn=n(13317);function pn(e,t,c){var Z=e==null?void 0:(0,nn.Z)(e,t);return Z===void 0?c:Z}var ae=pn,se=n(75487),Cn=n(99365),Dn=n(62281),_e=1,fe=2;function Sn(e,t){return(0,Cn.Z)(e)&&Pn(t)?Mn((0,Dn.Z)(e),t):function(c){var Z=ae(c,e);return Z===void 0&&Z===t?(0,se.Z)(c,e):Tn(t,Z,_e|fe)}}var ie=Sn,ue=n(69203),oe=n(54193);function le(e){return function(t){return(0,nn.Z)(t,e)}}var de=le;function mn(e){return(0,Cn.Z)(e)?(0,oe.Z)((0,Dn.Z)(e)):de(e)}var ve=mn;function ce(e){return typeof e=="function"?e:e==null?ue.Z:typeof e=="object"?(0,ln.Z)(e)?ie(e[0],e[1]):hn(e):ve(e)}var ge=ce},54193:function(A,f){function n(r){return function(u){return u==null?void 0:u[r]}}f.Z=n},69958:function(A,f,n){n.d(f,{Z:function(){return p}});var r=n(63001),u=n(39370),_=n(22783),a=n(59548),i=n(93203),o=n(42054),l=n(6545),d=1/0,b=i.Z&&1/(0,l.Z)(new i.Z([,-0]))[1]==d?function(g){return new i.Z(g)}:o.Z,y=b,O=200;function v(g,T,B){var L=-1,$=u.Z,Q=g.length,k=!0,W=[],F=W;if(B)k=!1,$=_.Z;else if(Q>=O){var rn=T?null:y(g);if(rn)return(0,l.Z)(rn);k=!1,$=a.Z,F=new r.Z}else F=T?[]:W;n:for(;++L<Q;){var G=g[L],H=T?T(G):G;if(G=B||G!==0?G:0,k&&H===H){for(var q=F.length;q--;)if(F[q]===H)continue n;T&&F.push(H),W.push(G)}else $(F,H,B)||(F!==W&&F.push(H),W.push(G))}return W}var p=v},59548:function(A,f){function n(r,u){return r.has(u)}f.Z=n},22823:function(A,f,n){n.d(f,{Z:function(){return p}});var r=n(27771),u=n(99365),_=n(42454),a=500;function i(g){var T=(0,_.Z)(g,function(L){return B.size===a&&B.clear(),L}),B=T.cache;return T}var o=i,l=/[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g,d=/\\(\\)?/g,b=o(function(g){var T=[];return g.charCodeAt(0)===46&&T.push(""),g.replace(l,function(B,L,$,Q){T.push($?Q.replace(d,"$1"):L||B)}),T}),y=b,O=n(50751);function v(g,T){return(0,r.Z)(g)?g:(0,u.Z)(g,T)?[g]:y((0,O.Z)(g))}var p=v},1808:function(A,f,n){var r=n(63327),u=n(95695),_=n(17179);function a(i){return(0,r.Z)(i,_.Z,u.Z)}f.Z=a},4403:function(A,f,n){var r=n(63327),u=n(17502),_=n(32957);function a(i){return(0,r.Z)(i,_.Z,u.Z)}f.Z=a},95695:function(A,f,n){var r=n(56530),u=n(60532),_=Object.prototype,a=_.propertyIsEnumerable,i=Object.getOwnPropertySymbols,o=i?function(l){return l==null?[]:(l=Object(l),(0,r.Z)(i(l),function(d){return a.call(l,d)}))}:u.Z;f.Z=o},17502:function(A,f,n){var r=n(58694),u=n(12513),_=n(95695),a=n(60532),i=Object.getOwnPropertySymbols,o=i?function(l){for(var d=[];l;)(0,r.Z)(d,(0,_.Z)(l)),l=(0,u.Z)(l);return d}:a.Z;f.Z=o},16174:function(A,f,n){var r=n(22823),u=n(29169),_=n(27771),a=n(56009),i=n(1656),o=n(62281);function l(d,b,y){b=(0,r.Z)(b,d);for(var O=-1,v=b.length,p=!1;++O<v;){var g=(0,o.Z)(b[O]);if(!(p=d!=null&&y(d,g)))break;d=d[g]}return p||++O!=v?p:(v=d==null?0:d.length,!!v&&(0,i.Z)(v)&&(0,a.Z)(g,v)&&((0,_.Z)(d)||(0,u.Z)(d)))}f.Z=l},99365:function(A,f,n){var r=n(27771),u=n(72714),_=/\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,a=/^\w*$/;function i(o,l){if((0,r.Z)(o))return!1;var d=typeof o;return d=="number"||d=="symbol"||d=="boolean"||o==null||(0,u.Z)(o)?!0:a.test(o)||!_.test(o)||l!=null&&o in Object(l)}f.Z=i},6545:function(A,f){function n(r){var u=-1,_=Array(r.size);return r.forEach(function(a){_[++u]=a}),_}f.Z=n},62281:function(A,f,n){var r=n(72714),u=1/0;function _(a){if(typeof a=="string"||(0,r.Z)(a))return a;var i=a+"";return i=="0"&&1/a==-u?"-0":i}f.Z=_},19601:function(A,f,n){var r=n(56530),u=n(94749),_=n(2e3),a=n(27771);function i(o,l){var d=(0,a.Z)(o)?r.Z:u.Z;return d(o,(0,_.Z)(l,3))}f.Z=i},75487:function(A,f,n){n.d(f,{Z:function(){return i}});function r(o,l){return o!=null&&l in Object(o)}var u=r,_=n(16174);function a(o,l){return o!=null&&(0,_.Z)(o,l,u)}var i=a},72714:function(A,f,n){var r=n(93589),u=n(18533),_="[object Symbol]";function a(i){return typeof i=="symbol"||(0,u.Z)(i)&&(0,r.Z)(i)==_}f.Z=a},49360:function(A,f){function n(r){return r===void 0}f.Z=n},42054:function(A,f){function n(){}f.Z=n},92344:function(A,f,n){n.d(f,{Z:function(){return b}});function r(y,O,v,p){var g=-1,T=y==null?0:y.length;for(p&&T&&(v=y[++g]);++g<T;)v=O(v,y[g],g,y);return v}var u=r,_=n(49811),a=n(2e3);function i(y,O,v,p,g){return g(y,function(T,B,L){v=p?(p=!1,T):O(v,T,B,L)}),v}var o=i,l=n(27771);function d(y,O,v){var p=(0,l.Z)(y)?u:o,g=arguments.length<3;return p(y,(0,a.Z)(O,4),v,g,_.Z)}var b=d},60532:function(A,f){function n(){return[]}f.Z=n},50751:function(A,f,n){n.d(f,{Z:function(){return O}});var r=n(17685),u=n(74073),_=n(27771),a=n(72714),i=1/0,o=r.Z?r.Z.prototype:void 0,l=o?o.toString:void 0;function d(v){if(typeof v=="string")return v;if((0,_.Z)(v))return(0,u.Z)(v,d)+"";if((0,a.Z)(v))return l?l.call(v):"";var p=v+"";return p=="0"&&1/v==-i?"-0":p}var b=d;function y(v){return v==null?"":b(v)}var O=y},34148:function(A,f,n){n.d(f,{Z:function(){return o}});var r=n(74073);function u(l,d){return(0,r.Z)(d,function(b){return l[b]})}var _=u,a=n(17179);function i(l){return l==null?[]:_(l,(0,a.Z)(l))}var o=i}}]);
|