From ca412b16633ec24b22bc103475639fa0ca5d0ab0 Mon Sep 17 00:00:00 2001
From: lrhh123
Date: Mon, 8 Jul 2024 18:49:43 +0800
Subject: [PATCH] =?UTF-8?q?feat:=20=E7=A7=BB=E9=99=A4=E4=BC=81=E4=B8=9A?=
=?UTF-8?q?=E5=BE=AE=E4=BF=A1=E6=94=AF=E6=8C=81?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
README.md | 7 +-
release/app/pnpm-lock.yaml | 1015 +++++++++++++++++
src/renderer/settings-window/App.tsx | 2 +-
.../components/LLMSettings/ThirdParty.tsx | 132 +++
.../components/LLMSettings/index.tsx | 186 +++
.../components/Settings/LLMSettings.tsx | 259 -----
.../components/SettingsModal/index.tsx | 187 ---
7 files changed, 1336 insertions(+), 452 deletions(-)
create mode 100644 release/app/pnpm-lock.yaml
create mode 100644 src/renderer/settings-window/components/LLMSettings/ThirdParty.tsx
create mode 100644 src/renderer/settings-window/components/LLMSettings/index.tsx
delete mode 100644 src/renderer/settings-window/components/Settings/LLMSettings.tsx
delete mode 100644 src/renderer/settings-window/components/SettingsModal/index.tsx
diff --git a/README.md b/README.md
index 9765bb8..0f33434 100644
--- a/README.md
+++ b/README.md
@@ -9,7 +9,7 @@
简体中文
-懒人客服是一个基于 LLM 大语言模型的知识库的集成客服系统,提供开箱即用的智能客服解决方案,支持微信、企业微信、千牛、哔哩哔哩、抖音企业号、抖音、抖店、拼多多、微博聊天、小红书专业号运营、小红书、知乎等平台接入,支持文本、语音和图片,通过插件访问操作系统和互联网等外部资源,支持基于自有知识库定制企业 AI 应用.
+懒人客服是一个基于 LLM 大语言模型的知识库的集成客服系统,提供开箱即用的智能客服解决方案,支持微信、千牛、哔哩哔哩、抖音企业号、抖音、抖店、拼多多、微博聊天、小红书专业号运营、小红书、知乎等平台接入,支持文本、语音和图片,通过插件访问操作系统和互联网等外部资源,支持基于自有知识库定制企业 AI 应用.
@@ -38,7 +38,7 @@
* [Gitee] https://gitee.com/alsritter/ChatGPT-On-CS · (国内用户推荐)
## 主要功能
-- [x] 多平台支持:当前支持微信、企业微信、千牛、哔哩哔哩、抖音企业号、抖音、抖店、微博聊天、小红书专业号运营、小红书、知乎等平台,未来将不断扩展支持更多社交媒体平台.
+- [x] 多平台支持:当前支持微信、千牛、哔哩哔哩、抖音企业号、抖音、抖店、微博聊天、小红书专业号运营、小红书、知乎等平台,未来将不断扩展支持更多社交媒体平台.
- [x] 预设回复内容:允许用户设置自定义回复,以应对常见问题,提高回复效率.
- [x] 接入ChatGPT接口,根据客户的咨询内容智能生成回复,适用于处理复杂或者个性化的客户咨询.
- [x] 发送图片和二进制文件:支持发送图片等二进制文件,满足多样化的客户服务需求.
@@ -79,15 +79,12 @@ https://down.wizgadg.top/chatgpt-on-cs
- [x] 优化千牛的对接模式
- [x] 优化微信平台的回复速度
- [x] 添加中文路径的支持
-- [x] 支持企业微信外部群聊天功能
- [x] 支持自动检测人类操作后自动暂停项目
- [ ] 新增 wx 群聊需要使用 @ 机器人才能回复的功能
- [x] 支持浏览器多开功能
- [x] 支持导出聊天记录到 Excel
- [ ] 支持关键词匹配测试功能
- [x] 实现小红书回复后,自动私聊的功能
-- [x] 支持企业微信自动识别内部群聊
-- [ ] 支持企业微信自动加人功能
- [ ] 支持抖音直播平台自动回复功能
- [ ] 支持拼多多
- [ ] 支持多平台文章自动发送功能
diff --git a/release/app/pnpm-lock.yaml b/release/app/pnpm-lock.yaml
new file mode 100644
index 0000000..32cec6c
--- /dev/null
+++ b/release/app/pnpm-lock.yaml
@@ -0,0 +1,1015 @@
+lockfileVersion: '6.0'
+
+settings:
+ autoInstallPeers: true
+ excludeLinksFromLockfile: false
+
+dependencies:
+ sqlite3:
+ specifier: ^5.1.6
+ version: 5.1.7
+
+packages:
+
+ /@gar/promisify@1.1.3:
+ resolution: {integrity: sha512-k2Ty1JcVojjJFwrg/ThKi2ujJ7XNLYaFGNB/bWT9wGR+oSMJHMa5w+CUq6p/pVrKeNNgA7pCqEcjSnHVoqJQFw==}
+ requiresBuild: true
+ dev: false
+ optional: true
+
+ /@npmcli/fs@1.1.1:
+ resolution: {integrity: sha512-8KG5RD0GVP4ydEzRn/I4BNDuxDtqVbOdm8675T49OIG/NGhaK0pjPX7ZcDlvKYbA+ulvVK3ztfcF4uBdOxuJbQ==}
+ requiresBuild: true
+ dependencies:
+ '@gar/promisify': 1.1.3
+ semver: 7.6.0
+ dev: false
+ optional: true
+
+ /@npmcli/move-file@1.1.2:
+ resolution: {integrity: sha512-1SUf/Cg2GzGDyaf15aR9St9TWlb+XvbZXWpDx8YKs7MLzMH/BCeopv+y9vzrzgkfykCGuWOlSu3mZhj2+FQcrg==}
+ engines: {node: '>=10'}
+ deprecated: This functionality has been moved to @npmcli/fs
+ requiresBuild: true
+ dependencies:
+ mkdirp: 1.0.4
+ rimraf: 3.0.2
+ dev: false
+ optional: true
+
+ /@tootallnate/once@1.1.2:
+ resolution: {integrity: sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw==}
+ engines: {node: '>= 6'}
+ requiresBuild: true
+ dev: false
+ optional: true
+
+ /abbrev@1.1.1:
+ resolution: {integrity: sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==}
+ requiresBuild: true
+ dev: false
+ optional: true
+
+ /agent-base@6.0.2:
+ resolution: {integrity: sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==}
+ engines: {node: '>= 6.0.0'}
+ requiresBuild: true
+ dependencies:
+ debug: 4.3.4
+ transitivePeerDependencies:
+ - supports-color
+ dev: false
+ optional: true
+
+ /agentkeepalive@4.5.0:
+ resolution: {integrity: sha512-5GG/5IbQQpC9FpkRGsSvZI5QYeSCzlJHdpBQntCsuTOxhKD8lqKhrleg2Yi7yvMIf82Ycmmqln9U8V9qwEiJew==}
+ engines: {node: '>= 8.0.0'}
+ requiresBuild: true
+ dependencies:
+ humanize-ms: 1.2.1
+ dev: false
+ optional: true
+
+ /aggregate-error@3.1.0:
+ resolution: {integrity: sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==}
+ engines: {node: '>=8'}
+ requiresBuild: true
+ dependencies:
+ clean-stack: 2.2.0
+ indent-string: 4.0.0
+ dev: false
+ optional: true
+
+ /ansi-regex@5.0.1:
+ resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==}
+ engines: {node: '>=8'}
+ requiresBuild: true
+ dev: false
+ optional: true
+
+ /aproba@2.0.0:
+ resolution: {integrity: sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ==}
+ requiresBuild: true
+ dev: false
+ optional: true
+
+ /are-we-there-yet@3.0.1:
+ resolution: {integrity: sha512-QZW4EDmGwlYur0Yyf/b2uGucHQMa8aFUP7eu9ddR73vvhFyt4V0Vl3QHPcTNJ8l6qYOBdxgXdnBXQrHilfRQBg==}
+ engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0}
+ deprecated: This package is no longer supported.
+ requiresBuild: true
+ dependencies:
+ delegates: 1.0.0
+ readable-stream: 3.6.2
+ dev: false
+ optional: true
+
+ /balanced-match@1.0.2:
+ resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==}
+ requiresBuild: true
+ dev: false
+ optional: true
+
+ /base64-js@1.5.1:
+ resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==}
+ dev: false
+
+ /bindings@1.5.0:
+ resolution: {integrity: sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==}
+ dependencies:
+ file-uri-to-path: 1.0.0
+ dev: false
+
+ /bl@4.1.0:
+ resolution: {integrity: sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==}
+ dependencies:
+ buffer: 5.7.1
+ inherits: 2.0.4
+ readable-stream: 3.6.2
+ dev: false
+
+ /brace-expansion@1.1.11:
+ resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==}
+ requiresBuild: true
+ dependencies:
+ balanced-match: 1.0.2
+ concat-map: 0.0.1
+ dev: false
+ optional: true
+
+ /buffer@5.7.1:
+ resolution: {integrity: sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==}
+ dependencies:
+ base64-js: 1.5.1
+ ieee754: 1.2.1
+ dev: false
+
+ /cacache@15.3.0:
+ resolution: {integrity: sha512-VVdYzXEn+cnbXpFgWs5hTT7OScegHVmLhJIR8Ufqk3iFD6A6j5iSX1KuBTfNEv4tdJWE2PzA6IVFtcLC7fN9wQ==}
+ engines: {node: '>= 10'}
+ requiresBuild: true
+ dependencies:
+ '@npmcli/fs': 1.1.1
+ '@npmcli/move-file': 1.1.2
+ chownr: 2.0.0
+ fs-minipass: 2.1.0
+ glob: 7.2.3
+ infer-owner: 1.0.4
+ lru-cache: 6.0.0
+ minipass: 3.3.6
+ minipass-collect: 1.0.2
+ minipass-flush: 1.0.5
+ minipass-pipeline: 1.2.4
+ mkdirp: 1.0.4
+ p-map: 4.0.0
+ promise-inflight: 1.0.1
+ rimraf: 3.0.2
+ ssri: 8.0.1
+ tar: 6.2.1
+ unique-filename: 1.1.1
+ transitivePeerDependencies:
+ - bluebird
+ dev: false
+ optional: true
+
+ /chownr@1.1.4:
+ resolution: {integrity: sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==}
+ dev: false
+
+ /chownr@2.0.0:
+ resolution: {integrity: sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==}
+ engines: {node: '>=10'}
+ dev: false
+
+ /clean-stack@2.2.0:
+ resolution: {integrity: sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==}
+ engines: {node: '>=6'}
+ requiresBuild: true
+ dev: false
+ optional: true
+
+ /color-support@1.1.3:
+ resolution: {integrity: sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==}
+ hasBin: true
+ requiresBuild: true
+ dev: false
+ optional: true
+
+ /concat-map@0.0.1:
+ resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==}
+ requiresBuild: true
+ dev: false
+ optional: true
+
+ /console-control-strings@1.1.0:
+ resolution: {integrity: sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ==}
+ requiresBuild: true
+ dev: false
+ optional: true
+
+ /debug@4.3.4:
+ resolution: {integrity: sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==}
+ engines: {node: '>=6.0'}
+ requiresBuild: true
+ peerDependencies:
+ supports-color: '*'
+ peerDependenciesMeta:
+ supports-color:
+ optional: true
+ dependencies:
+ ms: 2.1.2
+ dev: false
+ optional: true
+
+ /decompress-response@6.0.0:
+ resolution: {integrity: sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==}
+ engines: {node: '>=10'}
+ dependencies:
+ mimic-response: 3.1.0
+ dev: false
+
+ /deep-extend@0.6.0:
+ resolution: {integrity: sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==}
+ engines: {node: '>=4.0.0'}
+ dev: false
+
+ /delegates@1.0.0:
+ resolution: {integrity: sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ==}
+ requiresBuild: true
+ dev: false
+ optional: true
+
+ /detect-libc@2.0.3:
+ resolution: {integrity: sha512-bwy0MGW55bG41VqxxypOsdSdGqLwXPI/focwgTYCFMbdUiBAxLg9CFzG08sz2aqzknwiX7Hkl0bQENjg8iLByw==}
+ engines: {node: '>=8'}
+ dev: false
+
+ /emoji-regex@8.0.0:
+ resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==}
+ requiresBuild: true
+ dev: false
+ optional: true
+
+ /encoding@0.1.13:
+ resolution: {integrity: sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A==}
+ requiresBuild: true
+ dependencies:
+ iconv-lite: 0.6.3
+ dev: false
+ optional: true
+
+ /end-of-stream@1.4.4:
+ resolution: {integrity: sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==}
+ dependencies:
+ once: 1.4.0
+ dev: false
+
+ /env-paths@2.2.1:
+ resolution: {integrity: sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==}
+ engines: {node: '>=6'}
+ requiresBuild: true
+ dev: false
+ optional: true
+
+ /err-code@2.0.3:
+ resolution: {integrity: sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA==}
+ requiresBuild: true
+ dev: false
+ optional: true
+
+ /expand-template@2.0.3:
+ resolution: {integrity: sha512-XYfuKMvj4O35f/pOXLObndIRvyQ+/+6AhODh+OKWj9S9498pHHn/IMszH+gt0fBCRWMNfk1ZSp5x3AifmnI2vg==}
+ engines: {node: '>=6'}
+ dev: false
+
+ /file-uri-to-path@1.0.0:
+ resolution: {integrity: sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==}
+ dev: false
+
+ /fs-constants@1.0.0:
+ resolution: {integrity: sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==}
+ dev: false
+
+ /fs-minipass@2.1.0:
+ resolution: {integrity: sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==}
+ engines: {node: '>= 8'}
+ dependencies:
+ minipass: 3.3.6
+ dev: false
+
+ /fs.realpath@1.0.0:
+ resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==}
+ requiresBuild: true
+ dev: false
+ optional: true
+
+ /gauge@4.0.4:
+ resolution: {integrity: sha512-f9m+BEN5jkg6a0fZjleidjN51VE1X+mPFQ2DJ0uv1V39oCLCbsGe6yjbBnp7eK7z/+GAon99a3nHuqbuuthyPg==}
+ engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0}
+ deprecated: This package is no longer supported.
+ requiresBuild: true
+ dependencies:
+ aproba: 2.0.0
+ color-support: 1.1.3
+ console-control-strings: 1.1.0
+ has-unicode: 2.0.1
+ signal-exit: 3.0.7
+ string-width: 4.2.3
+ strip-ansi: 6.0.1
+ wide-align: 1.1.5
+ dev: false
+ optional: true
+
+ /github-from-package@0.0.0:
+ resolution: {integrity: sha512-SyHy3T1v2NUXn29OsWdxmK6RwHD+vkj3v8en8AOBZ1wBQ/hCAQ5bAQTD02kW4W9tUp/3Qh6J8r9EvntiyCmOOw==}
+ dev: false
+
+ /glob@7.2.3:
+ resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==}
+ deprecated: Glob versions prior to v9 are no longer supported
+ requiresBuild: true
+ dependencies:
+ fs.realpath: 1.0.0
+ inflight: 1.0.6
+ inherits: 2.0.4
+ minimatch: 3.1.2
+ once: 1.4.0
+ path-is-absolute: 1.0.1
+ dev: false
+ optional: true
+
+ /graceful-fs@4.2.11:
+ resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==}
+ requiresBuild: true
+ dev: false
+ optional: true
+
+ /has-unicode@2.0.1:
+ resolution: {integrity: sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ==}
+ requiresBuild: true
+ dev: false
+ optional: true
+
+ /http-cache-semantics@4.1.1:
+ resolution: {integrity: sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ==}
+ requiresBuild: true
+ dev: false
+ optional: true
+
+ /http-proxy-agent@4.0.1:
+ resolution: {integrity: sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg==}
+ engines: {node: '>= 6'}
+ requiresBuild: true
+ dependencies:
+ '@tootallnate/once': 1.1.2
+ agent-base: 6.0.2
+ debug: 4.3.4
+ transitivePeerDependencies:
+ - supports-color
+ dev: false
+ optional: true
+
+ /https-proxy-agent@5.0.1:
+ resolution: {integrity: sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==}
+ engines: {node: '>= 6'}
+ requiresBuild: true
+ dependencies:
+ agent-base: 6.0.2
+ debug: 4.3.4
+ transitivePeerDependencies:
+ - supports-color
+ dev: false
+ optional: true
+
+ /humanize-ms@1.2.1:
+ resolution: {integrity: sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ==}
+ requiresBuild: true
+ dependencies:
+ ms: 2.1.3
+ dev: false
+ optional: true
+
+ /iconv-lite@0.6.3:
+ resolution: {integrity: sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==}
+ engines: {node: '>=0.10.0'}
+ requiresBuild: true
+ dependencies:
+ safer-buffer: 2.1.2
+ dev: false
+ optional: true
+
+ /ieee754@1.2.1:
+ resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==}
+ dev: false
+
+ /imurmurhash@0.1.4:
+ resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==}
+ engines: {node: '>=0.8.19'}
+ requiresBuild: true
+ dev: false
+ optional: true
+
+ /indent-string@4.0.0:
+ resolution: {integrity: sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==}
+ engines: {node: '>=8'}
+ requiresBuild: true
+ dev: false
+ optional: true
+
+ /infer-owner@1.0.4:
+ resolution: {integrity: sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A==}
+ requiresBuild: true
+ dev: false
+ optional: true
+
+ /inflight@1.0.6:
+ resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==}
+ deprecated: This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful.
+ requiresBuild: true
+ dependencies:
+ once: 1.4.0
+ wrappy: 1.0.2
+ dev: false
+ optional: true
+
+ /inherits@2.0.4:
+ resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==}
+ dev: false
+
+ /ini@1.3.8:
+ resolution: {integrity: sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==}
+ dev: false
+
+ /ip-address@9.0.5:
+ resolution: {integrity: sha512-zHtQzGojZXTwZTHQqra+ETKd4Sn3vgi7uBmlPoXVWZqYvuKmtI0l/VZTjqGmJY9x88GGOaZ9+G9ES8hC4T4X8g==}
+ engines: {node: '>= 12'}
+ requiresBuild: true
+ dependencies:
+ jsbn: 1.1.0
+ sprintf-js: 1.1.3
+ dev: false
+ optional: true
+
+ /is-fullwidth-code-point@3.0.0:
+ resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==}
+ engines: {node: '>=8'}
+ requiresBuild: true
+ dev: false
+ optional: true
+
+ /is-lambda@1.0.1:
+ resolution: {integrity: sha512-z7CMFGNrENq5iFB9Bqo64Xk6Y9sg+epq1myIcdHaGnbMTYOxvzsEtdYqQUylB7LxfkvgrrjP32T6Ywciio9UIQ==}
+ requiresBuild: true
+ dev: false
+ optional: true
+
+ /isexe@2.0.0:
+ resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==}
+ requiresBuild: true
+ dev: false
+ optional: true
+
+ /jsbn@1.1.0:
+ resolution: {integrity: sha512-4bYVV3aAMtDTTu4+xsDYa6sy9GyJ69/amsu9sYF2zqjiEoZA5xJi3BrfX3uY+/IekIu7MwdObdbDWpoZdBv3/A==}
+ requiresBuild: true
+ dev: false
+ optional: true
+
+ /lru-cache@6.0.0:
+ resolution: {integrity: sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==}
+ engines: {node: '>=10'}
+ requiresBuild: true
+ dependencies:
+ yallist: 4.0.0
+ dev: false
+
+ /make-fetch-happen@9.1.0:
+ resolution: {integrity: sha512-+zopwDy7DNknmwPQplem5lAZX/eCOzSvSNNcSKm5eVwTkOBzoktEfXsa9L23J/GIRhxRsaxzkPEhrJEpE2F4Gg==}
+ engines: {node: '>= 10'}
+ requiresBuild: true
+ dependencies:
+ agentkeepalive: 4.5.0
+ cacache: 15.3.0
+ http-cache-semantics: 4.1.1
+ http-proxy-agent: 4.0.1
+ https-proxy-agent: 5.0.1
+ is-lambda: 1.0.1
+ lru-cache: 6.0.0
+ minipass: 3.3.6
+ minipass-collect: 1.0.2
+ minipass-fetch: 1.4.1
+ minipass-flush: 1.0.5
+ minipass-pipeline: 1.2.4
+ negotiator: 0.6.3
+ promise-retry: 2.0.1
+ socks-proxy-agent: 6.2.1
+ ssri: 8.0.1
+ transitivePeerDependencies:
+ - bluebird
+ - supports-color
+ dev: false
+ optional: true
+
+ /mimic-response@3.1.0:
+ resolution: {integrity: sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==}
+ engines: {node: '>=10'}
+ dev: false
+
+ /minimatch@3.1.2:
+ resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==}
+ requiresBuild: true
+ dependencies:
+ brace-expansion: 1.1.11
+ dev: false
+ optional: true
+
+ /minimist@1.2.8:
+ resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==}
+ dev: false
+
+ /minipass-collect@1.0.2:
+ resolution: {integrity: sha512-6T6lH0H8OG9kITm/Jm6tdooIbogG9e0tLgpY6mphXSm/A9u8Nq1ryBG+Qspiub9LjWlBPsPS3tWQ/Botq4FdxA==}
+ engines: {node: '>= 8'}
+ requiresBuild: true
+ dependencies:
+ minipass: 3.3.6
+ dev: false
+ optional: true
+
+ /minipass-fetch@1.4.1:
+ resolution: {integrity: sha512-CGH1eblLq26Y15+Azk7ey4xh0J/XfJfrCox5LDJiKqI2Q2iwOLOKrlmIaODiSQS8d18jalF6y2K2ePUm0CmShw==}
+ engines: {node: '>=8'}
+ requiresBuild: true
+ dependencies:
+ minipass: 3.3.6
+ minipass-sized: 1.0.3
+ minizlib: 2.1.2
+ optionalDependencies:
+ encoding: 0.1.13
+ dev: false
+ optional: true
+
+ /minipass-flush@1.0.5:
+ resolution: {integrity: sha512-JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw==}
+ engines: {node: '>= 8'}
+ requiresBuild: true
+ dependencies:
+ minipass: 3.3.6
+ dev: false
+ optional: true
+
+ /minipass-pipeline@1.2.4:
+ resolution: {integrity: sha512-xuIq7cIOt09RPRJ19gdi4b+RiNvDFYe5JH+ggNvBqGqpQXcru3PcRmOZuHBKWK1Txf9+cQ+HMVN4d6z46LZP7A==}
+ engines: {node: '>=8'}
+ requiresBuild: true
+ dependencies:
+ minipass: 3.3.6
+ dev: false
+ optional: true
+
+ /minipass-sized@1.0.3:
+ resolution: {integrity: sha512-MbkQQ2CTiBMlA2Dm/5cY+9SWFEN8pzzOXi6rlM5Xxq0Yqbda5ZQy9sU75a673FE9ZK0Zsbr6Y5iP6u9nktfg2g==}
+ engines: {node: '>=8'}
+ requiresBuild: true
+ dependencies:
+ minipass: 3.3.6
+ dev: false
+ optional: true
+
+ /minipass@3.3.6:
+ resolution: {integrity: sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==}
+ engines: {node: '>=8'}
+ dependencies:
+ yallist: 4.0.0
+ dev: false
+
+ /minipass@5.0.0:
+ resolution: {integrity: sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==}
+ engines: {node: '>=8'}
+ dev: false
+
+ /minizlib@2.1.2:
+ resolution: {integrity: sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==}
+ engines: {node: '>= 8'}
+ dependencies:
+ minipass: 3.3.6
+ yallist: 4.0.0
+ dev: false
+
+ /mkdirp-classic@0.5.3:
+ resolution: {integrity: sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==}
+ dev: false
+
+ /mkdirp@1.0.4:
+ resolution: {integrity: sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==}
+ engines: {node: '>=10'}
+ hasBin: true
+ dev: false
+
+ /ms@2.1.2:
+ resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==}
+ requiresBuild: true
+ dev: false
+ optional: true
+
+ /ms@2.1.3:
+ resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==}
+ requiresBuild: true
+ dev: false
+ optional: true
+
+ /napi-build-utils@1.0.2:
+ resolution: {integrity: sha512-ONmRUqK7zj7DWX0D9ADe03wbwOBZxNAfF20PlGfCWQcD3+/MakShIHrMqx9YwPTfxDdF1zLeL+RGZiR9kGMLdg==}
+ dev: false
+
+ /negotiator@0.6.3:
+ resolution: {integrity: sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==}
+ engines: {node: '>= 0.6'}
+ requiresBuild: true
+ dev: false
+ optional: true
+
+ /node-abi@3.62.0:
+ resolution: {integrity: sha512-CPMcGa+y33xuL1E0TcNIu4YyaZCxnnvkVaEXrsosR3FxN+fV8xvb7Mzpb7IgKler10qeMkE6+Dp8qJhpzdq35g==}
+ engines: {node: '>=10'}
+ dependencies:
+ semver: 7.6.0
+ dev: false
+
+ /node-addon-api@7.1.0:
+ resolution: {integrity: sha512-mNcltoe1R8o7STTegSOHdnJNN7s5EUvhoS7ShnTHDyOSd+8H+UdWODq6qSv67PjC8Zc5JRT8+oLAMCr0SIXw7g==}
+ engines: {node: ^16 || ^18 || >= 20}
+ dev: false
+
+ /node-gyp@8.4.1:
+ resolution: {integrity: sha512-olTJRgUtAb/hOXG0E93wZDs5YiJlgbXxTwQAFHyNlRsXQnYzUaF2aGgujZbw+hR8aF4ZG/rST57bWMWD16jr9w==}
+ engines: {node: '>= 10.12.0'}
+ hasBin: true
+ requiresBuild: true
+ dependencies:
+ env-paths: 2.2.1
+ glob: 7.2.3
+ graceful-fs: 4.2.11
+ make-fetch-happen: 9.1.0
+ nopt: 5.0.0
+ npmlog: 6.0.2
+ rimraf: 3.0.2
+ semver: 7.6.0
+ tar: 6.2.1
+ which: 2.0.2
+ transitivePeerDependencies:
+ - bluebird
+ - supports-color
+ dev: false
+ optional: true
+
+ /nopt@5.0.0:
+ resolution: {integrity: sha512-Tbj67rffqceeLpcRXrT7vKAN8CwfPeIBgM7E6iBkmKLV7bEMwpGgYLGv0jACUsECaa/vuxP0IjEont6umdMgtQ==}
+ engines: {node: '>=6'}
+ hasBin: true
+ requiresBuild: true
+ dependencies:
+ abbrev: 1.1.1
+ dev: false
+ optional: true
+
+ /npmlog@6.0.2:
+ resolution: {integrity: sha512-/vBvz5Jfr9dT/aFWd0FIRf+T/Q2WBsLENygUaFUqstqsycmZAP/t5BvFJTK0viFmSUxiUKTUplWy5vt+rvKIxg==}
+ engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0}
+ deprecated: This package is no longer supported.
+ requiresBuild: true
+ dependencies:
+ are-we-there-yet: 3.0.1
+ console-control-strings: 1.1.0
+ gauge: 4.0.4
+ set-blocking: 2.0.0
+ dev: false
+ optional: true
+
+ /once@1.4.0:
+ resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==}
+ dependencies:
+ wrappy: 1.0.2
+ dev: false
+
+ /p-map@4.0.0:
+ resolution: {integrity: sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==}
+ engines: {node: '>=10'}
+ requiresBuild: true
+ dependencies:
+ aggregate-error: 3.1.0
+ dev: false
+ optional: true
+
+ /path-is-absolute@1.0.1:
+ resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==}
+ engines: {node: '>=0.10.0'}
+ requiresBuild: true
+ dev: false
+ optional: true
+
+ /prebuild-install@7.1.2:
+ resolution: {integrity: sha512-UnNke3IQb6sgarcZIDU3gbMeTp/9SSU1DAIkil7PrqG1vZlBtY5msYccSKSHDqa3hNg436IXK+SNImReuA1wEQ==}
+ engines: {node: '>=10'}
+ hasBin: true
+ dependencies:
+ detect-libc: 2.0.3
+ expand-template: 2.0.3
+ github-from-package: 0.0.0
+ minimist: 1.2.8
+ mkdirp-classic: 0.5.3
+ napi-build-utils: 1.0.2
+ node-abi: 3.62.0
+ pump: 3.0.0
+ rc: 1.2.8
+ simple-get: 4.0.1
+ tar-fs: 2.1.1
+ tunnel-agent: 0.6.0
+ dev: false
+
+ /promise-inflight@1.0.1:
+ resolution: {integrity: sha512-6zWPyEOFaQBJYcGMHBKTKJ3u6TBsnMFOIZSa6ce1e/ZrrsOlnHRHbabMjLiBYKp+n44X9eUI6VUPaukCXHuG4g==}
+ requiresBuild: true
+ peerDependencies:
+ bluebird: '*'
+ peerDependenciesMeta:
+ bluebird:
+ optional: true
+ dev: false
+ optional: true
+
+ /promise-retry@2.0.1:
+ resolution: {integrity: sha512-y+WKFlBR8BGXnsNlIHFGPZmyDf3DFMoLhaflAnyZgV6rG6xu+JwesTo2Q9R6XwYmtmwAFCkAk3e35jEdoeh/3g==}
+ engines: {node: '>=10'}
+ requiresBuild: true
+ dependencies:
+ err-code: 2.0.3
+ retry: 0.12.0
+ dev: false
+ optional: true
+
+ /pump@3.0.0:
+ resolution: {integrity: sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==}
+ dependencies:
+ end-of-stream: 1.4.4
+ once: 1.4.0
+ dev: false
+
+ /rc@1.2.8:
+ resolution: {integrity: sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==}
+ hasBin: true
+ dependencies:
+ deep-extend: 0.6.0
+ ini: 1.3.8
+ minimist: 1.2.8
+ strip-json-comments: 2.0.1
+ dev: false
+
+ /readable-stream@3.6.2:
+ resolution: {integrity: sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==}
+ engines: {node: '>= 6'}
+ dependencies:
+ inherits: 2.0.4
+ string_decoder: 1.3.0
+ util-deprecate: 1.0.2
+ dev: false
+
+ /retry@0.12.0:
+ resolution: {integrity: sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow==}
+ engines: {node: '>= 4'}
+ requiresBuild: true
+ dev: false
+ optional: true
+
+ /rimraf@3.0.2:
+ resolution: {integrity: sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==}
+ deprecated: Rimraf versions prior to v4 are no longer supported
+ hasBin: true
+ requiresBuild: true
+ dependencies:
+ glob: 7.2.3
+ dev: false
+ optional: true
+
+ /safe-buffer@5.2.1:
+ resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==}
+ dev: false
+
+ /safer-buffer@2.1.2:
+ resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==}
+ requiresBuild: true
+ dev: false
+ optional: true
+
+ /semver@7.6.0:
+ resolution: {integrity: sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==}
+ engines: {node: '>=10'}
+ hasBin: true
+ dependencies:
+ lru-cache: 6.0.0
+ dev: false
+
+ /set-blocking@2.0.0:
+ resolution: {integrity: sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==}
+ requiresBuild: true
+ dev: false
+ optional: true
+
+ /signal-exit@3.0.7:
+ resolution: {integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==}
+ requiresBuild: true
+ dev: false
+ optional: true
+
+ /simple-concat@1.0.1:
+ resolution: {integrity: sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q==}
+ dev: false
+
+ /simple-get@4.0.1:
+ resolution: {integrity: sha512-brv7p5WgH0jmQJr1ZDDfKDOSeWWg+OVypG99A/5vYGPqJ6pxiaHLy8nxtFjBA7oMa01ebA9gfh1uMCFqOuXxvA==}
+ dependencies:
+ decompress-response: 6.0.0
+ once: 1.4.0
+ simple-concat: 1.0.1
+ dev: false
+
+ /smart-buffer@4.2.0:
+ resolution: {integrity: sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==}
+ engines: {node: '>= 6.0.0', npm: '>= 3.0.0'}
+ requiresBuild: true
+ dev: false
+ optional: true
+
+ /socks-proxy-agent@6.2.1:
+ resolution: {integrity: sha512-a6KW9G+6B3nWZ1yB8G7pJwL3ggLy1uTzKAgCb7ttblwqdz9fMGJUuTy3uFzEP48FAs9FLILlmzDlE2JJhVQaXQ==}
+ engines: {node: '>= 10'}
+ requiresBuild: true
+ dependencies:
+ agent-base: 6.0.2
+ debug: 4.3.4
+ socks: 2.8.3
+ transitivePeerDependencies:
+ - supports-color
+ dev: false
+ optional: true
+
+ /socks@2.8.3:
+ resolution: {integrity: sha512-l5x7VUUWbjVFbafGLxPWkYsHIhEvmF85tbIeFZWc8ZPtoMyybuEhL7Jye/ooC4/d48FgOjSJXgsF/AJPYCW8Zw==}
+ engines: {node: '>= 10.0.0', npm: '>= 3.0.0'}
+ requiresBuild: true
+ dependencies:
+ ip-address: 9.0.5
+ smart-buffer: 4.2.0
+ dev: false
+ optional: true
+
+ /sprintf-js@1.1.3:
+ resolution: {integrity: sha512-Oo+0REFV59/rz3gfJNKQiBlwfHaSESl1pcGyABQsnnIfWOFt6JNj5gCog2U6MLZ//IGYD+nA8nI+mTShREReaA==}
+ requiresBuild: true
+ dev: false
+ optional: true
+
+ /sqlite3@5.1.7:
+ resolution: {integrity: sha512-GGIyOiFaG+TUra3JIfkI/zGP8yZYLPQ0pl1bH+ODjiX57sPhrLU5sQJn1y9bDKZUFYkX1crlrPfSYt0BKKdkog==}
+ requiresBuild: true
+ peerDependenciesMeta:
+ node-gyp:
+ optional: true
+ dependencies:
+ bindings: 1.5.0
+ node-addon-api: 7.1.0
+ prebuild-install: 7.1.2
+ tar: 6.2.1
+ optionalDependencies:
+ node-gyp: 8.4.1
+ transitivePeerDependencies:
+ - bluebird
+ - supports-color
+ dev: false
+
+ /ssri@8.0.1:
+ resolution: {integrity: sha512-97qShzy1AiyxvPNIkLWoGua7xoQzzPjQ0HAH4B0rWKo7SZ6USuPcrUiAFrws0UH8RrbWmgq3LMTObhPIHbbBeQ==}
+ engines: {node: '>= 8'}
+ requiresBuild: true
+ dependencies:
+ minipass: 3.3.6
+ dev: false
+ optional: true
+
+ /string-width@4.2.3:
+ resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==}
+ engines: {node: '>=8'}
+ requiresBuild: true
+ dependencies:
+ emoji-regex: 8.0.0
+ is-fullwidth-code-point: 3.0.0
+ strip-ansi: 6.0.1
+ dev: false
+ optional: true
+
+ /string_decoder@1.3.0:
+ resolution: {integrity: sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==}
+ requiresBuild: true
+ dependencies:
+ safe-buffer: 5.2.1
+ dev: false
+
+ /strip-ansi@6.0.1:
+ resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==}
+ engines: {node: '>=8'}
+ requiresBuild: true
+ dependencies:
+ ansi-regex: 5.0.1
+ dev: false
+ optional: true
+
+ /strip-json-comments@2.0.1:
+ resolution: {integrity: sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==}
+ engines: {node: '>=0.10.0'}
+ dev: false
+
+ /tar-fs@2.1.1:
+ resolution: {integrity: sha512-V0r2Y9scmbDRLCNex/+hYzvp/zyYjvFbHPNgVTKfQvVrb6guiE/fxP+XblDNR011utopbkex2nM4dHNV6GDsng==}
+ dependencies:
+ chownr: 1.1.4
+ mkdirp-classic: 0.5.3
+ pump: 3.0.0
+ tar-stream: 2.2.0
+ dev: false
+
+ /tar-stream@2.2.0:
+ resolution: {integrity: sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==}
+ engines: {node: '>=6'}
+ dependencies:
+ bl: 4.1.0
+ end-of-stream: 1.4.4
+ fs-constants: 1.0.0
+ inherits: 2.0.4
+ readable-stream: 3.6.2
+ dev: false
+
+ /tar@6.2.1:
+ resolution: {integrity: sha512-DZ4yORTwrbTj/7MZYq2w+/ZFdI6OZ/f9SFHR+71gIVUZhOQPHzVCLpvRnPgyaMpfWxxk/4ONva3GQSyNIKRv6A==}
+ engines: {node: '>=10'}
+ dependencies:
+ chownr: 2.0.0
+ fs-minipass: 2.1.0
+ minipass: 5.0.0
+ minizlib: 2.1.2
+ mkdirp: 1.0.4
+ yallist: 4.0.0
+ dev: false
+
+ /tunnel-agent@0.6.0:
+ resolution: {integrity: sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==}
+ dependencies:
+ safe-buffer: 5.2.1
+ dev: false
+
+ /unique-filename@1.1.1:
+ resolution: {integrity: sha512-Vmp0jIp2ln35UTXuryvjzkjGdRyf9b2lTXuSYUiPmzRcl3FDtYqAwOnTJkAngD9SWhnoJzDbTKwaOrZ+STtxNQ==}
+ requiresBuild: true
+ dependencies:
+ unique-slug: 2.0.2
+ dev: false
+ optional: true
+
+ /unique-slug@2.0.2:
+ resolution: {integrity: sha512-zoWr9ObaxALD3DOPfjPSqxt4fnZiWblxHIgeWqW8x7UqDzEtHEQLzji2cuJYQFCU6KmoJikOYAZlrTHHebjx2w==}
+ requiresBuild: true
+ dependencies:
+ imurmurhash: 0.1.4
+ dev: false
+ optional: true
+
+ /util-deprecate@1.0.2:
+ resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==}
+ requiresBuild: true
+ dev: false
+
+ /which@2.0.2:
+ resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==}
+ engines: {node: '>= 8'}
+ hasBin: true
+ requiresBuild: true
+ dependencies:
+ isexe: 2.0.0
+ dev: false
+ optional: true
+
+ /wide-align@1.1.5:
+ resolution: {integrity: sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg==}
+ requiresBuild: true
+ dependencies:
+ string-width: 4.2.3
+ dev: false
+ optional: true
+
+ /wrappy@1.0.2:
+ resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==}
+ requiresBuild: true
+ dev: false
+
+ /yallist@4.0.0:
+ resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==}
+ dev: false
diff --git a/src/renderer/settings-window/App.tsx b/src/renderer/settings-window/App.tsx
index a29c160..8ac3667 100644
--- a/src/renderer/settings-window/App.tsx
+++ b/src/renderer/settings-window/App.tsx
@@ -22,7 +22,7 @@ import { loader } from '@monaco-editor/react';
import { HashRouter as Router, Route, Routes } from 'react-router-dom';
import { QueryClient, QueryClientProvider } from '@tanstack/react-query';
import GeneralSettings from './components/Settings/GeneralSettings';
-import LLMSettings from './components/Settings/LLMSettings';
+import LLMSettings from './components/LLMSettings';
import PluginPage from './pages/Plugin';
import PluginEditPage from './pages/PluginEdit';
import AboutPage from './components/About';
diff --git a/src/renderer/settings-window/components/LLMSettings/ThirdParty.tsx b/src/renderer/settings-window/components/LLMSettings/ThirdParty.tsx
new file mode 100644
index 0000000..b2a3e94
--- /dev/null
+++ b/src/renderer/settings-window/components/LLMSettings/ThirdParty.tsx
@@ -0,0 +1,132 @@
+import React, { ChangeEvent } from 'react';
+import {
+ FormControl,
+ FormLabel,
+ Select,
+ Input,
+ Highlight,
+ InputGroup,
+ InputRightElement,
+ Button,
+ Text,
+} from '@chakra-ui/react';
+import { ViewIcon, ViewOffIcon } from '@chakra-ui/icons';
+import { LLMConfig } from '../../../common/services/platform/platform';
+import { ModelList, LLMTypeList } from '../../../common/utils/constants';
+
+interface ThirdPartyInterfaceProps {
+ config: LLMConfig;
+ handleUpdateConfig: (newConfig: Partial) => void;
+ handleBaseURLChange: (e: ChangeEvent) => void;
+ handleCheckHealth: () => void;
+ reply: string;
+ show: boolean;
+ setShow: React.Dispatch>;
+}
+
+const ThirdPartyInterface: React.FC = ({
+ config,
+ handleUpdateConfig,
+ handleBaseURLChange,
+ handleCheckHealth,
+ reply,
+ show,
+ setShow,
+}) => (
+ <>
+
+ 选择大模型类型
+
+
+
+
+ 选择或输入模型
+
+ handleUpdateConfig({ model: e.target.value })}
+ list="models"
+ />
+
+
+
+
+
+
+
+ API 地址设置(尾部需要加上 /v1)
+
+
+
+
+
+
+
+
+
+ API Key
+
+ handleUpdateConfig({ key: e.target.value })}
+ />
+
+
+
+
+
+
+ {reply && (
+ <>
+ 回复内容
+ {reply}
+ >
+ )}
+ >
+);
+
+export default ThirdPartyInterface;
diff --git a/src/renderer/settings-window/components/LLMSettings/index.tsx b/src/renderer/settings-window/components/LLMSettings/index.tsx
new file mode 100644
index 0000000..19c0fac
--- /dev/null
+++ b/src/renderer/settings-window/components/LLMSettings/index.tsx
@@ -0,0 +1,186 @@
+import React, { useState, useEffect, ChangeEvent } from 'react';
+import {
+ FormControl,
+ FormLabel,
+ Select,
+ VStack,
+ Text,
+ useToast,
+ Stack,
+ Skeleton,
+} from '@chakra-ui/react';
+import { useQuery } from '@tanstack/react-query';
+import {
+ getConfig,
+ updateConfig,
+ checkGptHealth,
+} from '../../../common/services/platform/controller';
+import { LLMConfig } from '../../../common/services/platform/platform';
+import ThirdPartyInterface from './ThirdParty';
+
+const LazybonesToolbox: React.FC = () => 懒人百宝箱接入的内容;
+
+const UseCoze: React.FC = () => 使用 Coze 的内容;
+
+interface LLMSettingsProps {
+ appId?: string;
+ instanceId?: string;
+}
+
+const LLMSettings: React.FC = ({ appId, instanceId }) => {
+ const toast = useToast();
+ const [show, setShow] = useState(false);
+ const [reply, setReply] = useState('');
+ const [selectedOption, setSelectedOption] = useState('thirdParty');
+
+ const { data, isLoading } = useQuery(
+ ['config', 'llm', appId, instanceId],
+ async () => {
+ try {
+ const resp = await getConfig({
+ appId,
+ instanceId,
+ type: 'llm',
+ });
+ return resp;
+ } catch (error) {
+ const errormsg =
+ error instanceof Error ? error.message : JSON.stringify(error);
+ toast({
+ title: '获取配置失败',
+ description: errormsg,
+ status: 'error',
+ duration: 5000,
+ isClosable: true,
+ });
+
+ return null;
+ }
+ },
+ );
+
+ const [config, setConfig] = useState({
+ appId: '',
+ instanceId: '',
+ llmType: '',
+ model: '',
+ baseUrl: '',
+ key: '',
+ });
+
+ useEffect(() => {
+ if (data) {
+ const obj = data.data as LLMConfig;
+ setConfig(obj);
+ }
+ }, [data]);
+
+ const handleUpdateConfig = async (newConfig: Partial) => {
+ const updatedConfig = { ...config, ...newConfig };
+ setConfig(updatedConfig);
+ try {
+ await updateConfig({
+ appId,
+ instanceId,
+ type: 'llm',
+ cfg: updatedConfig,
+ });
+ } catch (error) {
+ const errormsg =
+ error instanceof Error ? error.message : JSON.stringify(error);
+ toast({
+ title: '更新配置失败',
+ description: errormsg,
+ status: 'error',
+ duration: 5000,
+ isClosable: true,
+ });
+ }
+ };
+
+ const handleBaseURLChange = (e: ChangeEvent) => {
+ let { value } = e.target;
+ if (!value.startsWith('http://') && !value.startsWith('https://')) {
+ value = `https://${value}`;
+ }
+
+ handleUpdateConfig({ baseUrl: value });
+ };
+
+ const handleCheckHealth = async () => {
+ try {
+ if (!config) return;
+ const resp = await checkGptHealth(config);
+ if (!resp.status) {
+ throw new Error(resp.message);
+ }
+
+ setReply(resp.message);
+
+ toast({
+ title: '连接成功',
+ position: 'top',
+ description: 'GPT 连接成功',
+ status: 'success',
+ duration: 5000,
+ isClosable: true,
+ });
+ } catch (error) {
+ const errormsg =
+ error instanceof Error ? error.message : JSON.stringify(error);
+ toast({
+ title: '连接失败',
+ position: 'top',
+ description: errormsg,
+ status: 'error',
+ duration: 5000,
+ isClosable: true,
+ });
+ }
+ };
+
+ if (isLoading) {
+ return (
+
+
+
+
+
+ );
+ }
+
+ return (
+
+
+ 选择选项
+
+
+
+ {selectedOption === 'thirdParty' && (
+
+ )}
+
+ {selectedOption === 'lazybonesToolbox' && }
+
+ {selectedOption === 'useCoze' && }
+
+ );
+};
+
+export default LLMSettings;
diff --git a/src/renderer/settings-window/components/Settings/LLMSettings.tsx b/src/renderer/settings-window/components/Settings/LLMSettings.tsx
deleted file mode 100644
index 038be76..0000000
--- a/src/renderer/settings-window/components/Settings/LLMSettings.tsx
+++ /dev/null
@@ -1,259 +0,0 @@
-import React, { useState, useEffect } from 'react';
-import {
- FormControl,
- FormLabel,
- Select,
- Input,
- Highlight,
- InputGroup,
- InputRightElement,
- Button,
- VStack,
- Text,
- useToast,
- Stack,
- Skeleton,
-} from '@chakra-ui/react';
-import { useQuery } from '@tanstack/react-query';
-import { ViewIcon, ViewOffIcon } from '@chakra-ui/icons';
-import {
- getConfig,
- updateConfig,
- checkGptHealth,
-} from '../../../common/services/platform/controller';
-import { LLMConfig } from '../../../common/services/platform/platform.d';
-import { ModelList, LLMTypeList } from '../../../common/utils/constants';
-
-const LLMSettings = ({
- appId,
- instanceId,
-}: {
- appId?: string;
- instanceId?: string;
-}) => {
- const toast = useToast();
- const [show, setShow] = useState(false);
- const [reply, setReply] = useState(''); // 新增一个状态用于展示回复内容
-
- const { data, isLoading } = useQuery(
- ['config', 'llm', appId, instanceId],
- async () => {
- try {
- const resp = await getConfig({
- appId,
- instanceId,
- type: 'llm',
- });
- return resp;
- } catch (error) {
- const errormsg =
- error instanceof Error ? error.message : JSON.stringify(error);
- toast({
- title: '获取配置失败',
- description: errormsg,
- status: 'error',
- duration: 5000,
- isClosable: true,
- });
-
- return null;
- }
- },
- );
-
- const [config, setConfig] = useState({
- appId: '',
- instanceId: '',
- llmType: '',
- model: '',
- baseUrl: '',
- key: '',
- });
-
- useEffect(() => {
- if (data) {
- const obj = data.data as LLMConfig;
- setConfig(obj);
- }
- }, [data]);
-
- const handleUpdateConfig = async (newConfig: Partial) => {
- const updatedConfig = { ...config, ...newConfig };
- setConfig(updatedConfig);
- try {
- await updateConfig({
- appId,
- instanceId,
- type: 'llm',
- cfg: updatedConfig,
- });
- } catch (error) {
- const errormsg =
- error instanceof Error ? error.message : JSON.stringify(error);
- toast({
- title: '更新配置失败',
- description: errormsg,
- status: 'error',
- duration: 5000,
- isClosable: true,
- });
- }
- };
-
- const handleBaseURLChange = (e: React.ChangeEvent) => {
- let { value } = e.target;
- if (!value.startsWith('http://') && !value.startsWith('https://')) {
- value = `https://${value}`;
- }
-
- handleUpdateConfig({ baseUrl: value });
- };
-
- const handleCheckHealth = async () => {
- try {
- if (!config) return;
- const resp = await checkGptHealth(config);
- if (!resp.status) {
- throw new Error(resp.message);
- }
-
- setReply(resp.message); // 设置回复内容
-
- toast({
- title: '连接成功',
- position: 'top',
- description: 'GPT 连接成功',
- status: 'success',
- duration: 5000,
- isClosable: true,
- });
- } catch (error) {
- const errormsg =
- error instanceof Error ? error.message : JSON.stringify(error);
- toast({
- title: '连接失败',
- position: 'top',
- description: errormsg,
- status: 'error',
- duration: 5000,
- isClosable: true,
- });
- }
- };
-
- if (isLoading) {
- return (
-
-
-
-
-
- );
- }
-
- return (
-
- <>
-
- 选择大模型类型
-
-
-
-
- 选择或输入模型
-
- handleUpdateConfig({ model: e.target.value })}
- list="models"
- />
-
-
-
-
-
-
-
- API 地址设置(尾部需要加上 /v1)
-
-
-
-
-
-
-
-
-
-
- API Key
-
- handleUpdateConfig({ key: e.target.value })}
- />
-
-
-
-
-
-
- {/* 新增一个展示回复内容的块 */}
- {reply && (
- <>
- 回复内容
- {reply}
- >
- )}
- >
-
- );
-};
-
-export default LLMSettings;
diff --git a/src/renderer/settings-window/components/SettingsModal/index.tsx b/src/renderer/settings-window/components/SettingsModal/index.tsx
deleted file mode 100644
index e9a0fb8..0000000
--- a/src/renderer/settings-window/components/SettingsModal/index.tsx
+++ /dev/null
@@ -1,187 +0,0 @@
-import React, { useEffect, useState, useCallback } from 'react';
-import {
- ChakraProvider,
- Tabs,
- TabList,
- TabPanels,
- Tab,
- TabPanel,
- Modal,
- ModalOverlay,
- ModalContent,
- ModalHeader,
- ModalCloseButton,
- ModalBody,
- Checkbox,
- Box,
- Flex,
- Text,
- useToast,
-} from '@chakra-ui/react';
-import GeneralSettings from '../Settings/GeneralSettings';
-import LLMSettings from '../Settings/LLMSettings';
-import PluginSettings from '../Settings/PluginSettings';
-import {
- activeConfig,
- checkConfigActive,
-} from '../../../common/services/platform/controller';
-// import { useAppManager } from './AppManagerContext';
-
-const SettingsModal = ({
- isOpen,
- onClose,
- appId,
- instanceId,
-}: {
- isOpen: boolean;
- onClose: () => void;
- appId?: string;
- instanceId?: string;
-}) => {
- // const { data: appInfo } = useAppManager();
- const [appName, setAppName] = useState(undefined);
-
- const toast = useToast();
- const [isActive, setIsActive] = useState(false);
- const [data, setData] = useState<{
- active: boolean;
- } | null>(null);
-
- const fetchConfigActive = useCallback(async () => {
- try {
- const resp = await checkConfigActive({ appId, instanceId });
- // @ts-ignore
- setData(resp.data);
- } catch (error) {
- const errormsg =
- error instanceof Error ? error.message : JSON.stringify(error);
- toast({
- title: '获取配置失败',
- description: errormsg,
- status: 'error',
- duration: 5000,
- isClosable: true,
- });
- setData(null);
- }
- // eslint-disable-next-line react-hooks/exhaustive-deps
- }, [appId, instanceId]);
-
- useEffect(() => {
- // setAppName(appInfo?.data.find((app) => app.id === appId)?.name);
- fetchConfigActive();
- // eslint-disable-next-line react-hooks/exhaustive-deps
- }, [appId, instanceId]);
-
- useEffect(() => {
- if (data) {
- setIsActive(data.active);
- }
- }, [data]);
-
- const handleCheckboxChange = useCallback(
- async (event: React.ChangeEvent) => {
- if (!data) {
- return;
- }
-
- try {
- setIsActive(event.target.checked);
- await activeConfig({
- active: event.target.checked,
- appId,
- instanceId,
- });
- toast({
- title: '更新配置成功',
- position: 'top',
- status: 'success',
- duration: 5000,
- isClosable: true,
- });
- } catch (error) {
- const errormsg =
- error instanceof Error ? error.message : JSON.stringify(error);
- toast({
- title: '更新配置失败',
- description: errormsg,
- status: 'error',
- duration: 5000,
- isClosable: true,
- });
- }
- },
- // eslint-disable-next-line react-hooks/exhaustive-deps
- [appId, instanceId],
- );
-
- return (
-
-
-
-
-
- 设置
-
- 激活{' '}
- {instanceId ? `客服 ${instanceId} 设置` : `应用 ${appName} 设置`}
-
-
- 请注意:激活设置后,设置才会生效
-
-
-
-
- {!isActive && (
-
-
- 请先激活设置
-
-
- )}
-
-
-
- 通用设置
- AI 配置
- 插件设置
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- );
-};
-
-export default React.memo(SettingsModal);