@myun/gimi-chat 0.9.45 → 0.9.47

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 (52) hide show
  1. package/dist/apis/useApi.d.ts +6 -0
  2. package/dist/apis/useApi.js +45 -1
  3. package/dist/components/ai-chat-dialogue/index copy.js +1 -1
  4. package/dist/components/ai-chat-dialogue/index.js +4 -2
  5. package/dist/components/answer-item/component/artifacts/index.d.ts +13 -0
  6. package/dist/components/answer-item/component/artifacts/index.js +52 -0
  7. package/dist/components/answer-item/component/artifacts/index.module.css +24 -0
  8. package/dist/components/answer-item/component/tool-list/index.d.ts +7 -0
  9. package/dist/components/answer-item/component/tool-list/index.js +97 -0
  10. package/dist/components/answer-item/component/tool-list/index.module.css +92 -0
  11. package/dist/components/answer-item/index.d.ts +2 -1
  12. package/dist/components/answer-item/index.js +160 -7
  13. package/dist/components/answer-item/index.module.css +24 -0
  14. package/dist/components/ask-card/index.d.ts +1 -1
  15. package/dist/components/chat-input/extension/index.d.ts +1 -0
  16. package/dist/components/chat-input/extension/index.js +2 -1
  17. package/dist/components/chat-input/extension/skill/MentionList.d.ts +30 -0
  18. package/dist/components/chat-input/extension/skill/MentionList.js +181 -0
  19. package/dist/components/chat-input/extension/skill/ReferSlot.d.ts +3 -0
  20. package/dist/components/chat-input/extension/skill/ReferSlot.js +100 -0
  21. package/dist/components/chat-input/extension/skill/data.d.ts +10 -0
  22. package/dist/components/chat-input/extension/skill/data.js +49 -0
  23. package/dist/components/chat-input/extension/skill/index.d.ts +7 -0
  24. package/dist/components/chat-input/extension/skill/index.js +5 -0
  25. package/dist/components/chat-input/extension/skill/index.less +100 -0
  26. package/dist/components/chat-input/extension/skill/suggestion.d.ts +14 -0
  27. package/dist/components/chat-input/extension/skill/suggestion.js +173 -0
  28. package/dist/components/chat-input/index.js +63 -15
  29. package/dist/components/file-card/index.js +2 -1
  30. package/dist/components/file-card/index.module.css +1 -0
  31. package/dist/components/knowledge-trace/tryWatch.js +8 -1
  32. package/dist/components/message-list/index.js +15 -3
  33. package/dist/components/message-list/index.module.css +3 -0
  34. package/dist/components/message-list/skill-tag/index.d.ts +5 -0
  35. package/dist/components/message-list/skill-tag/index.js +24 -0
  36. package/dist/components/message-list/skill-tag/index.module.css +22 -0
  37. package/dist/components/templates/CommonChat.js +3 -1
  38. package/dist/hooks/useChatActions.d.ts +2 -1
  39. package/dist/hooks/useChatActions.js +41 -3
  40. package/dist/hooks/useChatStream.d.ts +6 -1
  41. package/dist/hooks/useChatStream.js +96 -5
  42. package/dist/hooks/useCommonChatAPI.d.ts +1 -1
  43. package/dist/hooks/useCommonChatAPI.js +190 -54
  44. package/dist/i18n/locales/en-US.d.ts +3 -0
  45. package/dist/i18n/locales/en-US.js +10 -7
  46. package/dist/i18n/locales/zh-CN.d.ts +3 -0
  47. package/dist/i18n/locales/zh-CN.js +4 -1
  48. package/dist/interfaces/chatMessage.d.ts +38 -0
  49. package/dist/umd/index.min.js +1 -1
  50. package/dist/utils/tools.d.ts +6 -0
  51. package/dist/utils/tools.js +31 -0
  52. package/package.json +4 -2
