From e482af6f87ef2a5421f7e383b5c66d1c19802309 Mon Sep 17 00:00:00 2001 From: lazy <2512087764@qq.com> Date: Tue, 19 Dec 2023 22:47:05 +0800 Subject: [PATCH] =?UTF-8?q?=E7=AC=AC=E4=BA=8C=E6=AC=A1=E9=87=8D=E5=A4=A7?= =?UTF-8?q?=E6=9B=B4=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/.vuepress/sidebar.ts | 48 +- src/posts/PluginsDevelop.md | 4 +- src/posts/PluginsUse/README.md | 13 - src/posts/deploymentTutorial/manual.md | 4 +- .../pythonInstall.md | 35 + .../yirimiraiAndPythonForManual/yirimirai.md | 153 ++++ src/posts/developTutorial/PluginsDevelop.md | 491 +++++++++++++ src/posts/developTutorial/technologyInfo.md | 121 ++++ src/posts/pluginsAbout/pluginsIntro.md | 117 ++++ .../pluginsList.md | 22 +- src/posts/pluginsAbout/pluginsUse.md | 103 +++ .../somePluginsUseTutorial}/plugin_network.md | 0 .../somePluginsUseTutorial}/plugin_voice.md | 0 yarn.lock | 653 ++++++------------ 14 files changed, 1278 insertions(+), 486 deletions(-) delete mode 100644 src/posts/PluginsUse/README.md create mode 100644 src/posts/deploymentTutorial/yirimiraiAndPythonForManual/pythonInstall.md create mode 100644 src/posts/deploymentTutorial/yirimiraiAndPythonForManual/yirimirai.md create mode 100644 src/posts/developTutorial/PluginsDevelop.md create mode 100644 src/posts/developTutorial/technologyInfo.md create mode 100644 src/posts/pluginsAbout/pluginsIntro.md rename src/posts/{PluginsUse => pluginsAbout}/pluginsList.md (93%) create mode 100644 src/posts/pluginsAbout/pluginsUse.md rename src/posts/{PluginsUse => pluginsAbout/somePluginsUseTutorial}/plugin_network.md (100%) rename src/posts/{PluginsUse => pluginsAbout/somePluginsUseTutorial}/plugin_voice.md (100%) diff --git a/src/.vuepress/sidebar.ts b/src/.vuepress/sidebar.ts index d49316c66..5d62ca952 100644 --- a/src/.vuepress/sidebar.ts +++ b/src/.vuepress/sidebar.ts @@ -8,7 +8,28 @@ export default sidebar({ icon: "blog", prefix: "posts/deploymentTutorial/", link: "posts/deploymentTutorial/", - children: "structure", + children: [ + { + text: "手动部署(推荐,可以在所有平台上使用)", + icon: "support", + link: "manual", + }, + { + text: "安装器部署(Win)(不推荐,长时间未维护)", + icon: "list", + link: "auto_app_win", + }, + { + text: "Docker部署(仅推荐在Linux上使用)", + icon: "list", + link: "auto_docker", + }, + { + text: "安装器部署(Linux)(不推荐,已经长时间未维护)", + icon: "list", + link: "auto_app_linux", + }, + ], }, { text: "功能介绍", @@ -17,13 +38,6 @@ export default sidebar({ link: "posts/functionIntroduction", children: "structure", }, - { - text: "插件使用", - icon: "plugin", - prefix: "posts/PluginsUse/", - link: "posts/PluginsUse/", - children: "structure", - }, { text: "常见报错", icon: "info", @@ -38,11 +52,25 @@ export default sidebar({ prefix: "posts/Q&A", children: "structure", }, + { + text: "插件介绍", + icon: "plugin", + prefix: "posts/pluginsAbout/", + link: "posts/pluginsAbout/pluginsIntro", + collapsible: true, + children: [ + { + text: "插件列表", + icon: "list", + link: "pluginsList", + }, + ], + }, { text: "插件开发", - icon: "code", + icon: "editor", link: "posts/PluginsDevelop", - prefix: "posts/PluginsDevelop", + prefix: "posts/PluginsDevelop", children: "structure", }, ], diff --git a/src/posts/PluginsDevelop.md b/src/posts/PluginsDevelop.md index c7084217f..ac75dc4f0 100644 --- a/src/posts/PluginsDevelop.md +++ b/src/posts/PluginsDevelop.md @@ -12,8 +12,8 @@ category: index: false --- -> 请先阅读[插件使用页](https://github.com/RockChinQ/QChatGPT/wiki/5-%E6%8F%92%E4%BB%B6%E4%BD%BF%E7%94%A8) -> 请先阅读[技术信息页](https://github.com/RockChinQ/QChatGPT/wiki/4-%E6%8A%80%E6%9C%AF%E4%BF%A1%E6%81%AF) +> 请先阅读[插件使用页](/posts/pluginsAbout/pluginsIntro) +> 请先阅读[技术信息页](/posts/developTutorial/technologyInfo) > 建议先阅读本项目源码,了解项目架构 > 问题、需求请到仓库issue发起 diff --git a/src/posts/PluginsUse/README.md b/src/posts/PluginsUse/README.md deleted file mode 100644 index 5aff91992..000000000 --- a/src/posts/PluginsUse/README.md +++ /dev/null @@ -1,13 +0,0 @@ ---- -head: - - - meta - - name: keywords - content: ChatGPT QQ机器人插件,QChatGPT项目插件 -title: 插件使用 -icon: blog -date: 2023-09-30 -category: - - 插件使用 -index: false ---- - \ No newline at end of file diff --git a/src/posts/deploymentTutorial/manual.md b/src/posts/deploymentTutorial/manual.md index 8665aefbf..5996e04b0 100644 --- a/src/posts/deploymentTutorial/manual.md +++ b/src/posts/deploymentTutorial/manual.md @@ -12,7 +12,7 @@ category: - 部署教程 --- :::warning -请使用Python 3.9.x以上版本 +请使用Python 3.9.x以上版本,没有Python的需自行安装,参考[此教程](/posts/deploymentTutorial/yirimiraiAndPythonForManual/pythonInstall.md) ::: :::info 目录 @@ -26,7 +26,7 @@ category:
mirai -1. 按照[此教程](https://yiri-mirai.wybxc.cc/tutorials/01/configuration)配置Mirai及mirai-api-http +1. 按照[此教程](/posts/deploymentTutorial/yirimiraiANDpythonForManual/yirimirai.md)配置Mirai及mirai-api-http 2. 启动mirai-console后,使用`login`命令登录QQ账号,保持mirai-console运行状态 3. 在下一步配置主程序时请在config.py中将`msg_source_adapter`设为`yirimirai` diff --git a/src/posts/deploymentTutorial/yirimiraiAndPythonForManual/pythonInstall.md b/src/posts/deploymentTutorial/yirimiraiAndPythonForManual/pythonInstall.md new file mode 100644 index 000000000..1121546f1 --- /dev/null +++ b/src/posts/deploymentTutorial/yirimiraiAndPythonForManual/pythonInstall.md @@ -0,0 +1,35 @@ +--- +head: + - - meta + - name: keywords + content: Python的安装教程 +title: 手动部署 +icon: support +order: 3 +author: Lazy +date: 2023-12-18 +category: + - 部署教程 +--- + +## 第一步:安装Python + +打开这个网址,[点我跳转](https://www.python.org/downloads/release/python-3109/) + +翻到最下边,点击这个下载python安装器 + +![image-20231219213747065](https://cos.thelazy.cn/pictures/qchatgpt%E6%89%8B%E5%8A%A8%E9%83%A8%E7%BD%B2202312192137143.png) + +然后,双击打开你刚才下载的,记得勾选下面的 + +![image-20231219222341736](https://cos.thelazy.cn/pictures/qchatgpt%E6%89%8B%E5%8A%A8%E9%83%A8%E7%BD%B2202312192223809.png) + +然后,所有项保持默认即可 + +## 第二步:检测Python是否安装成功 + +按win+R键,输入cmd,回车,在输入python,回车 + +![image-20231219222916951](https://cos.thelazy.cn/pictures/qchatgpt%E6%89%8B%E5%8A%A8%E9%83%A8%E7%BD%B2202312192229984.png) + +提示如图时,表明安装成功了 \ No newline at end of file diff --git a/src/posts/deploymentTutorial/yirimiraiAndPythonForManual/yirimirai.md b/src/posts/deploymentTutorial/yirimiraiAndPythonForManual/yirimirai.md new file mode 100644 index 000000000..4027836dd --- /dev/null +++ b/src/posts/deploymentTutorial/yirimiraiAndPythonForManual/yirimirai.md @@ -0,0 +1,153 @@ +--- +head: + - - meta + - name: keywords + content: Yiri-mirai的部署教程 +title: 手动部署 +icon: support +order: 3 +author: Lazy +date: 2023-12-18 +category: + - 部署教程 +--- + +## 第一步:准备工作 + +> 注意:由于网络环境多样复杂,很多步骤中,有可能需要使用网络魔法,懂的都懂 + +1. 创建文件夹 + + 在你的任意盘(D,E,F什么都都可以)里面新建一个文件夹(例如命名qqbot) + + ![image-20231218170220749](https://cos.thelazy.cn/pictures/qchatgpt%E6%89%8B%E5%8A%A8%E9%83%A8%E7%BD%B2202312181702794.png) + +2. 创建子文件夹 + + 双击进入刚刚创建的文件夹,分别新建两个文件夹(建议命名保持一致) + + ![image-20231218170346542](https://cos.thelazy.cn/pictures/qchatgpt%E6%89%8B%E5%8A%A8%E9%83%A8%E7%BD%B2202312181703568.png) + +## 第二步:安装 mirai-console + +在 [mcl-installer 的 releases 页面](https://github.com/iTXTech/mcl-installer/releases)下载对应版本的安装包,找到最新的安装包,即有“Latest”标志的安装包,点击`show all 14 assets`,下载 mcl-installer-X.X.X-windows-amd64.exe,如图,则下载`mcl-installer-1.0.7-windows-amd64.exe`,保存在刚才创建的`mirai文件夹`中 +![屏幕截图 2023-11-23 223909.png](https://cos.thelazy.cn/pictures/mirai-console%E7%9A%84%E6%95%99%E7%A8%8B202312181655031.png) + +![image-20231218170548696](https://cos.thelazy.cn/pictures/qchatgpt%E6%89%8B%E5%8A%A8%E9%83%A8%E7%BD%B2202312181705727.png) + +双击打开,一路回车。然后,你可以看到多出来一些文件。 + +![image-20231218170726759](https://cos.thelazy.cn/pictures/qchatgpt%E6%89%8B%E5%8A%A8%E9%83%A8%E7%BD%B2202312181707796.png) + +继续点击`mcl.cmd`,看不到文件后缀的,参考这个文章来显示文件后缀名:[如何查看文件后缀](https://jingyan.baidu.com/article/9158e0004c6cbea2541228da.html) + +双击后会显示如下图所示的类似界面,当出现`Enter to continue`时,表明你需要按回车健 + +![屏幕截图 2023-11-24 174015.png](https://cos.thelazy.cn/pictures/qchatgpt%E6%89%8B%E5%8A%A8%E9%83%A8%E7%BD%B2202312181714763.png)![屏幕截图 2023-11-24 174650.png](https://cos.thelazy.cn/pictures/qchatgpt%E6%89%8B%E5%8A%A8%E9%83%A8%E7%BD%B2202312181714650.png) +当出现上面的一行绿字时,说明安装完成,到这里输入 exit,回车退出 + +## 第三步:安装 mirai-api-http + +打开 `mcl.cmd`,输入`mcl --update-package net.mamoe:mirai-api-http --channel stable-v2 --type plugin` ,回车 + +![image-20231218172022449](https://cos.thelazy.cn/pictures/qchatgpt%E6%89%8B%E5%8A%A8%E9%83%A8%E7%BD%B2202312181720470.png)再次打开`mcl.cmd`,一路回车,直至退出。 + +再打开 mcl.cmd,看到如以下界面,说明成功 +![屏幕截图 2023-11-24 184618.png](https://cos.thelazy.cn/pictures/qchatgpt%E6%89%8B%E5%8A%A8%E9%83%A8%E7%BD%B2202312181719784.png) +键盘按下`Ctrl+C`,退出。 +找到mira/config/net.mamoe.mirai-api-http/setting.yml文件,右键用记事本打开 + +![image-20231218172354159](https://cos.thelazy.cn/pictures/qchatgpt%E6%89%8B%E5%8A%A8%E9%83%A8%E7%BD%B2202312181723195.png) + +把内容全部删掉,换成 + +```yml +adapters: + - ws +debug: true +enableVerify: true +verifyKey: yirimirai +singleMode: false +cacheSize: 4096 +adapterSettings: + ws: + host: localhost + port: 8080 + reservedSyncId: -1 +``` + +再打开 `mcl.cmd`,可以看到输出 +![image-20231218174112536](https://cos.thelazy.cn/pictures/qchatgpt%E6%89%8B%E5%8A%A8%E9%83%A8%E7%BD%B2202312181741769.png) +则 mirai-api-http 安装成功。 + +## 第四步:配置签名服务 + +在这个链接下载qsign一键签名包,点击下载最新的那个zip压缩包,如下图的`qsign-1.2.1-beta-dev-d62ddce-all.zip`【写于2023年12月19日】,[点我跳转下载页面](https://github.com/MrXiaoM/qsign/releases) + +![image-20231219211250617](https://cos.thelazy.cn/pictures/qchatgpt%E6%89%8B%E5%8A%A8%E9%83%A8%E7%BD%B2202312192112766.png) + +下载完成后,解压得到如图文件 + +![image-20231219211634274](https://cos.thelazy.cn/pictures/qchatgpt%E6%89%8B%E5%8A%A8%E9%83%A8%E7%BD%B2202312192116299.png) + +将两个文件复制到mirai文件夹中 + +![image-20231219211904375](https://cos.thelazy.cn/pictures/qchatgpt%E6%89%8B%E5%8A%A8%E9%83%A8%E7%BD%B2202312192119398.png) + +打开`txlib`文件夹,发现有若干数字命名的文件夹,记录下最大的那个 + +![image-20231219212926059](https://cos.thelazy.cn/pictures/qchatgpt%E6%89%8B%E5%8A%A8%E9%83%A8%E7%BD%B2202312192129175.png) + +然后,双击运行`mcl.cmd`,稍等一会儿后,当提示`mirai-console started successfully`时,qsign就安装上了 + +之后,打开`mirai/config/top.mrxiaom.qsign`下的`config.yml`文件,用记事本打开 + +![image-20231219213026138](https://cos.thelazy.cn/pictures/qchatgpt%E6%89%8B%E5%8A%A8%E9%83%A8%E7%BD%B2202312192130201.png) + +![image-20231219213255993](https://cos.thelazy.cn/pictures/qchatgpt%E6%89%8B%E5%8A%A8%E9%83%A8%E7%BD%B2202312192132019.png) + +然后,按下`Ctrl+S`保存 + +然后,再次双击运行`mcl.cmd`,可以看到类似提示,如图 + +![image-20231219214603122](https://cos.thelazy.cn/pictures/qchatgpt%E6%89%8B%E5%8A%A8%E9%83%A8%E7%BD%B2202312192146161.png) + +## 第五步:运行mirai + +到这里,你已经安装并配置成功了,接下来,你就可以登录机器人QQ了 + +输入,其中 123456 是替换为你机器人的 QQ 号,67890 替换为你机器人 QQ 的密码 + +```bash +login 12345 67890 +``` + +然后,可以看到提示 + +![image-20231219215234389](https://cos.thelazy.cn/pictures/qchatgpt%E6%89%8B%E5%8A%A8%E9%83%A8%E7%BD%B2202312192152446.png) + +把`Captcha link: `后边的链接复制下来,用Chrome或者Edge浏览器打开,按F12打开开发者工具 + +点开 `Network` + +![img5](https://docs.mirai.mamoe.net/assets/img5.9c53babb.png) + +在浏览器中完成验证, 在 `Network` 中找到名为 `cap_union_new_verify` 的请求, 在最下面 + +![img6](https://docs.mirai.mamoe.net/assets/img6.2c4cf2d2.png) + +ticket 后那一坨就是要输入回 mirai 的内容,但不包括首尾的双引号 + +**注意** + +- 复制的时候记得删掉引号(`"`, 前后都有一个), 那个不是ticket内容 +- 速度要快 +- 注意不要漏字符(没复制完, 后面还有很长) + +把复制下来的东西,粘贴到运行mirai的终端中 + +![image-20231219220645708](https://cos.thelazy.cn/pictures/qchatgpt%E6%89%8B%E5%8A%A8%E9%83%A8%E7%BD%B2202312192206741.png) + +然后回车,如果运气好的话,会提示你要收验证码,输入yes并回车,之后把验证码输入上去,然后回车即可成功登录了 + +如果运气不好,报错code=237了,建议换号 diff --git a/src/posts/developTutorial/PluginsDevelop.md b/src/posts/developTutorial/PluginsDevelop.md new file mode 100644 index 000000000..cd4575e16 --- /dev/null +++ b/src/posts/developTutorial/PluginsDevelop.md @@ -0,0 +1,491 @@ +--- +head: + - - meta + - name: keywords + content: QChatGPT插件开发教程 +title: 插件开发 +icon: code +author: RockChinQ +date: 2023-09-30 +category: + - 插件开发 +index: false +--- + +> 请先阅读[插件使用页](/posts/pluginsAbout/pluginsIntro) +> 请先阅读[技术信息页](https://github.com/RockChinQ/QChatGPT/wiki/4-%E6%8A%80%E6%9C%AF%E4%BF%A1%E6%81%AF) +> 建议先阅读本项目源码,了解项目架构 + +> 问题、需求请到仓库issue发起 +> **提问前请先靠自己尝试** +:::info 目录 +[[toc]] +::: +## 💬简介 + +尽管“为一个基于OpenAI API的QQ机器人开发插件支持”这事看起来有点小题大做,但萌生此想法后的几天内好几个人提出了这个需求,最终促使此项目正式支持插件。 + +## 🧱实现 + +基于`importlib`库加载模块的方法动态加载额外Python程序文件以便实现插件加载,插件均存放在`plugins`文件夹,其中的所有`.py`文件都将被加载(除了所有`__init__.py`) + +## 📚示例代码 + +请查看代码目录`tests/plugin_examples`中的插件目录 + +## 💻快速开始 + +按照文档部署此项目,并使其正常运行。 +在`plugins`目录下新建目录`hello`,在其中新建空文件`__init__.py`以标记此目录为软件包,继续新建文件`main.py`。 + +> 您也可以使用[hello_plugin](https://github.com/RockChinQ/hello_plugin)作为模板直接生成插件代码仓库 + +编辑`main.py`输入以下内容: + +```Python +from pkg.plugin.models import * +from pkg.plugin.host import EventContext, PluginHost + +""" +在收到私聊或群聊消息"hello"时,回复"hello, <发送者id>!"或"hello, everyone!" +""" + + +# 注册插件 +@register(name="Hello", description="hello world", version="0.1", author="RockChinQ") +class HelloPlugin(Plugin): + + # 插件加载时触发 + # plugin_host (pkg.plugin.host.PluginHost) 提供了与主程序交互的一些方法,详细请查看其源码 + def __init__(self, plugin_host: PluginHost): + pass + + # 当收到个人消息时触发 + @on(PersonNormalMessageReceived) + def person_normal_message_received(self, event: EventContext, **kwargs): + msg = kwargs['text_message'] + if msg == "hello": # 如果消息为hello + + # 输出调试信息 + logging.debug("hello, {}".format(kwargs['sender_id'])) + + # 回复消息 "hello, <发送者id>!" + event.add_return("reply", ["hello, {}!".format(kwargs['sender_id'])]) + + # 阻止该事件默认行为(向接口获取回复) + event.prevent_default() + + # 当收到群消息时触发 + @on(GroupNormalMessageReceived) + def group_normal_message_received(self, event: EventContext, **kwargs): + msg = kwargs['text_message'] + if msg == "hello": # 如果消息为hello + + # 输出调试信息 + logging.debug("hello, {}".format(kwargs['sender_id'])) + + # 回复消息 "hello, everyone!" + event.add_return("reply", ["hello, everyone!"]) + + # 阻止该事件默认行为(向接口获取回复) + event.prevent_default() + + # 插件卸载时触发 + def __del__(self): + pass + +``` + +此插件将实现:私聊收到`hello`消息时回复`hello, <发送者QQ号>!`,群聊收到`hello`消息时回复`hello, everyone!` + +### 解读此插件程序 + +- `import`从`pkg.plugin`引入`models`模块的所有字段(此程序使用了其中的`register函数`、`on函数`、`Plugin类`、`PersonNormalMessageReceived事件`、`GroupNormalMessageReceived事件`) +- `@register()`将类`HelloPlugin`标记为一个插件类,声明插件名称为`Hello`以及插件简介、版本、作者 +- 声明类`HelloPlugin`继承于`Plugin`,此类可以随意命名,插件名称只与`register`调用时的参数有关 +- 声明此类的`__init__`方法,此方法是可选的,其中的代码将在主程序启动时加载插件的时候被执行 +- `@on`将方法`person_normal_message_received`标记为一个事件处理器,处理`PersonNormalMessageReceived`(收到私聊消息并在获取OpenAI回复前触发)事件,此方法可以随意命名,绑定的事件只与`on`中的参数有关,更多支持的事件可到`pkg.plugin.models.py`文件中查看或查看下方`API`节 +- 输出调试信息,程序中可通过`logging`将日志输出到控制台和`qchatgpt.log`文件 +- 方法内部从参数中取出`text_message`参数,判断是否为`hello`,如果是就将返回值`reply`设置为`["hello, {}!".format(kwargs['sender_id'])]`,接下来调用`event`对象的`prevent_default`方法,阻止原程序默认行为 + - 每个事件`提供的参数`和`支持的返回值`请查看`pkg.plugin.models`中的每个事件的注释或查看下方`API`节 + - `event`对象提供的方法请查看`pkg.plugin.host`中的`EventContext`类或查看下方`API`节 +- 用相似的程序注册`GroupNormalMessageReceived`事件处理群消息 + +编写完毕保存后,重新启动主程序,查看到输出中包含以下内容,即为加载成功: + +``` +[2023-01-16 18:29:47.193] host.py (43) - [INFO] : 加载模块: hello.main +[2023-01-16 18:29:47.194] models.py (209) - [INFO] : 插件注册完成: n='Hello', d='hello world', v=0.1, a='RockChinQ' () +``` + +> 建议在`config.py`中设置`logging_level = logging.DEBUG`以便开启调试输出 + +## ❗规范(重要) + +- 请每个插件独立一个目录以便管理,建议在Github上创建一个仓库储存单个插件,以便获取和更新 +- 插件名使用`大驼峰命名法`,如`Hello`、`ExamplePlugin`、`ChineseCommands`等 +- 一个目录内可以存放多个Python程序文件,以独立出插件的各个功能,便于开发者管理,但不建议在一个目录内注册多个插件 +- 插件需要的依赖库请在插件目录下的`requirements.txt`中指定,程序从储存库获取此插件时将自动安装依赖 + +## 🪝内容函数 + +通过[GPT的Function Calling能力](https://platform.openai.com/docs/guides/gpt/function-calling)实现的`内容函数`,这是一种嵌入对话中,由GPT自动调用的函数。 + +> 您的插件不一定必须包含内容函数,请先查看内容函数页了解此功能 + +
+示例:联网插件 + +加载含有联网功能的内容函数的插件[WebwlkrPlugin](https://github.com/RockChinQ/WebwlkrPlugin),向机器人询问在线内容 + +``` +# 控制台输出 +[2023-07-29 17:37:18.698] message.py (26) - [INFO] : [person_1010553892]发送消息:介绍一下这个项目:https://git... +[2023-07-29 17:37:21.292] util.py (67) - [INFO] : message='OpenAI API response' path=https://api.openai.com/v1/chat/completions processing_ms=1902 request_id=941afc13b2e1bba1e7877b92a970cdea response_code=200 +[2023-07-29 17:37:21.293] chat_completion.py (159) - [INFO] : 执行函数调用: name=Webwlkr-access_the_web, arguments={'url': 'https://github.com/RockChinQ/QChatGPT', 'brief_len': 512} +[2023-07-29 17:37:21.848] chat_completion.py (164) - [INFO] : 函数执行完成。 +``` + +![Webwlkr插件](https://github.com/RockChinQ/QChatGPT/blob/master/res/screenshots/webwlkr_plugin.png?raw=true) + +
+ +### 内容函数编写步骤 + +1️⃣ 请先按照上方步骤编写您的插件基础结构,现在请删除(当然你也可以不删,只是为了简洁)上述插件内容的诸个由`@on`装饰的类函数 + +
+删除后的结构 + +```python +from pkg.plugin.models import * +from pkg.plugin.host import EventContext, PluginHost + +""" +在收到私聊或群聊消息"hello"时,回复"hello, <发送者id>!"或"hello, everyone!" +""" + + +# 注册插件 +@register(name="Hello", description="hello world", version="0.1", author="RockChinQ") +class HelloPlugin(Plugin): + + # 插件加载时触发 + # plugin_host (pkg.plugin.host.PluginHost) 提供了与主程序交互的一些方法,详细请查看其源码 + def __init__(self, plugin_host: PluginHost): + pass + + # 插件卸载时触发 + def __del__(self): + pass +``` + +
+ +2️⃣ 现在我们将以下函数添加到刚刚删除的函数的位置 + +```Python + +# 要添加的函数 + +@func(name="access_the_web") # 设置函数名称 +def _(url: str): + """Call this function to search about the question before you answer any questions. + - Do not search through baidu.com at any time. + - If you need to search somthing, visit https://www.google.com/search?q=xxx. + - If user ask you to open a url (start with http:// or https://), visit it directly. + - Summary the plain content result by yourself, DO NOT directly output anything in the result you got. + + Args: + url(str): url to visit + + Returns: + str: plain text content of the web page + """ + import requests + from bs4 import BeautifulSoup + # 你需要先使用 + # pip install beautifulsoup4 + # 安装依赖 + + r = requests.get( + url, + timeout=10, + headers={ + "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/115.0.0.0 Safari/537.36 Edg/115.0.1901.183" + } + ) + soup = BeautifulSoup(r.text, 'html.parser') + + s = soup.get_text() + + # 删除多余的空行或仅有\t和空格的行 + s = re.sub(r'\n\s*\n', '\n', s) + + if len(s) >= 512: # 截取获取到的网页纯文本内容的前512个字 + return s[:512] + + return s + +``` +
+现在这个文件内容应该是这样 + +```python +from pkg.plugin.models import * +from pkg.plugin.host import EventContext, PluginHost + +""" +在收到私聊或群聊消息"hello"时,回复"hello, <发送者id>!"或"hello, everyone!" +""" + + +# 注册插件 +@register(name="Hello", description="hello world", version="0.1", author="RockChinQ") +class HelloPlugin(Plugin): + + # 插件加载时触发 + # plugin_host (pkg.plugin.host.PluginHost) 提供了与主程序交互的一些方法,详细请查看其源码 + def __init__(self, plugin_host: PluginHost): + pass + + @func(name="access_the_web") + def _(url: str): + """Call this function to search about the question before you answer any questions. + - Do not search through baidu.com at any time. + - If you need to search somthing, visit https://www.google.com/search?q=xxx. + - If user ask you to open a url (start with http:// or https://), visit it directly. + - Summary the plain content result by yourself, DO NOT directly output anything in the result you got. + + Args: + url(str): url to visit + + Returns: + str: plain text content of the web page + """ + import requests + from bs4 import BeautifulSoup + # 你需要先使用 + # pip install beautifulsoup4 + # 安装依赖 + + r = requests.get( + url, + timeout=10, + headers={ + "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/115.0.0.0 Safari/537.36 Edg/115.0.1901.183" + } + ) + soup = BeautifulSoup(r.text, 'html.parser') + + s = soup.get_text() + + # 删除多余的空行或仅有\t和空格的行 + s = re.sub(r'\n\s*\n', '\n', s) + + if len(s) >= 512: # 截取获取到的网页纯文本内容的前512个字 + return s[:512] + + return s + + # 插件卸载时触发 + def __del__(self): + pass +``` + +
+ +#### 请注意: + +- 函数的注释必须严格按照要求的格式进行书写,具体格式请查看[此文档](https://github.com/RockChinQ/CallingGPT/wiki/1.-Function-Format#function-format) +- 内容函数和`以@on装饰的行为函数`可以同时存在于同一个插件,并同时受到`switch.json`中的插件开关的控制 +- 务必确保您使用的模型支持函数调用功能,可以到`config.py`的`completion_api_params`中修改模型,推荐使用`gpt-3.5-turbo-16k` + +3️⃣ 现在您的程序已具备网络访问功能,重启程序,询问机器人有关在线的内容或直接发送文章链接请求其总结。 + +- 这仅仅是一个示例,需要更高效的网络访问能力支持插件,请查看[WebwlkrPlugin](https://github.com/RockChinQ/WebwlkrPlugin) + +## 🔒版本要求 + +若您的插件对主程序的版本有要求,可以使用以下函数进行断言,若不符合版本,此函数将报错并打断此函数所在的流程: + +```python +require_ver("v2.5.1") # 要求最低版本为 v2.5.1 +``` + +```python +require_ver("v2.5.1", "v2.6.0") # 要求最低版本为 v2.5.1, 同时要求最高版本为 v2.6.0 +``` + +- 此函数在主程序`v2.5.1`中加入 +- 此函数声明在`pkg.plugin.models`模块中,在插件示例代码最前方已引入此模块所有内容,故可直接使用 + +## 📄API参考 + +### 说明 + +事件处理函数将会获得一系列参数,可以在`kwargs`中取出。 +其中`host`参数(`pkg.plugin.host.PluginHost`类的实例)是插件宿主,提供与主程序各个模块交互的一些方法。 +`event`参数(`pkg.plugin.host.EventContext`类的实例)是事件执行期间的上下文,提供对此次事件执行的一些操作方法。 + +事件返回值均为**可选**的,可以通过调用`event.add_return(key: str, ret)`来提交返回值 + +### 事件 + +所有事件参数均有`host`和`event`,以下仅展示其他参数 +关于`YiriMirai`支持的消息链组件,请查看 [YiriMirai的文档](https://yiri-mirai.wybxc.cc/docs/basic/message-chain) + +```Python +PersonMessageReceived = "person_message_received" +"""收到私聊消息时,在判断是否应该响应前触发 + kwargs: + launcher_type: str 发起对象类型(group/person) + launcher_id: int 发起对象ID(群号/QQ号) + sender_id: int 发送者ID(QQ号) + message_chain: mirai.models.message.MessageChain 消息链 +""" + +GroupMessageReceived = "group_message_received" +"""收到群聊消息时,在判断是否应该响应前触发(所有群消息) + kwargs: + launcher_type: str 发起对象类型(group/person) + launcher_id: int 发起对象ID(群号/QQ号) + sender_id: int 发送者ID(QQ号) + message_chain: mirai.models.message.MessageChain 消息链 +""" + +PersonNormalMessageReceived = "person_normal_message_received" +"""判断为应该处理的私聊普通消息时触发 + kwargs: + launcher_type: str 发起对象类型(group/person) + launcher_id: int 发起对象ID(群号/QQ号) + sender_id: int 发送者ID(QQ号) + text_message: str 消息文本 + + returns (optional): + alter: str 修改后的消息文本 + reply: list 回复消息组件列表,元素为YiriMirai支持的消息组件 +""" + +PersonCommandSent = "person_command_sent" +"""判断为应该处理的私聊命令时触发 + kwargs: + launcher_type: str 发起对象类型(group/person) + launcher_id: int 发起对象ID(群号/QQ号) + sender_id: int 发送者ID(QQ号) + command: str 命令 + params: list[str] 参数列表 + text_message: str 完整命令文本 + is_admin: bool 是否为管理员 + + returns (optional): + alter: str 修改后的完整命令文本 + reply: list 回复消息组件列表,元素为YiriMirai支持的消息组件 +""" + +GroupNormalMessageReceived = "group_normal_message_received" +"""判断为应该处理的群聊普通消息时触发 + kwargs: + launcher_type: str 发起对象类型(group/person) + launcher_id: int 发起对象ID(群号/QQ号) + sender_id: int 发送者ID(QQ号) + text_message: str 消息文本 + + returns (optional): + alter: str 修改后的消息文本 + reply: list 回复消息组件列表,元素为YiriMirai支持的消息组件 +""" + +GroupCommandSent = "group_command_sent" +"""判断为应该处理的群聊命令时触发 + kwargs: + launcher_type: str 发起对象类型(group/person) + launcher_id: int 发起对象ID(群号/QQ号) + sender_id: int 发送者ID(QQ号) + command: str 命令 + params: list[str] 参数列表 + text_message: str 完整命令文本 + is_admin: bool 是否为管理员 + + returns (optional): + alter: str 修改后的完整命令文本 + reply: list 回复消息组件列表,元素为YiriMirai支持的消息组件 +""" + +NormalMessageResponded = "normal_message_responded" +"""获取到对普通消息的文字响应时触发 + kwargs: + launcher_type: str 发起对象类型(group/person) + launcher_id: int 发起对象ID(群号/QQ号) + sender_id: int 发送者ID(QQ号) + session: pkg.openai.session.Session 会话对象 + prefix: str 回复文字消息的前缀 + response_text: str 响应文本 + finish_reason: str 响应结束原因 + + returns (optional): + prefix: str 修改后的回复文字消息的前缀 + reply: list 替换回复消息组件列表 +""" + +SessionFirstMessageReceived = "session_first_message_received" +"""会话被第一次交互时触发 + kwargs: + session_name: str 会话名称(_) + session: pkg.openai.session.Session 会话对象 + default_prompt: str 预设值 +""" + +SessionExplicitReset = "session_reset" +"""会话被用户手动重置时触发,此事件不支持阻止默认行为 + kwargs: + session_name: str 会话名称(_) + session: pkg.openai.session.Session 会话对象 +""" + +SessionExpired = "session_expired" +"""会话过期时触发 + kwargs: + session_name: str 会话名称(_) + session: pkg.openai.session.Session 会话对象 + session_expire_time: int 已设置的会话过期时间(秒) +""" + +KeyExceeded = "key_exceeded" +"""api-key超额时触发 + kwargs: + key_name: str 超额的api-key名称 + usage: dict 超额的api-key使用情况 + exceeded_keys: list[str] 超额的api-key列表 +""" + +KeySwitched = "key_switched" +"""api-key超额切换成功时触发,此事件不支持阻止默认行为 + kwargs: + key_name: str 切换成功的api-key名称 + key_list: list[str] api-key列表 +""" + +PromptPreProcessing = "prompt_pre_processing" # 于v2.5.1加入 +"""每回合调用接口前对prompt进行预处理时触发,此事件不支持阻止默认行为 + kwargs: + session_name: str 会话名称(_) + default_prompt: list 此session使用的情景预设内容 + prompt: list 此session现有的prompt内容 + text_message: str 用户发送的消息文本 + + returns (optional): + default_prompt: list 修改后的情景预设内容 + prompt: list 修改后的prompt内容 + text_message: str 修改后的消息文本 +""" +``` + +### host: PluginHost 详解 + +提供与主程序各个模块交互的一些方法,具体查看`pkg.plugin.host`中的`PluginHost`类 + +### event: EventContext 详解 + +提供对此次事件执行的一些操作方法,具体查看`pkg.plugin.host`中的`EventContext`类 + diff --git a/src/posts/developTutorial/technologyInfo.md b/src/posts/developTutorial/technologyInfo.md new file mode 100644 index 000000000..623cd81d9 --- /dev/null +++ b/src/posts/developTutorial/technologyInfo.md @@ -0,0 +1,121 @@ +--- +head: + - - meta + - name: keywords + content: QChatGPT插件开发教程 +title: 技术信息 +icon: code +author: RockChinQ +date: 2023-09-30 +category: + - 技术信息 +index: false +--- +以下是QChatGPT实现原理等技术信息,贡献之前请仔细阅读 + +> 太久没更了,过时了,建议读源码,~~注释还挺全的~~ +> 请先阅读OpenAI API的相关文档 https://beta.openai.com/docs/ ,以下信息假定您已了解OpenAI模型的相关特性及其接口的调用方法。 + +## 术语 + +包含OpenAI API涉及的术语和项目中的概念的命名 +括号中是程序中相应术语的命名,无括号的为抽象概念 + +### 模型(model) + +AI模型,程序调用OpenAI的接口获取的内容均为OpenAI的模型生成的内容。 + +### 字符(tokens) + +OpenAI定义的字符,ASCII字符为1 token,其他为2 token。 + +### 提示符(prompt) + +i. 调用OpenAI的文字补全模型时的提示语,模型接口会根据提示语返回回复内容。程序底层会将对话内容进行封装生成提示符。调用文字补全模型时的提示符均由`user_name`(默认为`You`,可在配置文件修改)和`bot_name`(默认为`Bot`,可在配置文件修改)标记对话角色以供模型识别,以下是实例: + +``` +You:今天天气真不错 +Bot:很高兴你喜欢今天的天气:) +You:谢谢你 +Bot:不客气:) +``` +补全模型调用的程序实现请查看下文`实现`节。 + +ii. 调用OpenAI的绘图模型时的提示语,模型会根据提示语进行绘图并返回图片URL。 + +### 对象 + +程序将单个人或单个QQ群视为一个对象,对象和模型是一次会话中的对话双方。 + +### 会话(session) + +会话只对文字补全功能有效,绘图功能无会话概念。每个对象使用同一个会话,会话中仅有对象和模型两个角色,故群内所有的人都将被视为同一个角色与模型进行对话。 + +程序获取回复的本质是`文字补全`。 +由于对话需要实现联系上下文,故程序会将模型与对象的对话历史记录作为`提示符`发送给OpenAI的接口以获取符合前文的回复。 +而OpenAI的文字补全接口的提示符具有长度限制(默认使用的`text-davinci-003`限制为4096 tokens), +所以增加`会话`概念以管理向接口发送的提示符内容。 + +会话的存活时间可以在`config.py`中设置,默认为20分钟。会话过期之后会被存入数据库并重置。下一次该对象发起对话时将重启新的会话。 + +### 预设值、人格(default_prompt) + +每个会话的预设对话信息,可在`config.py`中设置,程序会在每个会话创建时向提示符写入以下内容: + +``` +You:<预设信息> +Bot:好的 +``` + +## 实现 + +### QQ机器人 + +> 程序路径: +> pkg.qqbot + +- `pkg.qqbot.manager`中的`QQBotManager`实现了接收消息、调用OpenAI模块处理消息、报告审计模块记录使用量等功能,并提供通知管理员、发送消息等方法供其他模块调用。 +- `pkg.qqbot.filter`提供了敏感词过滤的相关操作。 +- `pkg.qqbot.process`提供了私聊消息和群聊消息的统一处理逻辑。 + +使用mirai及YiriMirai作为Python与QQ交互的框架,详细请见其文档。 +在启动时会调用YiriMirai的函数以创建一个bot对象,用于程序通过mirai与QQ进行交互,在上层程序调用此bot对象的方法进行消息处理。 +由于YiriMirai暂时无法关闭机器人,故在热重载前后维持同一个bot对象,这意味着QQ机器人的相关配置(QQ号、适配器等)信息不支持热重载。 + +### 数据库 + +> 程序路径: +> pkg.database + +- `pkg.database.manager`中的`DatabaseManager`封装了诸多调用数据库的方法以供其他模块调用。 + +使用SQLite作为数据库,储存所有对象的历史会话信息、api-key的费用情况、api-key的使用量情况。 + +### OpenAI交互 + +> 程序路径: +> pkg.openai + +- `pkg.openai.manager`中的`OpenAIInteract`类封装了OpenAI的文字补全`Completion`API和绘图API供机器人模块调用,并在接口调用成功之后向审计模块报告当前使用的api-key的使用量信息。 +- `pkg.openai.keymgr`实现了多api-key的管理,其中以`exceeded`变量在运行时记录api-key的超额报错记录,并提供根据超额记录进行的api-key切换功能。 +- `pkg.openai.pricing`记录各个模型的费用信息,供调用接口时估算费用,费用估算功能不再与api-key的切换挂钩,api-key仅在调用接口报错超额时进行切换。 +- `pkg.openai.session`中的`Session`进行会话管理。 + +### utils模块 + +#### context模块 + +保存前述模块中的对象,并允许各个模块从此处获取其他模块的对象以调用其方法。 + +#### 热重载功能 + +> pkg.utils.reloader + +重载前保存context中的所有对象,执行`main.py`中的程序关闭流程,使用`importlib`的`reload`函数重载所有模块(包含配置文件,包含新增的模块),重载后将context恢复,并执行程序启动流程。 +所有模块都会重新创建对象,但QQ机器人模块中的bot对象不会被重新创建,这是因为YiriMirai提供的shutdown方法无法使用,这意味着`config.py`中关于QQ机器人的配置不支持热重载。 + +#### 热更新功能 + +> pkg.utils.updater + +使用`dulwich`库执行pull操作拉取远程仓库的最新源码,并进行一次热重载加载最新代码。 \ No newline at end of file diff --git a/src/posts/pluginsAbout/pluginsIntro.md b/src/posts/pluginsAbout/pluginsIntro.md new file mode 100644 index 000000000..8276671ff --- /dev/null +++ b/src/posts/pluginsAbout/pluginsIntro.md @@ -0,0 +1,117 @@ +--- +head: + - - meta + - name: keywords + content: ChatGPT QQ机器人插件,QChatGPT项目插件 +title: 插件介绍 +icon: blog +date: 2023-09-30 +category: + - 插件介绍 +index: false +--- + +# QChatGPT的插件 + +## 插件是什么? + +**插件**,是QChatGPT的扩展模块,分为**行为插件**和**内容函数**两种类型。行为插件由主程序运行中的事件驱动,而内容函数由GPT生成的内容驱动。 + +### 行为插件 + +1. **事件驱动行为:** 行为插件可以响应运行时发生的事件,如用户发送消息、机器人启动、定时任务触发等。 +2. **自定义行为:** 通过行为插件,你可以为机器人定义特定的行为,使其在特定条件下执行某些操作,例如自动回复、处理指令等。 +3. **功能扩展:** 行为插件可以扩展机器人的功能,使其具有更强大的处理能力,例如与外部API交互、数据存储、日志记录等。 + +### 内容函数 + +> 说白了就是ChatGPT官方插件那种东西 + +内容函数是基于[GPT的Function Calling能力](https://platform.openai.com/docs/guides/gpt/function-calling)实现的,这是一种嵌入对话中,由GPT自动调用的函数。 + +例如我们为GPT提供一个函数`access_the_web`,并提供其详细的描述以及其参数的描述,那么当我们在与GPT对话时涉及类似以下内容时: + +``` +Q: 请搜索一下github上有那些QQ机器人项目? +Q: 请为我搜索一些不错的云服务商网站? +Q:阅读并总结这篇文章:https://zhuanlan.zhihu.com/p/607570830 +Q:搜一下清远今天天气如何 +``` + +GPT将会回复一个对`access_the_web`的函数调用请求,QChatGPT将自动处理执行该调用,并返回结果给GPT使其生成新的回复。 + +当然,函数调用功能不止局限于网络访问,还可以实现图片处理、科学计算、行程规划等需要调用函数的功能,理论上我们可以通过内容函数实现与`ChatGPT Plugins`相同的功能。 + +- 您需要使用`v2.5.0`以上的版本才能加载包含内容函数的插件 +- 您需要同时在`config.py`中的`completion_api_params`中设置`model`为支持函数调用的模型,推荐使用`gpt-3.5-turbo-16k` +- 使用此功能可能会造成难以预期的账号余额消耗,请关注 +- [逆向库插件](https://github.com/RockChinQ/revLibs)现在也支持函数调用了..您可以在完全免费的情况下使用GPT-3.5进行函数调用,若您在主程序配置了内容函数并启用,逆向ChatGPT会自动使用这些函数 + +> **QChatGPT的一些不错的内容函数插件** +> +> [WebwlkrPlugin](https://github.com/RockChinQ/WebwlkrPlugin) - 让机器人能联网!! + +## 插件能干什么? + +- **自定义回复逻辑:** 定义特定关键词或指令的回复方式。 +- **集成外部服务:** 与外部API交互,获取信息或执行操作。 +- **数据存储和检索:** 将数据存储在数据库中,并能够检索和更新。 +- **自动化任务:** 在特定事件触发时执行自动化任务,如定时任务、特定用户消息触发等。 +- **内容函数调用:** 利用GPT的Function Calling能力执行各种任务,如网络搜索、图片处理等。 +- **更多……** + +## 插件怎么用? + +### 安装 + +> 这里只是给出了插件的基本安装方法,详细需查看各插件文档或咨询其开发者 + +#### 储存库克隆(推荐) + +在运行期间,使用管理员账号对机器人私聊发送`!plugin get `即可自动获取源码并安装插件,程序会根据仓库中的`requirements.txt`文件自动安装依赖库 + +例如安装`hello_plugin`插件 +``` +!plugin get https://github.com/RockChinQ/hello_plugin +``` + +安装完成后重启程序或使用管理员账号私聊机器人发送`!reload`进行热重载加载插件 + +#### 手动安装 + +将获取到的插件程序放置到`plugins`目录下,具体使用方式请查看各插件文档或咨询其开发者。 + +### 管理 + +#### !plugin 命令 + +``` +!plugin 列出所有已安装的插件 +!plugin get <储存库地址> 从Git储存库安装插件(需要管理员权限) +!plugin update all 更新所有插件(需要管理员权限,仅支持从储存库安装的插件) +!plugin update <插件名> 更新指定插件 +!plugin del <插件名> 删除插件(需要管理员权限) +!plugin on <插件名> 启用插件(需要管理员权限) +!plugin off <插件名> 禁用插件(需要管理员权限) + +!func 列出所有内容函数 +``` + +#### 控制插件执行顺序 + +可以通过修改`plugins/settings.json`中`order`字段中每个插件名称的前后顺序,以更改插件**初始化**和**事件执行**顺序 + +#### 启用或关闭插件 + +无需卸载即可管理插件的开关 +编辑`plugins`目录下的`switch.json`文件,将相应的插件的`enabled`字段设置为`true/false(开/关)`,之后重启程序或执行热重载即可控制插件开关 + +#### 控制全局内容函数开关 + +内容函数是基于[GPT的Function Calling能力](https://platform.openai.com/docs/guides/gpt/function-calling)实现的,这是一种嵌入对话中,由GPT自动调用的函数。 +每个插件可以自行注册内容函数,您可以在`plugins`目录下的`settings.json`中设置`functions`下的`enabled`为`true`或`false`控制这些内容函数的启用或禁用。 + +## 如何自定义插件? + +> QChatGPT的插件具有高度的可拓展性,你可以自行编写python代码来实现无限的功能,插件开发方法具体阅读:[插件开发](/posts/PluginsDevelop.html) + diff --git a/src/posts/PluginsUse/pluginsList.md b/src/posts/pluginsAbout/pluginsList.md similarity index 93% rename from src/posts/PluginsUse/pluginsList.md rename to src/posts/pluginsAbout/pluginsList.md index ef86b5da1..5ac518039 100644 --- a/src/posts/PluginsUse/pluginsList.md +++ b/src/posts/pluginsAbout/pluginsList.md @@ -9,24 +9,42 @@ order: 1 author: Lazy date: 2023-09-30 category: - - 插件使用 + - 插件介绍 --- 插件列表 - [WebwlkrPlugin](https://github.com/RockChinQ/WebwlkrPlugin) - 让机器人能联网!!**[点我查看插件使用方法](./plugin_network.md)** + - [revLibs](https://github.com/RockChinQ/revLibs) - 将ChatGPT网页版、Claude、Bard、Hugging Chat等破解版接入此项目,关于[官方接口和网页版有什么区别](https://github.com/RockChinQ/QChatGPT/wiki/8-%E5%AE%98%E6%96%B9%E6%8E%A5%E5%8F%A3%E3%80%81ChatGPT%E7%BD%91%E9%A1%B5%E7%89%88%E3%80%81ChatGPT-API%E5%8C%BA%E5%88%AB) + - [Switcher](https://github.com/RockChinQ/Switcher) - 支持通过命令切换使用的模型 + - [hello_plugin](https://github.com/RockChinQ/hello_plugin) - `hello_plugin` 的储存库形式,插件开发模板 -- [oliverkirk-sudo/chat_voice](https://github.com/oliverkirk-sudo/chat_voice) - 文字转语音输出,支持HuggingFace上的[VITS模型](https://huggingface.co/spaces/Plachta/VITS-Umamusume-voice-synthesizer),azure语音合成,vits本地语音合成,sovits语音合成 **[点我查看插件使用方法](./plugin_network.md)** + +- [oliverkirk-sudo/chat_voice](https://github.com/oliverkirk-sudo/chat_voice) - 文字转语音输出,支持HuggingFace上的[VITS模型](https://huggingface.co/spaces/Plachta/VITS-Umamusume-voice-synthesizer),azure语 +音合成,vits本地语音合成,sovits语音合成 **[点我查看插件使用方法](./plugin_network.md)** + - [RockChinQ/WaitYiYan](https://github.com/RockChinQ/WaitYiYan) - 实时获取百度`文心一言`等待列表人数 + - [chordfish-k/QChartGPT_Emoticon_Plugin](https://github.com/chordfish-k/QChartGPT_Emoticon_Plugin) - 使机器人根据回复内容发送表情包 + - [oliverkirk-sudo/ChatPoeBot](https://github.com/oliverkirk-sudo/ChatPoeBot) - 接入[Poe](https://poe.com/)上的机器人 + - [lieyanqzu/WeatherPlugin](https://github.com/lieyanqzu/WeatherPlugin) - 天气查询插件 + - [SysStatPlugin](https://github.com/RockChinQ/SysStatPlugin) - 查看系统状态 + - [oliverkirk-sudo/qchat_system_status](https://github.com/oliverkirk-sudo/qchat_system_status) - 以图片的形式输出系统状态 + - [oliverkirk-sudo/QChatAIPaint](https://github.com/oliverkirk-sudo/QChatAIPaint) - 基于[Holara](https://holara.ai/)的ai绘图插件 + - [oliverkirk-sudo/QChatCodeRunner](https://github.com/oliverkirk-sudo/QChatCodeRunner) - 基于[CodeRunner-Plugin](https://github.com/oliverkirk-sudo/CodeRunner-Plugin)的代码运行与图表生成插件 + - [oliverkirk-sudo/QChatWeather](https://github.com/oliverkirk-sudo/QChatWeather) - 生成好看的天气图片,基于和风天气 + - [oliverkirk-sudo/QChatMarkdown](https://github.com/oliverkirk-sudo/QChatMarkdown) - 将机器人输出的markdown转换为图片,基于[playwright](https://playwright.dev/python/docs/intro) + - [ruuuux/WikipediaSearch](https://github.com/ruuuux/WikipediaSearch) - Wikipedia 搜索插件 + - [查看更多插件](https://github.com/stars/RockChinQ/lists/qchatgpt-%E6%8F%92%E4%BB%B6)这里列出了更多插件 + diff --git a/src/posts/pluginsAbout/pluginsUse.md b/src/posts/pluginsAbout/pluginsUse.md new file mode 100644 index 000000000..d11be8f2a --- /dev/null +++ b/src/posts/pluginsAbout/pluginsUse.md @@ -0,0 +1,103 @@ +--- +head: + - - meta + - name: keywords + content: ChatGPT QQ机器人插件,QChatGPT项目插件 +title: 插件使用 +icon: list +order: 1 +author: Lazy +date: 2023-09-30 +category: + - 插件使用 +--- +:::info 目录 +[[toc]] +::: +# QChatGPT 的插件使用 + +## 简介 + +`plugins`目录下的所有`.py`程序都将被加载,除了`__init__.py`之外的模块支持热加载 + +> 插件分为`行为插件`和`内容插件`两种,行为插件由主程序运行中的事件驱动,内容插件由GPT生成的内容驱动,请查看内容插件页 +> 已有插件列表:[QChatGPT 插件](https://github.com/stars/RockChinQ/lists/qchatgpt-%E6%8F%92%E4%BB%B6) + +## 安装 + +### 储存库克隆(推荐) + +在运行期间,使用管理员账号对机器人私聊发送`!plugin get `即可自动获取源码并安装插件,程序会根据仓库中的`requirements.txt`文件自动安装依赖库 + +例如安装`hello_plugin`插件 +``` +!plugin get https://github.com/RockChinQ/hello_plugin +``` + +安装完成后重启程序或使用管理员账号私聊机器人发送`!reload`进行热重载加载插件 + +### 手动安装 + +将获取到的插件程序放置到`plugins`目录下,具体使用方式请查看各插件文档或咨询其开发者。 + +## 管理 + +### !plugin 命令 + +``` +!plugin 列出所有已安装的插件 +!plugin get <储存库地址> 从Git储存库安装插件(需要管理员权限) +!plugin update all 更新所有插件(需要管理员权限,仅支持从储存库安装的插件) +!plugin update <插件名> 更新指定插件 +!plugin del <插件名> 删除插件(需要管理员权限) +!plugin on <插件名> 启用插件(需要管理员权限) +!plugin off <插件名> 禁用插件(需要管理员权限) + +!func 列出所有内容函数 +``` + +### 控制插件执行顺序 + +可以通过修改`plugins/settings.json`中`order`字段中每个插件名称的前后顺序,以更改插件**初始化**和**事件执行**顺序 + +### 启用或关闭插件 + +无需卸载即可管理插件的开关 +编辑`plugins`目录下的`switch.json`文件,将相应的插件的`enabled`字段设置为`true/false(开/关)`,之后重启程序或执行热重载即可控制插件开关 + +### 控制全局内容函数开关 + +内容函数是基于[GPT的Function Calling能力](https://platform.openai.com/docs/guides/gpt/function-calling)实现的,这是一种嵌入对话中,由GPT自动调用的函数。 +每个插件可以自行注册内容函数,您可以在`plugins`目录下的`settings.json`中设置`functions`下的`enabled`为`true`或`false`控制这些内容函数的启用或禁用。 + +# > 说白了就是ChatGPT官方插件那种东西 + +内容函数是基于[GPT的Function Calling能力](https://platform.openai.com/docs/guides/gpt/function-calling)实现的,这是一种嵌入对话中,由GPT自动调用的函数。 + +例如我们为GPT提供一个函数`access_the_web`,并提供其详细的描述以及其参数的描述,那么当我们在与GPT对话时涉及类似以下内容时: + +``` +Q: 请搜索一下github上有那些QQ机器人项目? +Q: 请为我搜索一些不错的云服务商网站? +Q:阅读并总结这篇文章:https://zhuanlan.zhihu.com/p/607570830 +Q:搜一下清远今天天气如何 +``` + +GPT将会回复一个对`access_the_web`的函数调用请求,QChatGPT将自动处理执行该调用,并返回结果给GPT使其生成新的回复。 + +当然,函数调用功能不止局限于网络访问,还可以实现图片处理、科学计算、行程规划等需要调用函数的功能,理论上我们可以通过内容函数实现与`ChatGPT Plugins`相同的功能。 + +- 您需要使用`v2.5.0`以上的版本才能加载包含内容函数的插件 +- 您需要同时在`config.py`中的`completion_api_params`中设置`model`为支持函数调用的模型,推荐使用`gpt-3.5-turbo-16k` +- 使用此功能可能会造成难以预期的账号余额消耗,请关注 +- [逆向库插件](https://github.com/RockChinQ/revLibs)现在也支持函数调用了..您可以在完全免费的情况下使用GPT-3.5进行函数调用,若您在主程序配置了内容函数并启用,逆向ChatGPT会自动使用这些函数 + +### ?QChatGPT有什么类型的插件?区别是什么? + +QChatGPT具有`行为插件`和`内容函数`两种扩展方式,行为插件是完整的插件结构,是由运行期间的事件驱动的,内容函数被包含于一个完整的插件体中,由GPT接口驱动。 + +> 还是不理解?可以尝试根据插件开发页的步骤自行编写插件 + +## QChatGPT的一些不错的内容函数插件 + +- [WebwlkrPlugin](https://github.com/RockChinQ/WebwlkrPlugin) - 让机器人能联网!! diff --git a/src/posts/PluginsUse/plugin_network.md b/src/posts/pluginsAbout/somePluginsUseTutorial/plugin_network.md similarity index 100% rename from src/posts/PluginsUse/plugin_network.md rename to src/posts/pluginsAbout/somePluginsUseTutorial/plugin_network.md diff --git a/src/posts/PluginsUse/plugin_voice.md b/src/posts/pluginsAbout/somePluginsUseTutorial/plugin_voice.md similarity index 100% rename from src/posts/PluginsUse/plugin_voice.md rename to src/posts/pluginsAbout/somePluginsUseTutorial/plugin_voice.md diff --git a/yarn.lock b/yarn.lock index ee453eaad..279ce4ef3 100644 --- a/yarn.lock +++ b/yarn.lock @@ -32,7 +32,7 @@ resolved "https://registry.npmmirror.com/@babel/compat-data/-/compat-data-7.22.20.tgz" integrity sha512-BQYjKbpXjoXwFW5jGqiizJQQT/aC7pFm9Ok1OWssonuguICi264lbgMzRp2ZMmRSlfkX6DsWDDcsrctK8Rwfiw== -"@babel/core@^7.0.0", "@babel/core@^7.0.0-0", "@babel/core@^7.0.0-0 || ^8.0.0-0 <8.0.0", "@babel/core@^7.11.1", "@babel/core@^7.12.0", "@babel/core@^7.13.0", "@babel/core@^7.22.15", "@babel/core@^7.4.0 || ^8.0.0-0 <8.0.0": +"@babel/core@^7.11.1", "@babel/core@^7.22.15": version "7.23.0" resolved "https://registry.npmmirror.com/@babel/core/-/core-7.23.0.tgz" integrity sha512-97z/ju/Jy1rZmDxybphrBuI+jtJjFVoz7Mr9yUQVVVi+DNZE333uFQeMOqcCIy1x3WYBIbWftUSLmbNXNT7qFQ== @@ -948,6 +948,111 @@ resolved "https://registry.npmmirror.com/@braintree/sanitize-url/-/sanitize-url-6.0.4.tgz" integrity sha512-s3jaWicZd0pkP0jf5ysyHUI/RE7MHos6qlToFcGWXVp+ykHOy77OUMrfbgJ9it2C5bow7OIQwYYaHjk9XlBQ2A== +"@esbuild/android-arm64@0.18.20": + version "0.18.20" + resolved "https://registry.npmmirror.com/@esbuild/android-arm64/-/android-arm64-0.18.20.tgz#984b4f9c8d0377443cc2dfcef266d02244593622" + integrity sha512-Nz4rJcchGDtENV0eMKUNa6L12zz2zBDXuhj/Vjh18zGqB44Bi7MBMSXjgunJgjRhCmKOjnPuZp4Mb6OKqtMHLQ== + +"@esbuild/android-arm@0.18.20": + version "0.18.20" + resolved "https://registry.npmmirror.com/@esbuild/android-arm/-/android-arm-0.18.20.tgz#fedb265bc3a589c84cc11f810804f234947c3682" + integrity sha512-fyi7TDI/ijKKNZTUJAQqiG5T7YjJXgnzkURqmGj13C6dCqckZBLdl4h7bkhHt/t0WP+zO9/zwroDvANaOqO5Sw== + +"@esbuild/android-x64@0.18.20": + version "0.18.20" + resolved "https://registry.npmmirror.com/@esbuild/android-x64/-/android-x64-0.18.20.tgz#35cf419c4cfc8babe8893d296cd990e9e9f756f2" + integrity sha512-8GDdlePJA8D6zlZYJV/jnrRAi6rOiNaCC/JclcXpB+KIuvfBN4owLtgzY2bsxnx666XjJx2kDPUmnTtR8qKQUg== + +"@esbuild/darwin-arm64@0.18.20": + version "0.18.20" + resolved "https://registry.npmmirror.com/@esbuild/darwin-arm64/-/darwin-arm64-0.18.20.tgz#08172cbeccf95fbc383399a7f39cfbddaeb0d7c1" + integrity sha512-bxRHW5kHU38zS2lPTPOyuyTm+S+eobPUnTNkdJEfAddYgEcll4xkT8DB9d2008DtTbl7uJag2HuE5NZAZgnNEA== + +"@esbuild/darwin-x64@0.18.20": + version "0.18.20" + resolved "https://registry.npmmirror.com/@esbuild/darwin-x64/-/darwin-x64-0.18.20.tgz#d70d5790d8bf475556b67d0f8b7c5bdff053d85d" + integrity sha512-pc5gxlMDxzm513qPGbCbDukOdsGtKhfxD1zJKXjCCcU7ju50O7MeAZ8c4krSJcOIJGFR+qx21yMMVYwiQvyTyQ== + +"@esbuild/freebsd-arm64@0.18.20": + version "0.18.20" + resolved "https://registry.npmmirror.com/@esbuild/freebsd-arm64/-/freebsd-arm64-0.18.20.tgz#98755cd12707f93f210e2494d6a4b51b96977f54" + integrity sha512-yqDQHy4QHevpMAaxhhIwYPMv1NECwOvIpGCZkECn8w2WFHXjEwrBn3CeNIYsibZ/iZEUemj++M26W3cNR5h+Tw== + +"@esbuild/freebsd-x64@0.18.20": + version "0.18.20" + resolved "https://registry.npmmirror.com/@esbuild/freebsd-x64/-/freebsd-x64-0.18.20.tgz#c1eb2bff03915f87c29cece4c1a7fa1f423b066e" + integrity sha512-tgWRPPuQsd3RmBZwarGVHZQvtzfEBOreNuxEMKFcd5DaDn2PbBxfwLcj4+aenoh7ctXcbXmOQIn8HI6mCSw5MQ== + +"@esbuild/linux-arm64@0.18.20": + version "0.18.20" + resolved "https://registry.npmmirror.com/@esbuild/linux-arm64/-/linux-arm64-0.18.20.tgz#bad4238bd8f4fc25b5a021280c770ab5fc3a02a0" + integrity sha512-2YbscF+UL7SQAVIpnWvYwM+3LskyDmPhe31pE7/aoTMFKKzIc9lLbyGUpmmb8a8AixOL61sQ/mFh3jEjHYFvdA== + +"@esbuild/linux-arm@0.18.20": + version "0.18.20" + resolved "https://registry.npmmirror.com/@esbuild/linux-arm/-/linux-arm-0.18.20.tgz#3e617c61f33508a27150ee417543c8ab5acc73b0" + integrity sha512-/5bHkMWnq1EgKr1V+Ybz3s1hWXok7mDFUMQ4cG10AfW3wL02PSZi5kFpYKrptDsgb2WAJIvRcDm+qIvXf/apvg== + +"@esbuild/linux-ia32@0.18.20": + version "0.18.20" + resolved "https://registry.npmmirror.com/@esbuild/linux-ia32/-/linux-ia32-0.18.20.tgz#699391cccba9aee6019b7f9892eb99219f1570a7" + integrity sha512-P4etWwq6IsReT0E1KHU40bOnzMHoH73aXp96Fs8TIT6z9Hu8G6+0SHSw9i2isWrD2nbx2qo5yUqACgdfVGx7TA== + +"@esbuild/linux-loong64@0.18.20": + version "0.18.20" + resolved "https://registry.npmmirror.com/@esbuild/linux-loong64/-/linux-loong64-0.18.20.tgz#e6fccb7aac178dd2ffb9860465ac89d7f23b977d" + integrity sha512-nXW8nqBTrOpDLPgPY9uV+/1DjxoQ7DoB2N8eocyq8I9XuqJ7BiAMDMf9n1xZM9TgW0J8zrquIb/A7s3BJv7rjg== + +"@esbuild/linux-mips64el@0.18.20": + version "0.18.20" + resolved "https://registry.npmmirror.com/@esbuild/linux-mips64el/-/linux-mips64el-0.18.20.tgz#eeff3a937de9c2310de30622a957ad1bd9183231" + integrity sha512-d5NeaXZcHp8PzYy5VnXV3VSd2D328Zb+9dEq5HE6bw6+N86JVPExrA6O68OPwobntbNJ0pzCpUFZTo3w0GyetQ== + +"@esbuild/linux-ppc64@0.18.20": + version "0.18.20" + resolved "https://registry.npmmirror.com/@esbuild/linux-ppc64/-/linux-ppc64-0.18.20.tgz#2f7156bde20b01527993e6881435ad79ba9599fb" + integrity sha512-WHPyeScRNcmANnLQkq6AfyXRFr5D6N2sKgkFo2FqguP44Nw2eyDlbTdZwd9GYk98DZG9QItIiTlFLHJHjxP3FA== + +"@esbuild/linux-riscv64@0.18.20": + version "0.18.20" + resolved "https://registry.npmmirror.com/@esbuild/linux-riscv64/-/linux-riscv64-0.18.20.tgz#6628389f210123d8b4743045af8caa7d4ddfc7a6" + integrity sha512-WSxo6h5ecI5XH34KC7w5veNnKkju3zBRLEQNY7mv5mtBmrP/MjNBCAlsM2u5hDBlS3NGcTQpoBvRzqBcRtpq1A== + +"@esbuild/linux-s390x@0.18.20": + version "0.18.20" + resolved "https://registry.npmmirror.com/@esbuild/linux-s390x/-/linux-s390x-0.18.20.tgz#255e81fb289b101026131858ab99fba63dcf0071" + integrity sha512-+8231GMs3mAEth6Ja1iK0a1sQ3ohfcpzpRLH8uuc5/KVDFneH6jtAJLFGafpzpMRO6DzJ6AvXKze9LfFMrIHVQ== + +"@esbuild/linux-x64@0.18.20": + version "0.18.20" + resolved "https://registry.npmmirror.com/@esbuild/linux-x64/-/linux-x64-0.18.20.tgz#c7690b3417af318a9b6f96df3031a8865176d338" + integrity sha512-UYqiqemphJcNsFEskc73jQ7B9jgwjWrSayxawS6UVFZGWrAAtkzjxSqnoclCXxWtfwLdzU+vTpcNYhpn43uP1w== + +"@esbuild/netbsd-x64@0.18.20": + version "0.18.20" + resolved "https://registry.npmmirror.com/@esbuild/netbsd-x64/-/netbsd-x64-0.18.20.tgz#30e8cd8a3dded63975e2df2438ca109601ebe0d1" + integrity sha512-iO1c++VP6xUBUmltHZoMtCUdPlnPGdBom6IrO4gyKPFFVBKioIImVooR5I83nTew5UOYrk3gIJhbZh8X44y06A== + +"@esbuild/openbsd-x64@0.18.20": + version "0.18.20" + resolved "https://registry.npmmirror.com/@esbuild/openbsd-x64/-/openbsd-x64-0.18.20.tgz#7812af31b205055874c8082ea9cf9ab0da6217ae" + integrity sha512-e5e4YSsuQfX4cxcygw/UCPIEP6wbIL+se3sxPdCiMbFLBWu0eiZOJ7WoD+ptCLrmjZBK1Wk7I6D/I3NglUGOxg== + +"@esbuild/sunos-x64@0.18.20": + version "0.18.20" + resolved "https://registry.npmmirror.com/@esbuild/sunos-x64/-/sunos-x64-0.18.20.tgz#d5c275c3b4e73c9b0ecd38d1ca62c020f887ab9d" + integrity sha512-kDbFRFp0YpTQVVrqUd5FTYmWo45zGaXe0X8E1G/LKFC0v8x0vWrhOWSLITcCn63lmZIxfOMXtCfti/RxN/0wnQ== + +"@esbuild/win32-arm64@0.18.20": + version "0.18.20" + resolved "https://registry.npmmirror.com/@esbuild/win32-arm64/-/win32-arm64-0.18.20.tgz#73bc7f5a9f8a77805f357fab97f290d0e4820ac9" + integrity sha512-ddYFR6ItYgoaq4v4JmQQaAI5s7npztfV4Ag6NrhiaW0RrnOXqBkgwZLofVTlq1daVTQNhtI5oieTvkRPfZrePg== + +"@esbuild/win32-ia32@0.18.20": + version "0.18.20" + resolved "https://registry.npmmirror.com/@esbuild/win32-ia32/-/win32-ia32-0.18.20.tgz#ec93cbf0ef1085cc12e71e0d661d20569ff42102" + integrity sha512-Wv7QBi3ID/rROT08SABTS7eV4hX26sVduqDOTe1MvGMjNd3EjOz4b7zeexIR62GTIEKrfJXKL9LFxTYgkyeu7g== + "@esbuild/win32-x64@0.18.20": version "0.18.20" resolved "https://registry.npmmirror.com/@esbuild/win32-x64/-/win32-x64-0.18.20.tgz" @@ -1072,7 +1177,7 @@ "@types/markdown-it" "^13.0.0" markdown-it "^13.0.1" -"@mdit-vue/shared@^0.12.1", "@mdit-vue/shared@0.12.1": +"@mdit-vue/shared@0.12.1", "@mdit-vue/shared@^0.12.1": version "0.12.1" resolved "https://registry.npmmirror.com/@mdit-vue/shared/-/shared-0.12.1.tgz" integrity sha512-bXgd0KThe4jC2leCFDFsyrudXIckvTwV4WnQK/rRMrXq0/BAuVdSNdIv1LGCWZxD5+oDyPyEPd0lalTIFwqsmg== @@ -1081,7 +1186,7 @@ "@types/markdown-it" "^13.0.0" markdown-it "^13.0.1" -"@mdit-vue/types@^0.12.0", "@mdit-vue/types@0.12.0": +"@mdit-vue/types@0.12.0", "@mdit-vue/types@^0.12.0": version "0.12.0" resolved "https://registry.npmmirror.com/@mdit-vue/types/-/types-0.12.0.tgz" integrity sha512-mrC4y8n88BYvgcgzq9bvTlDgFyi2zuvzmPilRvRc3Uz1iIvq8mDhxJ0rHKFUNzPEScpDvJdIujqiDrulMqiudA== @@ -1103,7 +1208,7 @@ "@types/markdown-it" "^12.2.3" markdown-it "^13.0.1" -"@mdit/plugin-container@^0.4.8", "@mdit/plugin-container@0.4.8": +"@mdit/plugin-container@0.4.8", "@mdit/plugin-container@^0.4.8": version "0.4.8" resolved "https://registry.npmmirror.com/@mdit/plugin-container/-/plugin-container-0.4.8.tgz" integrity sha512-ruiP9XrJ6Uaru/9ZO7iBGm96Fiqr/4Ecn6zHER3/GzWpRJ9oPjrDBWoQ9eFrmINoq1C89puZG0lmAJJ9KCTeAw== @@ -1230,7 +1335,7 @@ "@types/markdown-it" "^12.2.3" markdown-it "^13.0.1" -"@mdit/plugin-tex@^0.4.8", "@mdit/plugin-tex@0.4.8": +"@mdit/plugin-tex@0.4.8", "@mdit/plugin-tex@^0.4.8": version "0.4.8" resolved "https://registry.npmmirror.com/@mdit/plugin-tex/-/plugin-tex-0.4.8.tgz" integrity sha512-HgWb8l0Can+NsxFfLu358Xwj1plxXHXf2YkjxM316pUeVZhNhjPjoqIpR46ebCwWbWW+GmwT0YdeUvQrDgM3ig== @@ -1254,7 +1359,7 @@ "@nodelib/fs.stat" "2.0.5" run-parallel "^1.1.9" -"@nodelib/fs.stat@^2.0.2", "@nodelib/fs.stat@2.0.5": +"@nodelib/fs.stat@2.0.5", "@nodelib/fs.stat@^2.0.2": version "2.0.5" resolved "https://registry.npmmirror.com/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz" integrity sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A== @@ -1343,27 +1448,6 @@ dependencies: "@types/ms" "*" -"@types/eslint-scope@^3.7.3": - version "3.7.6" - resolved "https://registry.npmmirror.com/@types/eslint-scope/-/eslint-scope-3.7.6.tgz" - integrity sha512-zfM4ipmxVKWdxtDaJ3MP3pBurDXOCoyjvlpE3u6Qzrmw4BPbfm4/ambIeTk/r/J0iq/+2/xp0Fmt+gFvXJY2PQ== - dependencies: - "@types/eslint" "*" - "@types/estree" "*" - -"@types/eslint@*": - version "8.44.6" - resolved "https://registry.npmmirror.com/@types/eslint/-/eslint-8.44.6.tgz" - integrity sha512-P6bY56TVmX8y9J87jHNgQh43h6VVU+6H7oN7hgvivV81K2XY8qJZ5vqPy/HdUoVIelii2kChYVzQanlswPWVFw== - dependencies: - "@types/estree" "*" - "@types/json-schema" "*" - -"@types/estree@*", "@types/estree@^1.0.0": - version "1.0.3" - resolved "https://registry.npmmirror.com/@types/estree/-/estree-1.0.3.tgz" - integrity sha512-CS2rOaoQ/eAgAfcTfq6amKG7bsN+EMcgGY4FAFQdvSj2y1ixvOZTUA9mOtCai7E1SYu283XNw7urKK30nP3wkQ== - "@types/estree@0.0.39": version "0.0.39" resolved "https://registry.npmmirror.com/@types/estree/-/estree-0.0.39.tgz" @@ -1387,11 +1471,6 @@ resolved "https://registry.npmmirror.com/@types/js-yaml/-/js-yaml-4.0.6.tgz" integrity sha512-ACTuifTSIIbyksx2HTon3aFtCKWcID7/h3XEmRpDYdMCXxPbl+m9GteOJeaAkiAta/NJaSFuA7ahZ0NkwajDSw== -"@types/json-schema@*", "@types/json-schema@^7.0.8": - version "7.0.14" - resolved "https://registry.npmmirror.com/@types/json-schema/-/json-schema-7.0.14.tgz" - integrity sha512-U3PUjAudAdJBeC2pgN8uTIKgxrb4nlDF3SF0++EldXQvQBGkpFZMSnwQiIoDU77tv45VgNkl/L4ouD+rEomujw== - "@types/jsonfile@*": version "6.1.2" resolved "https://registry.npmmirror.com/@types/jsonfile/-/jsonfile-6.1.2.tgz" @@ -1449,7 +1528,7 @@ resolved "https://registry.npmmirror.com/@types/ms/-/ms-0.7.32.tgz" integrity sha512-xPSg0jm4mqgEkNhowKgZFBNtwoEwF6gJ4Dhww+GFpm3IgtNseHQZ5IqdNwnquZEoANxyDAKDRAdVo4Z72VvD/g== -"@types/node@*", "@types/node@>= 14": +"@types/node@*": version "20.7.1" resolved "https://registry.npmmirror.com/@types/node/-/node-20.7.1.tgz" integrity sha512-LT+OIXpp2kj4E2S/p91BMe+VgGX2+lfO+XTpfXhh+bCk2LkQtHZSub8ewFBMGP5ClysPjTDFa4sMI8Q3n4T0wg== @@ -1593,7 +1672,7 @@ "@vue/compiler-ssr" "3.3.7" "@vue/shared" "3.3.7" -"@vue/shared@^3.3.4", "@vue/shared@3.3.7": +"@vue/shared@3.3.7", "@vue/shared@^3.3.4": version "3.3.7" resolved "https://registry.npmmirror.com/@vue/shared/-/shared-3.3.7.tgz" integrity sha512-N/tbkINRUDExgcPTBvxNkvHGu504k8lzlNQRITVnm6YjOjwa4r0nnbd4Jb01sNpur5hAllyRJzSK5PvB9PPwRg== @@ -1864,168 +1943,17 @@ marked "^4.3.0" vue "^3.3.4" -"@webassemblyjs/ast@^1.11.5", "@webassemblyjs/ast@1.11.6": - version "1.11.6" - resolved "https://registry.npmmirror.com/@webassemblyjs/ast/-/ast-1.11.6.tgz" - integrity sha512-IN1xI7PwOvLPgjcf180gC1bqn3q/QaOCwYUahIOhbYUu8KA/3tw2RT/T0Gidi1l7Hhj5D/INhJxiICObqpMu4Q== - dependencies: - "@webassemblyjs/helper-numbers" "1.11.6" - "@webassemblyjs/helper-wasm-bytecode" "1.11.6" - -"@webassemblyjs/floating-point-hex-parser@1.11.6": - version "1.11.6" - resolved "https://registry.npmmirror.com/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.6.tgz" - integrity sha512-ejAj9hfRJ2XMsNHk/v6Fu2dGS+i4UaXBXGemOfQ/JfQ6mdQg/WXtwleQRLLS4OvfDhv8rYnVwH27YJLMyYsxhw== - -"@webassemblyjs/helper-api-error@1.11.6": - version "1.11.6" - resolved "https://registry.npmmirror.com/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.6.tgz" - integrity sha512-o0YkoP4pVu4rN8aTJgAyj9hC2Sv5UlkzCHhxqWj8butaLvnpdc2jOwh4ewE6CX0txSfLn/UYaV/pheS2Txg//Q== - -"@webassemblyjs/helper-buffer@1.11.6": - version "1.11.6" - resolved "https://registry.npmmirror.com/@webassemblyjs/helper-buffer/-/helper-buffer-1.11.6.tgz" - integrity sha512-z3nFzdcp1mb8nEOFFk8DrYLpHvhKC3grJD2ardfKOzmbmJvEf/tPIqCY+sNcwZIY8ZD7IkB2l7/pqhUhqm7hLA== - -"@webassemblyjs/helper-numbers@1.11.6": - version "1.11.6" - resolved "https://registry.npmmirror.com/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.6.tgz" - integrity sha512-vUIhZ8LZoIWHBohiEObxVm6hwP034jwmc9kuq5GdHZH0wiLVLIPcMCdpJzG4C11cHoQ25TFIQj9kaVADVX7N3g== - dependencies: - "@webassemblyjs/floating-point-hex-parser" "1.11.6" - "@webassemblyjs/helper-api-error" "1.11.6" - "@xtuc/long" "4.2.2" - -"@webassemblyjs/helper-wasm-bytecode@1.11.6": - version "1.11.6" - resolved "https://registry.npmmirror.com/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.6.tgz" - integrity sha512-sFFHKwcmBprO9e7Icf0+gddyWYDViL8bpPjJJl0WHxCdETktXdmtWLGVzoHbqUcY4Be1LkNfwTmXOJUFZYSJdA== - -"@webassemblyjs/helper-wasm-section@1.11.6": - version "1.11.6" - resolved "https://registry.npmmirror.com/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.11.6.tgz" - integrity sha512-LPpZbSOwTpEC2cgn4hTydySy1Ke+XEu+ETXuoyvuyezHO3Kjdu90KK95Sh9xTbmjrCsUwvWwCOQQNta37VrS9g== - dependencies: - "@webassemblyjs/ast" "1.11.6" - "@webassemblyjs/helper-buffer" "1.11.6" - "@webassemblyjs/helper-wasm-bytecode" "1.11.6" - "@webassemblyjs/wasm-gen" "1.11.6" - -"@webassemblyjs/ieee754@1.11.6": - version "1.11.6" - resolved "https://registry.npmmirror.com/@webassemblyjs/ieee754/-/ieee754-1.11.6.tgz" - integrity sha512-LM4p2csPNvbij6U1f19v6WR56QZ8JcHg3QIJTlSwzFcmx6WSORicYj6I63f9yU1kEUtrpG+kjkiIAkevHpDXrg== - dependencies: - "@xtuc/ieee754" "^1.2.0" - -"@webassemblyjs/leb128@1.11.6": - version "1.11.6" - resolved "https://registry.npmmirror.com/@webassemblyjs/leb128/-/leb128-1.11.6.tgz" - integrity sha512-m7a0FhE67DQXgouf1tbN5XQcdWoNgaAuoULHIfGFIEVKA6tu/edls6XnIlkmS6FrXAquJRPni3ZZKjw6FSPjPQ== - dependencies: - "@xtuc/long" "4.2.2" - -"@webassemblyjs/utf8@1.11.6": - version "1.11.6" - resolved "https://registry.npmmirror.com/@webassemblyjs/utf8/-/utf8-1.11.6.tgz" - integrity sha512-vtXf2wTQ3+up9Zsg8sa2yWiQpzSsMyXj0qViVP6xKGCUT8p8YJ6HqI7l5eCnWx1T/FYdsv07HQs2wTFbbof/RA== - -"@webassemblyjs/wasm-edit@^1.11.5": - version "1.11.6" - resolved "https://registry.npmmirror.com/@webassemblyjs/wasm-edit/-/wasm-edit-1.11.6.tgz" - integrity sha512-Ybn2I6fnfIGuCR+Faaz7YcvtBKxvoLV3Lebn1tM4o/IAJzmi9AWYIPWpyBfU8cC+JxAO57bk4+zdsTjJR+VTOw== - dependencies: - "@webassemblyjs/ast" "1.11.6" - "@webassemblyjs/helper-buffer" "1.11.6" - "@webassemblyjs/helper-wasm-bytecode" "1.11.6" - "@webassemblyjs/helper-wasm-section" "1.11.6" - "@webassemblyjs/wasm-gen" "1.11.6" - "@webassemblyjs/wasm-opt" "1.11.6" - "@webassemblyjs/wasm-parser" "1.11.6" - "@webassemblyjs/wast-printer" "1.11.6" - -"@webassemblyjs/wasm-gen@1.11.6": - version "1.11.6" - resolved "https://registry.npmmirror.com/@webassemblyjs/wasm-gen/-/wasm-gen-1.11.6.tgz" - integrity sha512-3XOqkZP/y6B4F0PBAXvI1/bky7GryoogUtfwExeP/v7Nzwo1QLcq5oQmpKlftZLbT+ERUOAZVQjuNVak6UXjPA== - dependencies: - "@webassemblyjs/ast" "1.11.6" - "@webassemblyjs/helper-wasm-bytecode" "1.11.6" - "@webassemblyjs/ieee754" "1.11.6" - "@webassemblyjs/leb128" "1.11.6" - "@webassemblyjs/utf8" "1.11.6" - -"@webassemblyjs/wasm-opt@1.11.6": - version "1.11.6" - resolved "https://registry.npmmirror.com/@webassemblyjs/wasm-opt/-/wasm-opt-1.11.6.tgz" - integrity sha512-cOrKuLRE7PCe6AsOVl7WasYf3wbSo4CeOk6PkrjS7g57MFfVUF9u6ysQBBODX0LdgSvQqRiGz3CXvIDKcPNy4g== - dependencies: - "@webassemblyjs/ast" "1.11.6" - "@webassemblyjs/helper-buffer" "1.11.6" - "@webassemblyjs/wasm-gen" "1.11.6" - "@webassemblyjs/wasm-parser" "1.11.6" - -"@webassemblyjs/wasm-parser@^1.11.5", "@webassemblyjs/wasm-parser@1.11.6": - version "1.11.6" - resolved "https://registry.npmmirror.com/@webassemblyjs/wasm-parser/-/wasm-parser-1.11.6.tgz" - integrity sha512-6ZwPeGzMJM3Dqp3hCsLgESxBGtT/OeCvCZ4TA1JUPYgmhAx38tTPR9JaKy0S5H3evQpO/h2uWs2j6Yc/fjkpTQ== - dependencies: - "@webassemblyjs/ast" "1.11.6" - "@webassemblyjs/helper-api-error" "1.11.6" - "@webassemblyjs/helper-wasm-bytecode" "1.11.6" - "@webassemblyjs/ieee754" "1.11.6" - "@webassemblyjs/leb128" "1.11.6" - "@webassemblyjs/utf8" "1.11.6" - -"@webassemblyjs/wast-printer@1.11.6": - version "1.11.6" - resolved "https://registry.npmmirror.com/@webassemblyjs/wast-printer/-/wast-printer-1.11.6.tgz" - integrity sha512-JM7AhRcE+yW2GWYaKeHL5vt4xqee5N2WcezptmgyhNS+ScggqcT1OtXykhAb13Sn5Yas0j2uv9tHgrjwvzAP4A== - dependencies: - "@webassemblyjs/ast" "1.11.6" - "@xtuc/long" "4.2.2" - -"@xtuc/ieee754@^1.2.0": - version "1.2.0" - resolved "https://registry.npmmirror.com/@xtuc/ieee754/-/ieee754-1.2.0.tgz" - integrity sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA== - -"@xtuc/long@4.2.2": - version "4.2.2" - resolved "https://registry.npmmirror.com/@xtuc/long/-/long-4.2.2.tgz" - integrity sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ== - abortcontroller-polyfill@^1.7.5: version "1.7.5" resolved "https://registry.npmmirror.com/abortcontroller-polyfill/-/abortcontroller-polyfill-1.7.5.tgz" integrity sha512-JMJ5soJWP18htbbxJjG7bG6yuI6pRhgJ0scHHTfkUjf6wjP912xZWvM+A4sJK3gqd9E8fcPbDnOefbA9Th/FIQ== -acorn-import-assertions@^1.9.0: - version "1.9.0" - resolved "https://registry.npmmirror.com/acorn-import-assertions/-/acorn-import-assertions-1.9.0.tgz" - integrity sha512-cmMwop9x+8KFhxvKrKfPYmN6/pKTYYHBqLa0DfvVZcKMJWNyWLnaqND7dx/qn66R7ewM1UX5XMaDVP5wlVTaVA== - -acorn@^8, acorn@^8.7.1, acorn@^8.8.2: +acorn@^8.8.2: version "8.11.2" resolved "https://registry.npmmirror.com/acorn/-/acorn-8.11.2.tgz" integrity sha512-nc0Axzp/0FILLEVsm4fNwLCwMttvhEI263QtVPQcbpfZZ3ts0hLsZGOpE6czNlid7CJ9MlyH8reXkpsf3YUY4w== -ajv-keywords@^3.5.2: - version "3.5.2" - resolved "https://registry.npmmirror.com/ajv-keywords/-/ajv-keywords-3.5.2.tgz" - integrity sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ== - -ajv@^6.12.5, ajv@^6.9.1: - version "6.12.6" - resolved "https://registry.npmmirror.com/ajv/-/ajv-6.12.6.tgz" - integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g== - dependencies: - fast-deep-equal "^3.1.1" - fast-json-stable-stringify "^2.0.0" - json-schema-traverse "^0.4.1" - uri-js "^4.2.2" - -ajv@^8.6.0, ajv@>=8: +ajv@^8.6.0: version "8.12.0" resolved "https://registry.npmmirror.com/ajv/-/ajv-8.12.0.tgz" integrity sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA== @@ -2266,7 +2194,7 @@ braces@^3.0.2, braces@~3.0.2: dependencies: fill-range "^7.0.1" -browserslist@^4.14.5, browserslist@^4.21.10, browserslist@^4.21.9, "browserslist@>= 4.21.0": +browserslist@^4.21.10, browserslist@^4.21.9: version "4.22.0" resolved "https://registry.npmmirror.com/browserslist/-/browserslist-4.22.0.tgz" integrity sha512-v+Jcv64L2LbfTC6OnRcaxtqJNJuQAVhZKSJfR/6hn7lhnChUXl4amwVviqN1k411BB+3rRoKMitELRn1CojeRA== @@ -2376,7 +2304,7 @@ cheerio@1.0.0-rc.12: parse5 "^7.0.0" parse5-htmlparser2-tree-adapter "^7.0.0" -chokidar@^3.5.3, "chokidar@>=3.0.0 <4.0.0": +"chokidar@>=3.0.0 <4.0.0", chokidar@^3.5.3: version "3.5.3" resolved "https://registry.npmmirror.com/chokidar/-/chokidar-3.5.3.tgz" integrity sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw== @@ -2391,11 +2319,6 @@ chokidar@^3.5.3, "chokidar@>=3.0.0 <4.0.0": optionalDependencies: fsevents "~2.3.2" -chrome-trace-event@^1.0.2: - version "1.0.3" - resolved "https://registry.npmmirror.com/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz" - integrity sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg== - cli-cursor@^4.0.0: version "4.0.0" resolved "https://registry.npmmirror.com/cli-cursor/-/cli-cursor-4.0.0.tgz" @@ -2436,25 +2359,15 @@ color-convert@^2.0.1: dependencies: color-name "~1.1.4" -color-name@~1.1.4: - version "1.1.4" - resolved "https://registry.npmmirror.com/color-name/-/color-name-1.1.4.tgz" - integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== - color-name@1.1.3: version "1.1.3" resolved "https://registry.npmmirror.com/color-name/-/color-name-1.1.3.tgz" integrity sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw== -commander@^2.20.0: - version "2.20.3" - resolved "https://registry.npmmirror.com/commander/-/commander-2.20.3.tgz" - integrity sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ== - -commander@^8.3.0: - version "8.3.0" - resolved "https://registry.npmmirror.com/commander/-/commander-8.3.0.tgz" - integrity sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww== +color-name@~1.1.4: + version "1.1.4" + resolved "https://registry.npmmirror.com/color-name/-/color-name-1.1.4.tgz" + integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== commander@7: version "7.2.0" @@ -2466,6 +2379,16 @@ commander@9.2.0: resolved "https://registry.npmmirror.com/commander/-/commander-9.2.0.tgz" integrity sha512-e2i4wANQiSXgnrBlIatyHtP1odfUp0BbV5Y5nEGbxtIrStkEOAAzCUirvLBNXHLr7kwLvJl6V+4V3XV9x7Wd9w== +commander@^2.20.0: + version "2.20.3" + resolved "https://registry.npmmirror.com/commander/-/commander-2.20.3.tgz" + integrity sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ== + +commander@^8.3.0: + version "8.3.0" + resolved "https://registry.npmmirror.com/commander/-/commander-8.3.0.tgz" + integrity sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww== + comment-regex@^1.0.0: version "1.0.1" resolved "https://registry.npmmirror.com/comment-regex/-/comment-regex-1.0.1.tgz" @@ -2576,7 +2499,7 @@ cytoscape-fcose@^2.1.0: dependencies: cose-base "^2.2.0" -cytoscape@^3.2.0, cytoscape@^3.23.0: +cytoscape@^3.23.0: version "3.26.0" resolved "https://registry.npmmirror.com/cytoscape/-/cytoscape-3.26.0.tgz" integrity sha512-IV+crL+KBcrCnVVUCZW+zRRRFUZQcrtdOPXki+o4CFUWLdAEYvuZLcBSJC9EBK++suamERKzeY7roq2hdovV3w== @@ -2584,13 +2507,6 @@ cytoscape@^3.2.0, cytoscape@^3.23.0: heap "^0.2.6" lodash "^4.17.21" -d3-array@^3.2.0, "d3-array@2 - 3", "d3-array@2.10.0 - 3", "d3-array@2.5.0 - 3", d3-array@3: - version "3.2.4" - resolved "https://registry.npmmirror.com/d3-array/-/d3-array-3.2.4.tgz" - integrity sha512-tdQAmyA18i4J7wprpYq8ClcxZy3SC31QMeByyCFyRt7BVHdREQZ5lpzoe5mFEYZUWe+oq8HBvk9JjpibyEV4Jg== - dependencies: - internmap "1 - 2" - "d3-array@1 - 2": version "2.12.1" resolved "https://registry.npmmirror.com/d3-array/-/d3-array-2.12.1.tgz" @@ -2598,6 +2514,13 @@ d3-array@^3.2.0, "d3-array@2 - 3", "d3-array@2.10.0 - 3", "d3-array@2.5.0 - 3", dependencies: internmap "^1.0.0" +"d3-array@2 - 3", "d3-array@2.10.0 - 3", "d3-array@2.5.0 - 3", d3-array@3, d3-array@^3.2.0: + version "3.2.4" + resolved "https://registry.npmmirror.com/d3-array/-/d3-array-3.2.4.tgz" + integrity sha512-tdQAmyA18i4J7wprpYq8ClcxZy3SC31QMeByyCFyRt7BVHdREQZ5lpzoe5mFEYZUWe+oq8HBvk9JjpibyEV4Jg== + dependencies: + internmap "1 - 2" + d3-axis@3: version "3.0.0" resolved "https://registry.npmmirror.com/d3-axis/-/d3-axis-3.0.0.tgz" @@ -2707,16 +2630,16 @@ d3-hierarchy@3: dependencies: d3-color "1 - 3" -d3-path@^3.1.0, "d3-path@1 - 3", d3-path@3: - version "3.1.0" - resolved "https://registry.npmmirror.com/d3-path/-/d3-path-3.1.0.tgz" - integrity sha512-p3KP5HCf/bvjBSSKuXid6Zqijx7wIfNW+J/maPs+iwR35at5JCbLUT0LzF1cnjbCHWhqzQTIN2Jpe8pRebIEFQ== - d3-path@1: version "1.0.9" resolved "https://registry.npmmirror.com/d3-path/-/d3-path-1.0.9.tgz" integrity sha512-VLaYcn81dtHVTjEHd8B+pbe9yHWpXKZUC87PzoFmsFrJqgFwDe/qxfp5MlfsfM1V5E/iVt0MmEbWQ7FVIXh/bg== +"d3-path@1 - 3", d3-path@3, d3-path@^3.1.0: + version "3.1.0" + resolved "https://registry.npmmirror.com/d3-path/-/d3-path-3.1.0.tgz" + integrity sha512-p3KP5HCf/bvjBSSKuXid6Zqijx7wIfNW+J/maPs+iwR35at5JCbLUT0LzF1cnjbCHWhqzQTIN2Jpe8pRebIEFQ== + d3-polygon@3: version "3.0.1" resolved "https://registry.npmmirror.com/d3-polygon/-/d3-polygon-3.0.1.tgz" @@ -2764,13 +2687,6 @@ d3-scale@4: resolved "https://registry.npmmirror.com/d3-selection/-/d3-selection-3.0.0.tgz" integrity sha512-fmTRWbNMmsmWq6xJV8D19U/gw/bwrHfNXxrIN+HfZgnzqTHp9jOmKMhsTUjXOJnZOdZY9Q28y4yebKzqDKlxlQ== -d3-shape@^1.2.0: - version "1.3.7" - resolved "https://registry.npmmirror.com/d3-shape/-/d3-shape-1.3.7.tgz" - integrity sha512-EUkvKjqPFUAZyOlhY5gzCxCeI0Aep04LwIRpsZ/mLFelJiUfnK56jo5JMDSE7yyP2kLSb6LtF+S5chMk7uqPqw== - dependencies: - d3-path "1" - d3-shape@3: version "3.2.0" resolved "https://registry.npmmirror.com/d3-shape/-/d3-shape-3.2.0.tgz" @@ -2778,6 +2694,13 @@ d3-shape@3: dependencies: d3-path "^3.1.0" +d3-shape@^1.2.0: + version "1.3.7" + resolved "https://registry.npmmirror.com/d3-shape/-/d3-shape-1.3.7.tgz" + integrity sha512-EUkvKjqPFUAZyOlhY5gzCxCeI0Aep04LwIRpsZ/mLFelJiUfnK56jo5JMDSE7yyP2kLSb6LtF+S5chMk7uqPqw== + dependencies: + d3-path "1" + "d3-time-format@2 - 4", d3-time-format@4: version "4.1.0" resolved "https://registry.npmmirror.com/d3-time-format/-/d3-time-format-4.1.0.tgz" @@ -3035,14 +2958,6 @@ encode-utf8@^1.0.3: resolved "https://registry.npmmirror.com/encode-utf8/-/encode-utf8-1.0.3.tgz" integrity sha512-ucAnuBEhUK4boH2HjVYG5Q2mQyPorvv0u/ocS+zhdw0S8AlHYY+GOFhP1Gio5z4icpP2ivFSvhtFjQi8+T9ppw== -enhanced-resolve@^5.15.0: - version "5.15.0" - resolved "https://registry.npmmirror.com/enhanced-resolve/-/enhanced-resolve-5.15.0.tgz" - integrity sha512-LXYT42KJ7lpIKECr2mAXIaMldcNCh/7E0KBKOu4KSfkHmP+mZmSs+8V5gBAqisWBy0OO4W5Oyys0GO1Y8KtdKg== - dependencies: - graceful-fs "^4.2.4" - tapable "^2.2.0" - entities@^4.2.0, entities@^4.4.0: version "4.5.0" resolved "https://registry.npmmirror.com/entities/-/entities-4.5.0.tgz" @@ -3103,11 +3018,6 @@ es-abstract@^1.22.1: unbox-primitive "^1.0.2" which-typed-array "^1.1.11" -es-module-lexer@^1.2.1: - version "1.3.1" - resolved "https://registry.npmmirror.com/es-module-lexer/-/es-module-lexer-1.3.1.tgz" - integrity sha512-JUFAyicQV9mXc3YRxPnDlrfBKpqt6hUYzz9/boprUJHs4e4KVr3XwOF70doO6gwXUor6EWZJAyWAfKki84t20Q== - es-set-tostringtag@^2.0.1: version "2.0.1" resolved "https://registry.npmmirror.com/es-set-tostringtag/-/es-set-tostringtag-2.0.1.tgz" @@ -3169,14 +3079,6 @@ escape-string-regexp@^1.0.5: resolved "https://registry.npmmirror.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz" integrity sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg== -eslint-scope@5.1.1: - version "5.1.1" - resolved "https://registry.npmmirror.com/eslint-scope/-/eslint-scope-5.1.1.tgz" - integrity sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw== - dependencies: - esrecurse "^4.3.0" - estraverse "^4.1.1" - esm@^3.2.25: version "3.2.25" resolved "https://registry.npmmirror.com/esm/-/esm-3.2.25.tgz" @@ -3187,23 +3089,6 @@ esprima@^4.0.0: resolved "https://registry.npmmirror.com/esprima/-/esprima-4.0.1.tgz" integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A== -esrecurse@^4.3.0: - version "4.3.0" - resolved "https://registry.npmmirror.com/esrecurse/-/esrecurse-4.3.0.tgz" - integrity sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag== - dependencies: - estraverse "^5.2.0" - -estraverse@^4.1.1: - version "4.3.0" - resolved "https://registry.npmmirror.com/estraverse/-/estraverse-4.3.0.tgz" - integrity sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw== - -estraverse@^5.2.0: - version "5.3.0" - resolved "https://registry.npmmirror.com/estraverse/-/estraverse-5.3.0.tgz" - integrity sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA== - estree-walker@^1.0.1: version "1.0.1" resolved "https://registry.npmmirror.com/estree-walker/-/estree-walker-1.0.1.tgz" @@ -3224,11 +3109,6 @@ eve-raphael@0.5.0: resolved "https://registry.npmmirror.com/eve-raphael/-/eve-raphael-0.5.0.tgz" integrity sha512-jrxnPsCGqng1UZuEp9DecX/AuSyAszATSjf4oEcRxvfxa1Oux4KkIPKBAAWWnpdwfARtr+Q0o9aPYWjsROD7ug== -events@^3.2.0: - version "3.3.0" - resolved "https://registry.npmmirror.com/events/-/events-3.3.0.tgz" - integrity sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q== - execa@^8.0.1: version "8.0.1" resolved "https://registry.npmmirror.com/execa/-/execa-8.0.1.tgz" @@ -3251,16 +3131,16 @@ extend-shallow@^2.0.1: dependencies: is-extendable "^0.1.0" -fast-deep-equal@^3.1.1: - version "3.1.3" - resolved "https://registry.npmmirror.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz" - integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q== - fast-deep-equal@2.0.1: version "2.0.1" resolved "https://registry.npmmirror.com/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz" integrity sha512-bCK/2Z4zLidyB4ReuIsvALH6w31YfAQDmXMqMx6FyfHqvBxtjC0eRumeSu4Bs3XtXwpyIywtSTrVT99BxY1f9w== +fast-deep-equal@^3.1.1: + version "3.1.3" + resolved "https://registry.npmmirror.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz" + integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q== + fast-glob@^3.3.0: version "3.3.1" resolved "https://registry.npmmirror.com/fast-glob/-/fast-glob-3.3.1.tgz" @@ -3272,7 +3152,7 @@ fast-glob@^3.3.0: merge2 "^1.3.0" micromatch "^4.0.4" -fast-json-stable-stringify@^2.0.0, fast-json-stable-stringify@^2.1.0: +fast-json-stable-stringify@^2.1.0: version "2.1.0" resolved "https://registry.npmmirror.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz" integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw== @@ -3356,6 +3236,11 @@ fs.realpath@^1.0.0: resolved "https://registry.npmmirror.com/fs.realpath/-/fs.realpath-1.0.0.tgz" integrity sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw== +fsevents@~2.3.2: + version "2.3.3" + resolved "https://registry.npmmirror.com/fsevents/-/fsevents-2.3.3.tgz#cac6407785d03675a2a5e1a5305c697b347d90d6" + integrity sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw== + function-bind@^1.1.1: version "1.1.1" resolved "https://registry.npmmirror.com/function-bind/-/function-bind-1.1.1.tgz" @@ -3428,11 +3313,6 @@ glob-parent@^5.1.2, glob-parent@~5.1.2: dependencies: is-glob "^4.0.1" -glob-to-regexp@^0.4.1: - version "0.4.1" - resolved "https://registry.npmmirror.com/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz" - integrity sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw== - glob@^7.1.6: version "7.2.3" resolved "https://registry.npmmirror.com/glob/-/glob-7.2.3.tgz" @@ -3475,7 +3355,7 @@ gopd@^1.0.1: dependencies: get-intrinsic "^1.1.3" -graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.2.0, graceful-fs@^4.2.4, graceful-fs@^4.2.9: +graceful-fs@^4.1.6, graceful-fs@^4.2.0: version "4.2.11" resolved "https://registry.npmmirror.com/graceful-fs/-/graceful-fs-4.2.11.tgz" integrity sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ== @@ -3630,7 +3510,7 @@ inflight@^1.0.4: once "^1.3.0" wrappy "1" -inherits@^2.0.3, inherits@^2.0.4, inherits@2: +inherits@2, inherits@^2.0.3, inherits@^2.0.4: version "2.0.4" resolved "https://registry.npmmirror.com/inherits/-/inherits-2.0.4.tgz" integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== @@ -3652,16 +3532,16 @@ internal-slot@^1.0.5: has "^1.0.3" side-channel "^1.0.4" -internmap@^1.0.0: - version "1.0.1" - resolved "https://registry.npmmirror.com/internmap/-/internmap-1.0.1.tgz" - integrity sha512-lDB5YccMydFBtasVtxnZ3MRBHuaoE8GKsppq+EchKL2U4nK/DmEpPHNH8MZe5HkMtpSiTSOZwfN0tzYjO/lJEw== - "internmap@1 - 2": version "2.0.3" resolved "https://registry.npmmirror.com/internmap/-/internmap-2.0.3.tgz" integrity sha512-5Hh7Y1wQbvY5ooGgPbDaL5iYLAPzMTUrjMulskHLH6wnv/A+1q5rgEaiuqEjB+oxGXIVZs1FF+R/KPN3ZSQYYg== +internmap@^1.0.0: + version "1.0.1" + resolved "https://registry.npmmirror.com/internmap/-/internmap-1.0.1.tgz" + integrity sha512-lDB5YccMydFBtasVtxnZ3MRBHuaoE8GKsppq+EchKL2U4nK/DmEpPHNH8MZe5HkMtpSiTSOZwfN0tzYjO/lJEw== + is-alphabetical@^1.0.0: version "1.0.4" resolved "https://registry.npmmirror.com/is-alphabetical/-/is-alphabetical-1.0.4.tgz" @@ -3876,15 +3756,6 @@ jest-worker@^26.2.1: merge-stream "^2.0.0" supports-color "^7.0.0" -jest-worker@^27.4.5: - version "27.5.1" - resolved "https://registry.npmmirror.com/jest-worker/-/jest-worker-27.5.1.tgz" - integrity sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg== - dependencies: - "@types/node" "*" - merge-stream "^2.0.0" - supports-color "^8.0.0" - js-tokens@^4.0.0: version "4.0.0" resolved "https://registry.npmmirror.com/js-tokens/-/js-tokens-4.0.0.tgz" @@ -3915,16 +3786,6 @@ jsesc@~0.5.0: resolved "https://registry.npmmirror.com/jsesc/-/jsesc-0.5.0.tgz" integrity sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA== -json-parse-even-better-errors@^2.3.1: - version "2.3.1" - resolved "https://registry.npmmirror.com/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz" - integrity sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w== - -json-schema-traverse@^0.4.1: - version "0.4.1" - resolved "https://registry.npmmirror.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz" - integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg== - json-schema-traverse@^1.0.0: version "1.0.0" resolved "https://registry.npmmirror.com/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz" @@ -4035,11 +3896,6 @@ lit@^2.7.5: lit-element "^3.3.0" lit-html "^2.8.0" -loader-runner@^4.2.0: - version "4.3.0" - resolved "https://registry.npmmirror.com/loader-runner/-/loader-runner-4.3.0.tgz" - integrity sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg== - loadjs@^4.2.0: version "4.2.0" resolved "https://registry.npmmirror.com/loadjs/-/loadjs-4.2.0.tgz" @@ -4101,14 +3957,7 @@ lru-cache@^6.0.0: dependencies: yallist "^4.0.0" -magic-string@^0.25.0: - version "0.25.9" - resolved "https://registry.npmmirror.com/magic-string/-/magic-string-0.25.9.tgz" - integrity sha512-RmF0AsMzgt25qzqqLc1+MbHmhdx0ojF2Fvs4XnOqz2ZOBXzzkEwc/dJQZCYHAn7v1jbVOjAZfK8msRn4BxO4VQ== - dependencies: - sourcemap-codec "^1.4.8" - -magic-string@^0.25.7: +magic-string@^0.25.0, magic-string@^0.25.7: version "0.25.9" resolved "https://registry.npmmirror.com/magic-string/-/magic-string-0.25.9.tgz" integrity sha512-RmF0AsMzgt25qzqqLc1+MbHmhdx0ojF2Fvs4XnOqz2ZOBXzzkEwc/dJQZCYHAn7v1jbVOjAZfK8msRn4BxO4VQ== @@ -4137,7 +3986,7 @@ markdown-it-emoji@^2.0.2: resolved "https://registry.npmmirror.com/markdown-it-emoji/-/markdown-it-emoji-2.0.2.tgz" integrity sha512-zLftSaNrKuYl0kR5zm4gxXjHaOI3FAOEaloKmRA5hijmJZvSjmxcokOLlzycb/HXlUFWzXqpIEoyEMCE4i9MvQ== -markdown-it@*, markdown-it@^13.0.1: +markdown-it@^13.0.1: version "13.0.2" resolved "https://registry.npmmirror.com/markdown-it/-/markdown-it-13.0.2.tgz" integrity sha512-FtwnEuuK+2yVU7goGn/MJ0WBZMM9ZPgU9spqlFs7/A/pDIUNSOQZhUgOqYCficIuR2QaFnrt8LHqBWsbTAoI5w== @@ -4459,18 +4308,6 @@ micromatch@^4.0.4: braces "^3.0.2" picomatch "^2.3.1" -mime-db@1.52.0: - version "1.52.0" - resolved "https://registry.npmmirror.com/mime-db/-/mime-db-1.52.0.tgz" - integrity sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg== - -mime-types@^2.1.27: - version "2.1.35" - resolved "https://registry.npmmirror.com/mime-types/-/mime-types-2.1.35.tgz" - integrity sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw== - dependencies: - mime-db "1.52.0" - mimic-fn@^2.1.0: version "2.1.0" resolved "https://registry.npmmirror.com/mimic-fn/-/mimic-fn-2.1.0.tgz" @@ -4743,7 +4580,7 @@ postcss-value-parser@^4.2.0: resolved "https://registry.npmmirror.com/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz" integrity sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ== -postcss@^8.1.0, postcss@^8.4.27, postcss@^8.4.28, postcss@^8.4.31, postcss@>=8.0.9: +postcss@^8.4.27, postcss@^8.4.28, postcss@^8.4.31: version "8.4.31" resolved "https://registry.npmmirror.com/postcss/-/postcss-8.4.31.tgz" integrity sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ== @@ -4931,7 +4768,7 @@ rollup-plugin-terser@^7.0.0: serialize-javascript "^4.0.0" terser "^5.0.0" -"rollup@^1.20.0 || ^2.0.0", rollup@^1.20.0||^2.0.0, rollup@^2.0.0, rollup@^2.43.1: +rollup@^2.43.1: version "2.79.1" resolved "https://registry.npmmirror.com/rollup/-/rollup-2.79.1.tgz" integrity sha512-uKxbd0IhMZOhjAiD5oAFp7BqvkA4Dv47qpOCtaNvng4HBwdbWtdOh8f5nZNuk2rp51PMGk3bzfWu5oayNEuYnw== @@ -5000,7 +4837,7 @@ sass-loader@^13.3.2: dependencies: neo-async "^2.6.2" -sass@*, sass@^1.3.0, sass@^1.66.1, sass@^1.69.5: +sass@^1.66.1, sass@^1.69.5: version "1.69.5" resolved "https://registry.npmmirror.com/sass/-/sass-1.69.5.tgz" integrity sha512-qg2+UCJibLr2LCVOt3OlPhr/dqVHWOa9XtZf2OjbLs/T4VPSJ00udtgJxH3neXZm+QqX8B+3cU7RaLqp1iVfcQ== @@ -5009,24 +4846,15 @@ sass@*, sass@^1.3.0, sass@^1.66.1, sass@^1.69.5: immutable "^4.0.0" source-map-js ">=0.6.2 <2.0.0" -sax@^1.2.4: - version "1.3.0" - resolved "https://registry.npmmirror.com/sax/-/sax-1.3.0.tgz" - integrity sha512-0s+oAmw9zLl1V1cS9BtZN7JAd0cW5e0QH4W3LWEK6a4LaLEA2OTpGYWDY+6XasBLtz6wkm3u1xRw95mRuJ59WA== - sax@1.2.1: version "1.2.1" resolved "https://registry.npmmirror.com/sax/-/sax-1.2.1.tgz" integrity sha512-8I2a3LovHTOpm7NV5yOyO8IHqgVsfK4+UuySrXU8YXkSRX7k6hCV9b3HrkKCr3nMpgj+0bmocaJJWpvp1oc7ZA== -schema-utils@^3.1.1, schema-utils@^3.2.0: - version "3.3.0" - resolved "https://registry.npmmirror.com/schema-utils/-/schema-utils-3.3.0.tgz" - integrity sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg== - dependencies: - "@types/json-schema" "^7.0.8" - ajv "^6.12.5" - ajv-keywords "^3.5.2" +sax@^1.2.4: + version "1.3.0" + resolved "https://registry.npmmirror.com/sax/-/sax-1.3.0.tgz" + integrity sha512-0s+oAmw9zLl1V1cS9BtZN7JAd0cW5e0QH4W3LWEK6a4LaLEA2OTpGYWDY+6XasBLtz6wkm3u1xRw95mRuJ59WA== section-matter@^1.0.0: version "1.0.0" @@ -5055,13 +4883,6 @@ serialize-javascript@^4.0.0: dependencies: randombytes "^2.1.0" -serialize-javascript@^6.0.1: - version "6.0.1" - resolved "https://registry.npmmirror.com/serialize-javascript/-/serialize-javascript-6.0.1.tgz" - integrity sha512-owoXEFjWRllis8/M1Q+Cw5k8ZH40e3zhp/ovX+Xr/vi1qj6QesbyXXViFbpNvWvPNAD62SutwEXavefrLJWj7w== - dependencies: - randombytes "^2.1.0" - set-blocking@^2.0.0: version "2.0.0" resolved "https://registry.npmmirror.com/set-blocking/-/set-blocking-2.0.0.tgz" @@ -5127,7 +4948,7 @@ slimsearch@^1.0.0: resolved "https://registry.npmmirror.com/slimsearch/-/slimsearch-1.0.0.tgz" integrity sha512-ig1Du+U5LFngeDokhUupBqmEz3aKRJ4v+R2t6ZOi3aPGaFivYxxOiDcJX7fR0xPxjmTe94rAA6RW5gKlX5Gcsg== -source-map-js@^1.0.2, "source-map-js@>=0.6.2 <2.0.0": +"source-map-js@>=0.6.2 <2.0.0", source-map-js@^1.0.2: version "1.0.2" resolved "https://registry.npmmirror.com/source-map-js/-/source-map-js-1.0.2.tgz" integrity sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw== @@ -5178,23 +4999,7 @@ stdin-discarder@^0.1.0: dependencies: bl "^5.0.0" -string_decoder@^1.1.1: - version "1.3.0" - resolved "https://registry.npmmirror.com/string_decoder/-/string_decoder-1.3.0.tgz" - integrity sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA== - dependencies: - safe-buffer "~5.2.0" - -string-width@^4.1.0: - version "4.2.3" - resolved "https://registry.npmmirror.com/string-width/-/string-width-4.2.3.tgz" - integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== - dependencies: - emoji-regex "^8.0.0" - is-fullwidth-code-point "^3.0.0" - strip-ansi "^6.0.1" - -string-width@^4.2.0: +string-width@^4.1.0, string-width@^4.2.0: version "4.2.3" resolved "https://registry.npmmirror.com/string-width/-/string-width-4.2.3.tgz" integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== @@ -5254,6 +5059,13 @@ string.prototype.trimstart@^1.0.7: define-properties "^1.2.0" es-abstract "^1.22.1" +string_decoder@^1.1.1: + version "1.3.0" + resolved "https://registry.npmmirror.com/string_decoder/-/string_decoder-1.3.0.tgz" + integrity sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA== + dependencies: + safe-buffer "~5.2.0" + stringify-object@^3.3.0: version "3.3.0" resolved "https://registry.npmmirror.com/stringify-object/-/stringify-object-3.3.0.tgz" @@ -5309,37 +5121,18 @@ supports-color@^5.3.0: dependencies: has-flag "^3.0.0" -supports-color@^7.0.0: +supports-color@^7.0.0, supports-color@^7.1.0: version "7.2.0" resolved "https://registry.npmmirror.com/supports-color/-/supports-color-7.2.0.tgz" integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw== dependencies: has-flag "^4.0.0" -supports-color@^7.1.0: - version "7.2.0" - resolved "https://registry.npmmirror.com/supports-color/-/supports-color-7.2.0.tgz" - integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw== - dependencies: - has-flag "^4.0.0" - -supports-color@^8.0.0: - version "8.1.1" - resolved "https://registry.npmmirror.com/supports-color/-/supports-color-8.1.1.tgz" - integrity sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q== - dependencies: - has-flag "^4.0.0" - supports-preserve-symlinks-flag@^1.0.0: version "1.0.0" resolved "https://registry.npmmirror.com/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz" integrity sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w== -tapable@^2.1.1, tapable@^2.2.0: - version "2.2.1" - resolved "https://registry.npmmirror.com/tapable/-/tapable-2.2.1.tgz" - integrity sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ== - temp-dir@^2.0.0: version "2.0.0" resolved "https://registry.npmmirror.com/temp-dir/-/temp-dir-2.0.0.tgz" @@ -5355,18 +5148,7 @@ tempy@^0.6.0: type-fest "^0.16.0" unique-string "^2.0.0" -terser-webpack-plugin@^5.3.7: - version "5.3.9" - resolved "https://registry.npmmirror.com/terser-webpack-plugin/-/terser-webpack-plugin-5.3.9.tgz" - integrity sha512-ZuXsqE07EcggTWQjXUj+Aot/OMcD0bMKGgF63f7UxYcu5/AJF53aIpK1YoP5xR9l6s/Hy2b+t1AM0bLNPRuhwA== - dependencies: - "@jridgewell/trace-mapping" "^0.3.17" - jest-worker "^27.4.5" - schema-utils "^3.1.1" - serialize-javascript "^6.0.1" - terser "^5.16.8" - -terser@^5.0.0, terser@^5.16.8, terser@^5.4.0: +terser@^5.0.0: version "5.22.0" resolved "https://registry.npmmirror.com/terser/-/terser-5.22.0.tgz" integrity sha512-hHZVLgRA2z4NWcN6aS5rQDc+7Dcy58HOf2zbYwmFcQ+ua3h6eEFf5lIDKTzbWwlazPyOZsFQO8V80/IjVNExEw== @@ -5405,16 +5187,16 @@ ts-dedent@^2.2.0: resolved "https://registry.npmmirror.com/ts-dedent/-/ts-dedent-2.2.0.tgz" integrity sha512-q5W7tVM71e2xjHZTlgfTDoPF/SmqKG5hddq9SzR49CH2hayqRKJtQ4mtRlSxKaJlR/+9rEM+mnBHf7I2/BQcpQ== -tslib@^2.5.2: - version "2.6.2" - resolved "https://registry.npmmirror.com/tslib/-/tslib-2.6.2.tgz" - integrity sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q== - tslib@2.3.0: version "2.3.0" resolved "https://registry.npmmirror.com/tslib/-/tslib-2.3.0.tgz" integrity sha512-N82ooyxVNm6h1riLCoyS9e3fuJ3AMG2zIZs2Gd1ATcSFjSA23Q0fzjjZeh0jbJvWVDZ0cJT8yaNNaaXHzueNjg== +tslib@^2.5.2: + version "2.6.2" + resolved "https://registry.npmmirror.com/tslib/-/tslib-2.6.2.tgz" + integrity sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q== + twikoo@^1.6.18: version "1.6.21" resolved "https://registry.npmmirror.com/twikoo/-/twikoo-1.6.21.tgz" @@ -5590,7 +5372,7 @@ vidstack@^0.6.13: media-captions "0.0.18" type-fest "^3.8.0" -vite@^4.0.0, vite@~4.4.9: +vite@~4.4.9: version "4.4.9" resolved "https://registry.npmmirror.com/vite/-/vite-4.4.9.tgz" integrity sha512-2mbUn2LlUmNASWwSCNSJ/EG2HuSRTnVNaydp6vMCm5VIqJsjMfbIWtbH2kDuwUVW5mMUKKZvGPX/rqeqVvv1XA== @@ -5613,7 +5395,7 @@ vue-router@^4.2.4, vue-router@^4.2.5: dependencies: "@vue/devtools-api" "^6.5.0" -"vue@^3.0.0-0 || ^2.6.0", vue@^3.2.0, vue@^3.2.25, vue@^3.3.4, vue@^3.3.7, vue@3.3.7: +vue@^3.3.4, vue@^3.3.7: version "3.3.7" resolved "https://registry.npmmirror.com/vue/-/vue-3.3.7.tgz" integrity sha512-YEMDia1ZTv1TeBbnu6VybatmSteGOS3A3YgfINOfraCbf85wdKHzscD6HSS/vB4GAtI7sa1XPX7HcQaJ1l24zA== @@ -5988,14 +5770,6 @@ vuepress@2.0.0-beta.67: dependencies: vuepress-vite "2.0.0-beta.67" -watchpack@^2.4.0: - version "2.4.0" - resolved "https://registry.npmmirror.com/watchpack/-/watchpack-2.4.0.tgz" - integrity sha512-Lcvm7MGST/4fup+ifyKi2hjyIAwcdI4HRgtvTpIUxBRhB+RFtUh8XtDOxUfctVCnhVi+QQj49i91OyvzkJl6cg== - dependencies: - glob-to-regexp "^0.4.1" - graceful-fs "^4.1.2" - web-worker@^1.2.0: version "1.2.0" resolved "https://registry.npmmirror.com/web-worker/-/web-worker-1.2.0.tgz" @@ -6006,41 +5780,6 @@ webidl-conversions@^4.0.2: resolved "https://registry.npmmirror.com/webidl-conversions/-/webidl-conversions-4.0.2.tgz" integrity sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg== -webpack-sources@^3.2.3: - version "3.2.3" - resolved "https://registry.npmmirror.com/webpack-sources/-/webpack-sources-3.2.3.tgz" - integrity sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w== - -webpack@^5.0.0, webpack@^5.1.0: - version "5.89.0" - resolved "https://registry.npmmirror.com/webpack/-/webpack-5.89.0.tgz" - integrity sha512-qyfIC10pOr70V+jkmud8tMfajraGCZMBWJtrmuBymQKCrLTRejBI8STDp1MCyZu/QTdZSeacCQYpYNQVOzX5kw== - dependencies: - "@types/eslint-scope" "^3.7.3" - "@types/estree" "^1.0.0" - "@webassemblyjs/ast" "^1.11.5" - "@webassemblyjs/wasm-edit" "^1.11.5" - "@webassemblyjs/wasm-parser" "^1.11.5" - acorn "^8.7.1" - acorn-import-assertions "^1.9.0" - browserslist "^4.14.5" - chrome-trace-event "^1.0.2" - enhanced-resolve "^5.15.0" - es-module-lexer "^1.2.1" - eslint-scope "5.1.1" - events "^3.2.0" - glob-to-regexp "^0.4.1" - graceful-fs "^4.2.9" - json-parse-even-better-errors "^2.3.1" - loader-runner "^4.2.0" - mime-types "^2.1.27" - neo-async "^2.6.2" - schema-utils "^3.2.0" - tapable "^2.1.1" - terser-webpack-plugin "^5.3.7" - watchpack "^2.4.0" - webpack-sources "^3.2.3" - webworkify-webpack@^2.1.5: version "2.1.5" resolved "https://registry.npmmirror.com/webworkify-webpack/-/webworkify-webpack-2.1.5.tgz"