@@ -1,9 +1,28 @@
1
- import React from 'react';
1
+ function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); }
2
+ function _regeneratorRuntime() { "use strict"; /*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/facebook/regenerator/blob/main/LICENSE */ _regeneratorRuntime = function _regeneratorRuntime() { return e; }; var t, e = {}, r = Object.prototype, n = r.hasOwnProperty, o = Object.defineProperty || function (t, e, r) { t[e] = r.value; }, i = "function" == typeof Symbol ? Symbol : {}, a = i.iterator || "@@iterator", c = i.asyncIterator || "@@asyncIterator", u = i.toStringTag || "@@toStringTag"; function define(t, e, r) { return Object.defineProperty(t, e, { value: r, enumerable: !0, configurable: !0, writable: !0 }), t[e]; } try { define({}, ""); } catch (t) { define = function define(t, e, r) { return t[e] = r; }; } function wrap(t, e, r, n) { var i = e && e.prototype instanceof Generator ? e : Generator, a = Object.create(i.prototype), c = new Context(n || []); return o(a, "_invoke", { value: makeInvokeMethod(t, r, c) }), a; } function tryCatch(t, e, r) { try { return { type: "normal", arg: t.call(e, r) }; } catch (t) { return { type: "throw", arg: t }; } } e.wrap = wrap; var h = "suspendedStart", l = "suspendedYield", f = "executing", s = "completed", y = {}; function Generator() {} function GeneratorFunction() {} function GeneratorFunctionPrototype() {} var p = {}; define(p, a, function () { return this; }); var d = Object.getPrototypeOf, v = d && d(d(values([]))); v && v !== r && n.call(v, a) && (p = v); var g = GeneratorFunctionPrototype.prototype = Generator.prototype = Object.create(p); function defineIteratorMethods(t) { ["next", "throw", "return"].forEach(function (e) { define(t, e, function (t) { return this._invoke(e, t); }); }); } function AsyncIterator(t, e) { function invoke(r, o, i, a) { var c = tryCatch(t[r], t, o); if ("throw" !== c.type) { var u = c.arg, h = u.value; return h && "object" == _typeof(h) && n.call(h, "__await") ? e.resolve(h.__await).then(function (t) { invoke("next", t, i, a); }, function (t) { invoke("throw", t, i, a); }) : e.resolve(h).then(function (t) { u.value = t, i(u); }, function (t) { return invoke("throw", t, i, a); }); } a(c.arg); } var r; o(this, "_invoke", { value: function value(t, n) { function callInvokeWithMethodAndArg() { return new e(function (e, r) { invoke(t, n, e, r); }); } return r = r ? r.then(callInvokeWithMethodAndArg, callInvokeWithMethodAndArg) : callInvokeWithMethodAndArg(); } }); } function makeInvokeMethod(e, r, n) { var o = h; return function (i, a) { if (o === f) throw new Error("Generator is already running"); if (o === s) { if ("throw" === i) throw a; return { value: t, done: !0 }; } for (n.method = i, n.arg = a;;) { var c = n.delegate; if (c) { var u = maybeInvokeDelegate(c, n); if (u) { if (u === y) continue; return u; } } if ("next" === n.method) n.sent = n._sent = n.arg;else if ("throw" === n.method) { if (o === h) throw o = s, n.arg; n.dispatchException(n.arg); } else "return" === n.method && n.abrupt("return", n.arg); o = f; var p = tryCatch(e, r, n); if ("normal" === p.type) { if (o = n.done ? s : l, p.arg === y) continue; return { value: p.arg, done: n.done }; } "throw" === p.type && (o = s, n.method = "throw", n.arg = p.arg); } }; } function maybeInvokeDelegate(e, r) { var n = r.method, o = e.iterator[n]; if (o === t) return r.delegate = null, "throw" === n && e.iterator.return && (r.method = "return", r.arg = t, maybeInvokeDelegate(e, r), "throw" === r.method) || "return" !== n && (r.method = "throw", r.arg = new TypeError("The iterator does not provide a '" + n + "' method")), y; var i = tryCatch(o, e.iterator, r.arg); if ("throw" === i.type) return r.method = "throw", r.arg = i.arg, r.delegate = null, y; var a = i.arg; return a ? a.done ? (r[e.resultName] = a.value, r.next = e.nextLoc, "return" !== r.method && (r.method = "next", r.arg = t), r.delegate = null, y) : a : (r.method = "throw", r.arg = new TypeError("iterator result is not an object"), r.delegate = null, y); } function pushTryEntry(t) { var e = { tryLoc: t[0] }; 1 in t && (e.catchLoc = t[1]), 2 in t && (e.finallyLoc = t[2], e.afterLoc = t[3]), this.tryEntries.push(e); } function resetTryEntry(t) { var e = t.completion || {}; e.type = "normal", delete e.arg, t.completion = e; } function Context(t) { this.tryEntries = [{ tryLoc: "root" }], t.forEach(pushTryEntry, this), this.reset(!0); } function values(e) { if (e || "" === e) { var r = e[a]; if (r) return r.call(e); if ("function" == typeof e.next) return e; if (!isNaN(e.length)) { var o = -1, i = function next() { for (; ++o < e.length;) if (n.call(e, o)) return next.value = e[o], next.done = !1, next; return next.value = t, next.done = !0, next; }; return i.next = i; } } throw new TypeError(_typeof(e) + " is not iterable"); } return GeneratorFunction.prototype = GeneratorFunctionPrototype, o(g, "constructor", { value: GeneratorFunctionPrototype, configurable: !0 }), o(GeneratorFunctionPrototype, "constructor", { value: GeneratorFunction, configurable: !0 }), GeneratorFunction.displayName = define(GeneratorFunctionPrototype, u, "GeneratorFunction"), e.isGeneratorFunction = function (t) { var e = "function" == typeof t && t.constructor; return !!e && (e === GeneratorFunction || "GeneratorFunction" === (e.displayName || e.name)); }, e.mark = function (t) { return Object.setPrototypeOf ? Object.setPrototypeOf(t, GeneratorFunctionPrototype) : (t.__proto__ = GeneratorFunctionPrototype, define(t, u, "GeneratorFunction")), t.prototype = Object.create(g), t; }, e.awrap = function (t) { return { __await: t }; }, defineIteratorMethods(AsyncIterator.prototype), define(AsyncIterator.prototype, c, function () { return this; }), e.AsyncIterator = AsyncIterator, e.async = function (t, r, n, o, i) { void 0 === i && (i = Promise); var a = new AsyncIterator(wrap(t, r, n, o), i); return e.isGeneratorFunction(r) ? a : a.next().then(function (t) { return t.done ? t.value : a.next(); }); }, defineIteratorMethods(g), define(g, u, "Generator"), define(g, a, function () { return this; }), define(g, "toString", function () { return "[object Generator]"; }), e.keys = function (t) { var e = Object(t), r = []; for (var n in e) r.push(n); return r.reverse(), function next() { for (; r.length;) { var t = r.pop(); if (t in e) return next.value = t, next.done = !1, next; } return next.done = !0, next; }; }, e.values = values, Context.prototype = { constructor: Context, reset: function reset(e) { if (this.prev = 0, this.next = 0, this.sent = this._sent = t, this.done = !1, this.delegate = null, this.method = "next", this.arg = t, this.tryEntries.forEach(resetTryEntry), !e) for (var r in this) "t" === r.charAt(0) && n.call(this, r) && !isNaN(+r.slice(1)) && (this[r] = t); }, stop: function stop() { this.done = !0; var t = this.tryEntries[0].completion; if ("throw" === t.type) throw t.arg; return this.rval; }, dispatchException: function dispatchException(e) { if (this.done) throw e; var r = this; function handle(n, o) { return a.type = "throw", a.arg = e, r.next = n, o && (r.method = "next", r.arg = t), !!o; } for (var o = this.tryEntries.length - 1; o >= 0; --o) { var i = this.tryEntries[o], a = i.completion; if ("root" === i.tryLoc) return handle("end"); if (i.tryLoc <= this.prev) { var c = n.call(i, "catchLoc"), u = n.call(i, "finallyLoc"); if (c && u) { if (this.prev < i.catchLoc) return handle(i.catchLoc, !0); if (this.prev < i.finallyLoc) return handle(i.finallyLoc); } else if (c) { if (this.prev < i.catchLoc) return handle(i.catchLoc, !0); } else { if (!u) throw new Error("try statement without catch or finally"); if (this.prev < i.finallyLoc) return handle(i.finallyLoc); } } } }, abrupt: function abrupt(t, e) { for (var r = this.tryEntries.length - 1; r >= 0; --r) { var o = this.tryEntries[r]; if (o.tryLoc <= this.prev && n.call(o, "finallyLoc") && this.prev < o.finallyLoc) { var i = o; break; } } i && ("break" === t || "continue" === t) && i.tryLoc <= e && e <= i.finallyLoc && (i = null); var a = i ? i.completion : {}; return a.type = t, a.arg = e, i ? (this.method = "next", this.next = i.finallyLoc, y) : this.complete(a); }, complete: function complete(t, e) { if ("throw" === t.type) throw t.arg; return "break" === t.type || "continue" === t.type ? this.next = t.arg : "return" === t.type ? (this.rval = this.arg = t.arg, this.method = "return", this.next = "end") : "normal" === t.type && e && (this.next = e), y; }, finish: function finish(t) { for (var e = this.tryEntries.length - 1; e >= 0; --e) { var r = this.tryEntries[e]; if (r.finallyLoc === t) return this.complete(r.completion, r.afterLoc), resetTryEntry(r), y; } }, catch: function _catch(t) { for (var e = this.tryEntries.length - 1; e >= 0; --e) { var r = this.tryEntries[e]; if (r.tryLoc === t) { var n = r.completion; if ("throw" === n.type) { var o = n.arg; resetTryEntry(r); } return o; } } throw new Error("illegal catch attempt"); }, delegateYield: function delegateYield(e, r, n) { return this.delegate = { iterator: values(e), resultName: r, nextLoc: n }, "next" === this.method && (this.arg = t), y; } }, e; }
3
+ function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
4
+ function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
5
+ function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
6
+ function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : String(i); }
7
+ function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
8
+ function _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); }
9
+ function _nonIterableSpread() { throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
10
+ function _iterableToArray(iter) { if (typeof Symbol !== "undefined" && iter[Symbol.iterator] != null || iter["@@iterator"] != null) return Array.from(iter); }
11
+ function _arrayWithoutHoles(arr) { if (Array.isArray(arr)) return _arrayLikeToArray(arr); }
12
+ function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } }
13
+ function _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err); } _next(undefined); }); }; }
14
+ function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }
15
+ function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
16
+ function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
17
+ function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i]; return arr2; }
18
+ function _iterableToArrayLimit(r, l) { var t = null == r ? null : "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (null != t) { var e, n, i, u, a = [], f = !0, o = !1; try { if (i = (t = t.call(r)).next, 0 === l) { if (Object(t) !== t) return; f = !1; } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0); } catch (r) { o = !0, n = r; } finally { try { if (!f && null != t.return && (u = t.return(), Object(u) !== u)) return; } finally { if (o) throw n; } } return a; } }
19
+ function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
20
+ import React, { useContext, useEffect, useRef, useState } from 'react';
2
21
  import { useTranslation } from 'react-i18next';
3
22
  import styles from "./index.module.css";
4
23
  import classNames from 'classnames';
5
24
  import ReasoningContent from "../reasoning-content/index";
6
- import { processString } from "../../utils/tools";
25
+ import { processString, formatDurationMs } from "../../utils/tools";
7
26
  import { MMarkdown } from '@myun/gimi-design';
8
27
  import AskCard from "../ask-card";
9
28
  import WorkFlowContent from "../work-flow-content";
@@ -13,14 +32,20 @@ import ExcelCard from "../excel-components/ExcelCard";
13
32
  import WordCard from "../custom-render/WordCard";
14
33
  import { IconTickCircle } from '@douyinfe/semi-icons';
15
34
  import VoicePlay from "../message-actions/VoicePlay";
16
- import { useAppSelector } from "../../store/hooks";
35
+ import { useAppDispatch, useAppSelector } from "../../store/hooks";
17
36
  import CopyButton from "../message-actions/CopyButton";
18
37
  import LikeButton from "../message-actions/LikeButton";
19
38
  import UnLikeButton from "../message-actions/UnLikeButton";
20
39
  import RegenerateButton from "../message-actions/RegenerateButton";
21
40
  import ProductTag from "../product-tag";
41
+ import ToolList from "./component/tool-list";
42
+ import IconFont from "../iconfont-com";
43
+ import Artifacts from "./component/artifacts";
44
+ import ChatContext from "../templates/chatContext";
45
+ import { setMessageList } from "../../store/slices/gimiMenuSlice";
46
+ import { TOOL_MODULE_TYPES, getToolNameByStatus } from "../../hooks/useChatStream";
22
47
  var AnswerItem = function AnswerItem(_ref) {
23
- var _agentDetail$voiceCon;
48
+ var _item$thinkingInfo3, _item$thinkingInfo4, _item$thinkingInfo5, _item$toolList, _item$artifacts, _agentDetail$voiceCon;
24
49
  var item = _ref.item,
25
50
  onSucess = _ref.onSucess,
26
51
  onFailure = _ref.onFailure,
@@ -30,6 +55,7 @@ var AnswerItem = function AnswerItem(_ref) {
30
55
  handleShowCourse = _ref.handleShowCourse,
31
56
  handleClickPromptWord = _ref.handleClickPromptWord,
32
57
  handleClickAskList = _ref.handleClickAskList,
58
+ handleClickConfirm = _ref.handleClickConfirm,
33
59
  playTTSByText = _ref.playTTSByText,
34
60
  stopTTSByText = _ref.stopTTSByText,
35
61
  isVoicePlaying = _ref.isVoicePlaying,
@@ -52,8 +78,19 @@ var AnswerItem = function AnswerItem(_ref) {
52
78
  model = _ref.model,
53
79
  onCurrentTraceVideoClick = _ref.onCurrentTraceVideoClick,
54
80
  curPlayer = _ref.curPlayer;
81
+ var _useState = useState(true),
82
+ _useState2 = _slicedToArray(_useState, 2),
83
+ expendThinking = _useState2[0],
84
+ setExpendThinking = _useState2[1];
85
+ var _useState3 = useState(false),
86
+ _useState4 = _slicedToArray(_useState3, 2),
87
+ toolLoading = _useState4[0],
88
+ setToolLoading = _useState4[1];
55
89
  var _useTranslation = useTranslation(),
56
90
  t = _useTranslation.t;
91
+ var _useContext = useContext(ChatContext),
92
+ apiService = _useContext.apiService;
93
+ var dispatch = useAppDispatch();
57
94
  var isMsgRecieving = useAppSelector(function (state) {
58
95
  return state.gimiMenu.isMsgRecieving;
59
96
  });
@@ -65,6 +102,12 @@ var AnswerItem = function AnswerItem(_ref) {
65
102
  var platform = useAppSelector(function (state) {
66
103
  return state.gimiMenu.platform;
67
104
  });
105
+ var messageList = useAppSelector(function (state) {
106
+ return state.gimiMenu.messageList;
107
+ });
108
+ var agentObj = useAppSelector(function (state) {
109
+ return state.gimiMenu.agentObj || {};
110
+ });
68
111
  var handleLinkClickCapture = React.useCallback(function (e) {
69
112
  if (platform !== 'preview') return;
70
113
  var target = e.target;
@@ -101,6 +144,8 @@ var AnswerItem = function AnswerItem(_ref) {
101
144
  var agentDetail = useAppSelector(function (state) {
102
145
  return state.gimiMenu.agentObj || {};
103
146
  });
147
+ var agentDetailRef = useRef(agentDetail);
148
+ agentDetailRef.current = agentDetail;
104
149
  var customRender = React.useMemo(function () {
105
150
  return [{
106
151
  type: 'excel',
@@ -156,6 +201,91 @@ var AnswerItem = function AnswerItem(_ref) {
156
201
  // }
157
202
  ];
158
203
  }, [onDownloadCallback, model, item.id]);
204
+ var handleExpendThinking = /*#__PURE__*/function () {
205
+ var _ref2 = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee() {
206
+ var _item$thinkingInfo;
207
+ var _res$result, res, list, toolList, lastMessage, newMessageList;
208
+ return _regeneratorRuntime().wrap(function _callee$(_context) {
209
+ while (1) switch (_context.prev = _context.next) {
210
+ case 0:
211
+ setExpendThinking(!expendThinking);
212
+ if (!(!((_item$thinkingInfo = item.thinkingInfo) !== null && _item$thinkingInfo !== void 0 && _item$thinkingInfo.loaded) && apiService)) {
213
+ _context.next = 15;
214
+ break;
215
+ }
216
+ setToolLoading(true);
217
+ _context.next = 5;
218
+ return apiService.getAgentToolList({
219
+ conversationId: item.conversationId,
220
+ chatId: item.chatId,
221
+ pageSize: 200
222
+ });
223
+ case 5:
224
+ res = _context.sent;
225
+ list = (res === null || res === void 0 || (_res$result = res.result) === null || _res$result === void 0 ? void 0 : _res$result.list) || [];
226
+ if (list !== null && list !== void 0 && list.length) {
227
+ _context.next = 9;
228
+ break;
229
+ }
230
+ return _context.abrupt("return");
231
+ case 9:
232
+ // 组装tool数据
233
+ toolList = [];
234
+ list.forEach(function (item) {
235
+ if ([].concat(_toConsumableArray(TOOL_MODULE_TYPES), ["user_confirm"]).includes(item.moduleType)) {
236
+ var _data;
237
+ var data = null;
238
+ try {
239
+ data = JSON.parse(item.eventData || '{}');
240
+ } catch (error) {}
241
+
242
+ // 为新节点类型根据 status 生成 toolName
243
+ var isNewNodeType = !['tool_invocation', 'tool_result', "user_confirm"].includes(item.moduleType);
244
+ var toolName = isNewNodeType ? getToolNameByStatus(item.moduleType, 'COMPLETED') : (_data = data) === null || _data === void 0 ? void 0 : _data.toolName;
245
+ var index = toolList.findIndex(function (v) {
246
+ var _data2;
247
+ return v.id === ((_data2 = data) === null || _data2 === void 0 ? void 0 : _data2.id);
248
+ });
249
+ if (index < 0) {
250
+ toolList.push(_objectSpread(_objectSpread({}, data), {}, {
251
+ status: 'COMPLETED',
252
+ content: data.content || '',
253
+ toolName: toolName,
254
+ confirmStatus: item.confirmStatus
255
+ }));
256
+ } else {
257
+ toolList[index] = _objectSpread(_objectSpread({}, toolList[index]), {}, {
258
+ content: data.content || toolList[index].content
259
+ });
260
+ }
261
+ }
262
+ });
263
+ lastMessage = messageList[messageList.length - 1];
264
+ newMessageList = [].concat(_toConsumableArray(messageList.slice(0, -1)), [_objectSpread(_objectSpread({}, lastMessage), {}, {
265
+ moduleType: item.moduleType,
266
+ toolList: toolList,
267
+ thinkingInfo: _objectSpread(_objectSpread({}, item.thinkingInfo), {}, {
268
+ loaded: true
269
+ })
270
+ })]);
271
+ dispatch(setMessageList({
272
+ messageList: newMessageList
273
+ }));
274
+ setToolLoading(false);
275
+ case 15:
276
+ case "end":
277
+ return _context.stop();
278
+ }
279
+ }, _callee);
280
+ }));
281
+ return function handleExpendThinking() {
282
+ return _ref2.apply(this, arguments);
283
+ };
284
+ }();
285
+ useEffect(function () {
286
+ var _item$thinkingInfo2;
287
+ setExpendThinking(!((_item$thinkingInfo2 = item.thinkingInfo) !== null && _item$thinkingInfo2 !== void 0 && _item$thinkingInfo2.collapse));
288
+ }, [(_item$thinkingInfo3 = item.thinkingInfo) === null || _item$thinkingInfo3 === void 0 ? void 0 : _item$thinkingInfo3.collapse]);
159
289
  return /*#__PURE__*/React.createElement("div", {
160
290
  className: styles.title,
161
291
  onClickCapture: handleLinkClickCapture
@@ -163,10 +293,29 @@ var AnswerItem = function AnswerItem(_ref) {
163
293
  className: classNames(styles.answer)
164
294
  }, item.mcp && /*#__PURE__*/React.createElement(WorkFlowContent, {
165
295
  chatItem: item
296
+ }), (agentDetail === null || agentDetail === void 0 ? void 0 : agentDetail.agentMode) === 'workflow' ? /*#__PURE__*/React.createElement(React.Fragment, null, item.vipLevel === 1 && item.reasoningContent && /*#__PURE__*/React.createElement(ReasoningContent, {
297
+ reasoningTitle: reasoningTitle,
298
+ item: item
299
+ })) : /*#__PURE__*/React.createElement("div", {
300
+ className: styles.thinkingContent
301
+ }, ((_item$thinkingInfo4 = item.thinkingInfo) === null || _item$thinkingInfo4 === void 0 ? void 0 : _item$thinkingInfo4.status) === "COMPLETED" && /*#__PURE__*/React.createElement("div", {
302
+ className: styles.thinkingLabel,
303
+ onClick: function onClick() {
304
+ return handleExpendThinking();
305
+ }
306
+ }, /*#__PURE__*/React.createElement("div", {
307
+ className: styles.toolName
308
+ }, (_item$thinkingInfo5 = item.thinkingInfo) === null || _item$thinkingInfo5 === void 0 ? void 0 : _item$thinkingInfo5.toolName), /*#__PURE__*/React.createElement(IconFont, {
309
+ className: classNames(styles.icon, _defineProperty({}, styles.hasContent, expendThinking)),
310
+ type: expendThinking ? "icon-a-jiantoucu2x-copy1" : "icon-a-jiantoucu2x",
311
+ size: 12
312
+ })), expendThinking && /*#__PURE__*/React.createElement(React.Fragment, null, (item === null || item === void 0 ? void 0 : item.toolList) && ((_item$toolList = item.toolList) === null || _item$toolList === void 0 ? void 0 : _item$toolList.length) > 0 && /*#__PURE__*/React.createElement(ToolList, {
313
+ toolList: item.toolList,
314
+ handleClickConfirm: handleClickConfirm
166
315
  }), item.vipLevel === 1 && item.reasoningContent && /*#__PURE__*/React.createElement(ReasoningContent, {
167
316
  reasoningTitle: reasoningTitle,
168
317
  item: item
169
- }), showTaskSuccess && /*#__PURE__*/React.createElement("div", {
318
+ }))), showTaskSuccess && /*#__PURE__*/React.createElement("div", {
170
319
  className: styles.completed
171
320
  }, /*#__PURE__*/React.createElement(IconTickCircle, {
172
321
  className: styles.checkIcon
@@ -188,7 +337,9 @@ var AnswerItem = function AnswerItem(_ref) {
188
337
  onFailure: onFailure
189
338
  }), item.stop === 1 && /*#__PURE__*/React.createElement("div", {
190
339
  className: styles.stop
191
- }, t('answer.stopped')), showOperation && /*#__PURE__*/React.createElement("div", {
340
+ }, t('answer.stopped')), item.artifacts && ((_item$artifacts = item.artifacts) === null || _item$artifacts === void 0 ? void 0 : _item$artifacts.length) > 0 && /*#__PURE__*/React.createElement(Artifacts, {
341
+ artifacts: item.artifacts
342
+ }), showOperation && /*#__PURE__*/React.createElement("div", {
192
343
  className: styles.opera
193
344
  }, (showOpera === null || showOpera === void 0 ? void 0 : showOpera(item.id)) && !item.loading && /*#__PURE__*/React.createElement("div", {
194
345
  className: styles.opera_item
@@ -209,7 +360,9 @@ var AnswerItem = function AnswerItem(_ref) {
209
360
  messageId: item.id
210
361
  }), showRegerate && enableRegenerate && /*#__PURE__*/React.createElement(RegenerateButton, {
211
362
  onRegenerateClick: onRegenerateClick
212
- }))), (item.relatedResourceList || []).length > 0 && (showCommend === null || showCommend === void 0 ? void 0 : showCommend(item.id)) && /*#__PURE__*/React.createElement("div", {
363
+ })), /*#__PURE__*/React.createElement("div", {
364
+ className: styles.totalTokensWrap
365
+ }, item !== null && item !== void 0 && item.durationMs ? formatDurationMs(item.durationMs) : '', " ", platform === 'preview' && item.totalTokens ? " | ".concat(item.totalTokens, " Tokens") : '')), (item.relatedResourceList || []).length > 0 && (showCommend === null || showCommend === void 0 ? void 0 : showCommend(item.id)) && /*#__PURE__*/React.createElement("div", {
213
366
  className: styles.quickInputList
214
367
  }, (item.relatedResourceList || []).map(function (item, index) {
215
368
  return /*#__PURE__*/React.createElement("div", {
@@ -96,6 +96,7 @@
96
96
  height: 18px;
97
97
  margin-top: 12px;
98
98
  display: flex;
99
+ align-items: center;
99
100
  }
100
101
  .opera .opera_item {
101
102
  display: flex;
@@ -108,6 +109,12 @@
108
109
  cursor: pointer;
109
110
  user-select: none;
110
111
  }
112
+ .opera .totalTokensWrap {
113
+ color: var(--theme-neutral, #4C5A70);
114
+ font-size: 14px;
115
+ line-height: 12px;
116
+ margin-left: 16px;
117
+ }
111
118
 
112
119
  .operaicon {
113
120
  height: 20px;
@@ -265,6 +272,23 @@
265
272
  padding: 20px;
266
273
  }
267
274
 
275
+ .thinkingContent .thinkingLabel {
276
+ display: flex;
277
+ align-items: center;
278
+ width: fit-content;
279
+ cursor: pointer;
280
+ }
281
+ .thinkingContent .thinkingLabel:hover .icon, .thinkingContent .thinkingLabel:hover .toolName {
282
+ color: var(--theme-neutral, #626262);
283
+ }
284
+ .thinkingContent .thinkingLabel .toolName {
285
+ color: var(--theme-mediumNeutral, #B3B2B2);
286
+ font-size: 13px;
287
+ }
288
+ .thinkingContent .thinkingLabel .icon {
289
+ color: var(--theme-mediumNeutral, #B3B2B2);
290
+ }
291
+
268
292
  :global(.markdown_container) {
269
293
  max-width: 800px;
270
294
  }
@@ -3,7 +3,7 @@ import { IChatMessageItem } from '../../interfaces/chatMessage';
3
3
  interface IProps {
4
4
  item: IChatMessageItem;
5
5
  moduleInfo: any;
6
- handleClickAskList: (item: any, operation: string, key: string, value?: string) => void;
6
+ handleClickAskList: (item: any, operation: string, key: string, value?: string, inputModel?: any) => void;
7
7
  onAskCardCallback?: () => void;
8
8
  }
9
9
  declare const AskCard: ({ item, moduleInfo, handleClickAskList, onAskCardCallback }: IProps) => React.JSX.Element;
@@ -1,2 +1,3 @@
1
1
  export { default as Keydown } from './keydown';
2
2
  export { default as TitleSlot } from './title-slot';
3
+ export { ReferSlot, SkillMention, setSkillContext } from './skill';
@@ -1,2 +1,3 @@
1
1
  export { default as Keydown } from "./keydown";
2
- export { default as TitleSlot } from "./title-slot";
2
+ export { default as TitleSlot } from "./title-slot";
3
+ export { ReferSlot, SkillMention, setSkillContext } from "./skill";
@@ -0,0 +1,30 @@
1
+ import React from 'react';
2
+ import type { IUseApi } from '../../../../apis/useApi';
3
+ import './index.less';
4
+ export interface SkillItem {
5
+ imageUrl: string;
6
+ toolDesc: string;
7
+ toolCategoryDesc: string;
8
+ toolName: string;
9
+ toolStatus: number;
10
+ toolId: number;
11
+ }
12
+ export interface MentionListRef {
13
+ onKeyDown: (props: {
14
+ event: KeyboardEvent;
15
+ exitCb?: () => void;
16
+ }) => boolean;
17
+ }
18
+ interface MentionListProps {
19
+ items: SkillItem[];
20
+ command: (props: {
21
+ item?: SkillItem;
22
+ allowHotKeySend?: boolean;
23
+ }) => void;
24
+ editor?: any;
25
+ query?: string;
26
+ agentId?: number;
27
+ apiService?: IUseApi | null;
28
+ }
29
+ declare const MentionList: React.ForwardRefExoticComponent<MentionListProps & React.RefAttributes<MentionListRef>>;
30
+ export default MentionList;
@@ -0,0 +1,181 @@
1
+ function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }
2
+ function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
3
+ function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
4
+ function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i]; return arr2; }
5
+ function _iterableToArrayLimit(r, l) { var t = null == r ? null : "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (null != t) { var e, n, i, u, a = [], f = !0, o = !1; try { if (i = (t = t.call(r)).next, 0 === l) { if (Object(t) !== t) return; f = !1; } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0); } catch (r) { o = !0, n = r; } finally { try { if (!f && null != t.return && (u = t.return(), Object(u) !== u)) return; } finally { if (o) throw n; } } return a; } }
6
+ function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
7
+ import React, { forwardRef, useEffect, useImperativeHandle, useRef, useState } from 'react';
8
+ import AiLoading from "../../../../components/ai-loading";
9
+ import "./index.less";
10
+ import { useTranslation } from 'react-i18next';
11
+ var MentionList = /*#__PURE__*/forwardRef(function (_ref, ref) {
12
+ var command = _ref.command,
13
+ query = _ref.query,
14
+ agentId = _ref.agentId,
15
+ apiService = _ref.apiService;
16
+ var _useState = useState(0),
17
+ _useState2 = _slicedToArray(_useState, 2),
18
+ selectedIndex = _useState2[0],
19
+ setSelectedIndex = _useState2[1];
20
+ var _useState3 = useState([]),
21
+ _useState4 = _slicedToArray(_useState3, 2),
22
+ skillList = _useState4[0],
23
+ setSkillList = _useState4[1];
24
+ var _useState5 = useState([]),
25
+ _useState6 = _slicedToArray(_useState5, 2),
26
+ filterOptions = _useState6[0],
27
+ setFilterOptions = _useState6[1];
28
+ var _useState7 = useState(false),
29
+ _useState8 = _slicedToArray(_useState7, 2),
30
+ loading = _useState8[0],
31
+ setLoading = _useState8[1];
32
+ var _useTranslation = useTranslation(),
33
+ t = _useTranslation.t;
34
+
35
+ // 选项面板渲染,则 Enter 快捷键应该用于选项面板中,不能用于 AIChatInput 的发送
36
+ useEffect(function () {
37
+ try {
38
+ command({
39
+ allowHotKeySend: false
40
+ });
41
+ } catch (e) {
42
+ console.error('[skill] MentionList command error:', e);
43
+ }
44
+ // 选项面板卸载,则 Enter 快捷键应该用于 AIChatInput 的发送
45
+ return function () {
46
+ command({
47
+ allowHotKeySend: true
48
+ });
49
+ };
50
+ }, [command]);
51
+
52
+ // 拉取当前智能体技能列表
53
+ useEffect(function () {
54
+ if (!apiService || !agentId) {
55
+ setSkillList([]);
56
+ setFilterOptions([]);
57
+ return;
58
+ }
59
+ var cancelled = false;
60
+ setLoading(true);
61
+ apiService.getAgentSkillList(agentId).then(function (res) {
62
+ var _ref2, _result$data;
63
+ if (cancelled) return;
64
+ // FetchResponse 结构: { message, result, status }
65
+ var result = res === null || res === void 0 ? void 0 : res.result;
66
+ var list = Array.isArray(result) ? result : (_ref2 = (_result$data = result === null || result === void 0 ? void 0 : result.data) !== null && _result$data !== void 0 ? _result$data : result === null || result === void 0 ? void 0 : result.list) !== null && _ref2 !== void 0 ? _ref2 : [];
67
+ setSkillList(list);
68
+ setFilterOptions(list);
69
+ setSelectedIndex(0);
70
+ }).catch(function (e) {
71
+ if (!cancelled) console.error('[skill] getAgentSkillList error:', e);
72
+ }).finally(function () {
73
+ if (!cancelled) setLoading(false);
74
+ });
75
+ return function () {
76
+ cancelled = true;
77
+ };
78
+ }, [apiService, agentId]);
79
+
80
+ // query 变化或数据更新时手动 filter
81
+ useEffect(function () {
82
+ var filter = query && query.length ? skillList.filter(function (item) {
83
+ return item.toolName.toLowerCase().includes((query || '').toLowerCase());
84
+ }) : skillList;
85
+ setFilterOptions(filter);
86
+ setSelectedIndex(0);
87
+ }, [query, skillList]);
88
+ var upHandler = function upHandler() {
89
+ setSelectedIndex(function (i) {
90
+ return filterOptions.length ? (i + filterOptions.length - 1) % filterOptions.length : 0;
91
+ });
92
+ };
93
+ var downHandler = function downHandler() {
94
+ setSelectedIndex(function (i) {
95
+ return filterOptions.length ? (i + 1) % filterOptions.length : 0;
96
+ });
97
+ };
98
+ var selectItem = function selectItem(id) {
99
+ var item = filterOptions[id];
100
+ if (item) {
101
+ command({
102
+ item: item
103
+ });
104
+ }
105
+ };
106
+ var onKeyDown = function onKeyDown(_ref3) {
107
+ var event = _ref3.event,
108
+ exitCb = _ref3.exitCb;
109
+ if (event.key === 'ArrowUp') {
110
+ upHandler();
111
+ return true;
112
+ }
113
+ if (event.key === 'ArrowDown') {
114
+ downHandler();
115
+ return true;
116
+ }
117
+ if (event.key === 'Enter') {
118
+ selectItem(selectedIndex);
119
+ return true;
120
+ }
121
+ if (event.key === 'Escape') {
122
+ exitCb && exitCb();
123
+ return true;
124
+ }
125
+ return false;
126
+ };
127
+
128
+ // 暴露给 ReactRenderer(component.ref),键盘事件由 suggestion 转发进来
129
+ var onKeyDownRef = useRef(onKeyDown);
130
+ onKeyDownRef.current = onKeyDown;
131
+ useImperativeHandle(ref, function () {
132
+ return {
133
+ onKeyDown: function onKeyDown(args) {
134
+ return onKeyDownRef.current(args);
135
+ }
136
+ };
137
+ }, []);
138
+ var renderItem = function renderItem(item) {
139
+ return /*#__PURE__*/React.createElement("div", {
140
+ className: "skillItem"
141
+ }, /*#__PURE__*/React.createElement("img", {
142
+ src: item.imageUrl || '',
143
+ className: "icon",
144
+ alt: ""
145
+ }), /*#__PURE__*/React.createElement("span", {
146
+ className: "name"
147
+ }, item.toolName || ''), /*#__PURE__*/React.createElement("span", {
148
+ className: "toolDesc"
149
+ }, item.toolDesc || ''));
150
+ };
151
+ return /*#__PURE__*/React.createElement("div", {
152
+ className: "ai-chat-input-custom-extension-dropdown-menu",
153
+ style: {
154
+ width: '100%'
155
+ }
156
+ }, loading ? /*#__PURE__*/React.createElement("div", {
157
+ style: {
158
+ margin: '20px'
159
+ }
160
+ }, /*#__PURE__*/React.createElement(AiLoading, null)) : filterOptions.length ? /*#__PURE__*/React.createElement("div", null, /*#__PURE__*/React.createElement("div", {
161
+ className: "skillTitle"
162
+ }, t('common.selectSkill')), filterOptions.map(function (item, index) {
163
+ return (
164
+ /*#__PURE__*/
165
+ // eslint-disable-next-line jsx-a11y/click-events-have-keyEvents
166
+ React.createElement("div", {
167
+ key: item.toolId || index,
168
+ className: index === selectedIndex ? 'is-selected optionItem' : 'optionItem',
169
+ onClick: function onClick() {
170
+ return selectItem(index);
171
+ },
172
+ onMouseEnter: function onMouseEnter() {
173
+ setSelectedIndex(index);
174
+ }
175
+ }, renderItem(item))
176
+ );
177
+ })) : /*#__PURE__*/React.createElement("div", {
178
+ className: "item"
179
+ }, t('common.noSkill')));
180
+ });
181
+ export default MentionList;
@@ -0,0 +1,3 @@
1
+ import { Node } from '@tiptap/core';
2
+ declare const ReferSlot: Node<any, any>;
3
+ export default ReferSlot;
@@ -0,0 +1,100 @@
1
+ import React from 'react';
2
+ import { Node, mergeAttributes } from '@tiptap/core';
3
+ import { ReactNodeViewRenderer, NodeViewWrapper } from '@tiptap/react';
4
+ import { AIChatInput } from '@douyinfe/semi-ui';
5
+
6
+ // referSlot 的渲染组件
7
+ function ReferSlotComponent(props) {
8
+ console.log('props', props);
9
+ var node = props.node,
10
+ deleteNode = props.deleteNode;
11
+ var info = node.attrs.info ? JSON.parse(node.attrs.info) || {} : {};
12
+ var onRemove = function onRemove(e) {
13
+ e.preventDefault();
14
+ e.stopPropagation();
15
+ deleteNode && deleteNode();
16
+ };
17
+ return /*#__PURE__*/React.createElement(NodeViewWrapper, {
18
+ className: "ai-chat-input-refer-slot-wrapper"
19
+ }, /*#__PURE__*/React.createElement("img", {
20
+ className: "ai-chat-input-refer-slot-image",
21
+ src: info.imageUrl || '',
22
+ alt: ""
23
+ }), /*#__PURE__*/React.createElement("span", {
24
+ className: "ai-chat-input-refer-slot"
25
+ }, info.toolName || ''));
26
+ }
27
+
28
+ // 创建 ReferSlot 扩展
29
+ var ReferSlot = Node.create({
30
+ name: 'referSlot',
31
+ inline: true,
32
+ group: 'inline',
33
+ atom: true,
34
+ selectable: false,
35
+ addAttributes: function addAttributes() {
36
+ return {
37
+ value: {
38
+ default: '输入内容',
39
+ parseHTML: function parseHTML(element) {
40
+ return element.getAttribute('data-value');
41
+ },
42
+ renderHTML: function renderHTML(attributes) {
43
+ return {
44
+ 'data-value': attributes.value
45
+ };
46
+ }
47
+ },
48
+ info: {
49
+ default: '',
50
+ parseHTML: function parseHTML(element) {
51
+ return element.getAttribute('data-info');
52
+ },
53
+ renderHTML: function renderHTML(attributes) {
54
+ return {
55
+ 'data-info': attributes.info
56
+ };
57
+ }
58
+ },
59
+ type: {
60
+ default: 'text',
61
+ parseHTML: function parseHTML(element) {
62
+ return element.getAttribute('data-type');
63
+ },
64
+ renderHTML: function renderHTML(attributes) {
65
+ return {
66
+ 'data-type': attributes.type
67
+ };
68
+ }
69
+ },
70
+ uniqueKey: {
71
+ default: '',
72
+ parseHTML: function parseHTML(element) {
73
+ return element.getAttribute('data-unique-key');
74
+ },
75
+ renderHTML: function renderHTML(attributes) {
76
+ return {
77
+ 'data-unique-key': attributes.uniqueKey
78
+ };
79
+ }
80
+ },
81
+ // !!! Very important, affects the cursor size before and after custom nodes
82
+ // Please be sure to add this logic to custom nodes
83
+ isCustomSlot: AIChatInput.getCustomSlotAttribute()
84
+ };
85
+ },
86
+ parseHTML: function parseHTML() {
87
+ return [{
88
+ tag: 'refer-slot'
89
+ }];
90
+ },
91
+ renderHTML: function renderHTML(_ref) {
92
+ var HTMLAttributes = _ref.HTMLAttributes;
93
+ // 序列化时输出自定义标签,保留值到 data-value
94
+ return ['refer-slot', mergeAttributes(HTMLAttributes)];
95
+ },
96
+ addNodeView: function addNodeView() {
97
+ return ReactNodeViewRenderer(ReferSlotComponent);
98
+ }
99
+ });
100
+ export default ReferSlot;
@@ -0,0 +1,10 @@
1
+ export interface SkillItem {
2
+ icon?: string;
3
+ key: string;
4
+ type: string;
5
+ name: string;
6
+ path?: string;
7
+ }
8
+ export declare const TestAction: Record<string, SkillItem[]>;
9
+ export declare const FirstLevel: string[];
10
+ export declare const SkillList: SkillItem[];