diff --git a/.gitignore b/.gitignore
index 4cc42faac..a0d12d133 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,4 +1,5 @@
node_modules/
-docs/.vitepress/cache/
-docs/.vitepress/dist
+.mintlify/
.DS_Store
+/.omc
+.mintlify-last/
\ No newline at end of file
diff --git a/docs/public/QChatGPT-0516.png b/QChatGPT-0516.png
similarity index 100%
rename from docs/public/QChatGPT-0516.png
rename to QChatGPT-0516.png
diff --git a/README.md b/README.md
index 6c540efa4..084860f67 100644
--- a/README.md
+++ b/README.md
@@ -1,44 +1,48 @@
-# [LangBot](https://github.com/langbot-app/LangBot) 官方文档
-
-> 此仓库是 LangBot 的文档仓库,代码仓库:
-> [LangBot 代码仓库](https://github.com/langbot-app/LangBot)
-> 这是 LangBot 4.0 的文档,3.0 文档请见 `v3` 分支
-
-## 参与编写
-
-文档基于 VitePress 生成,本地编写需要安装 Node 和 VitePress
-
-Clone 本仓库,在目录下执行以下命令安装依赖:
-
-```bash
-npm install
-```
-
-完成后即可修改文档,修改完后使用以下命令本地启动:
-
-```bash
-npm run docs:dev
-```
-
-### 使用图片
-
-把图片放到 `docs/assets/image` 目录下,然后在文档中使用Web访问时的绝对路径引用,如:
-
-```markdown
-
-```
-
-### 部署细节
-
-现在使用 Cloudflare Pages 托管,提交后 [@RockChinQ](https://github.com/RockChinQ) 更新分支进行自动部署。
-
-### 一些规范化标准
-
-- 文件夹和文件的命名:**一律使用全小写,单词直接`-`隔开,如**`plugin-intro.md`
-- 子文件(夹)的命名,**不加前缀**(即文件夹的名称),如:`deploy`文件夹下的,文件夹`langbot`,`langbot`文件夹下的`manual`文件称之为`manual.md`
-- 由于这是有关于文档的规范化命名,所以任何文件的名称都可以以教程的角度来理解,如`deploy`是有关部署的教程
-- 除了配置文件板块的文档,其他的页面都不要在顶部加目录
-
----
-
-**[English README](README_EN.md)**
+# [LangBot](https://github.com/langbot-app/LangBot) 官方文档
+
+> 此仓库是 LangBot 的文档仓库,代码仓库:
+> [LangBot 代码仓库](https://github.com/langbot-app/LangBot)
+> 这是 LangBot 4.0 的文档,3.0 文档请见 `v3` 分支
+
+## 参与编写
+
+文档基于 [Mintlify](https://mintlify.com/) 生成,本地编写需要安装 Node.js。
+
+Clone 本仓库,在目录下执行以下命令安装依赖:
+
+```bash
+npm install
+```
+
+完成后即可修改文档,修改完后使用以下命令本地启动预览:
+
+```bash
+npm run dev
+```
+或者直接使用 `mintlify` CLI (推荐):
+```bash
+npx mintlify dev
+```
+
+### 使用图片
+
+把图片放到 `images` 目录下,然后在文档中使用绝对路径引用(相对于项目根目录),如:
+
+```markdown
+
+```
+
+### 部署细节
+
+现已迁移至 Mintlify 托管,提交至 `main` 分支后自动触发部署。
+
+### 一些规范化标准
+
+- 文件夹和文件的命名:**一律使用全小写,单词直接`-`隔开,如**`plugin-intro.mdx`
+- 子文件(夹)的命名,**不加前缀**(即文件夹的名称),如:`deploy`文件夹下的,文件夹`langbot`,`langbot`文件夹下的`manual`文件称之为`manual.mdx`
+- 文档文件格式统一使用 `.mdx` 以支持 Mintlify 组件。
+- 在 `docs.json` 中配置侧边栏导航结构。
+
+---
+
+**[English README](README_EN.md)**
diff --git a/README_EN.md b/README_EN.md
index ee646263c..67b063188 100644
--- a/README_EN.md
+++ b/README_EN.md
@@ -6,7 +6,7 @@
## Contributing to Documentation
-The documentation is generated based on VitePress. Local development requires Node and VitePress installation.
+The documentation is generated based on [Mintlify](https://mintlify.com/). Local development requires Node.js installation.
Clone this repository and execute the following command in the directory to install dependencies:
@@ -17,28 +17,32 @@ npm install
After completion, you can modify the documentation. After modifications, use the following command to start locally:
```bash
-npm run docs:dev
+npm run dev
+```
+Or use the `mintlify` CLI directly (recommended):
+```bash
+npx mintlify dev
```
### Using Images
-Place images in the `docs/assets/image` directory, then reference them using the absolute path when accessed via web, such as:
+Place images in the `images` directory, then reference them using the absolute path (relative to the project root), such as:
```markdown
-
+
```
### Deployment Details
-Currently hosted on Cloudflare Pages. After submission, [@RockChinQ](https://github.com/RockChinQ) updates the branch for automatic deployment.
+Now hosted on Mintlify. Commits to the `main` branch trigger automatic deployment.
### Some Standardization Guidelines
-- Folder and file naming: **Use all lowercase, separate words with `-`, such as** `plugin-intro.md`
-- Sub-file (folder) naming: **No prefix** (i.e., the folder name), such as: in the `deploy` folder, the folder `langbot`, the `manual` file in the `langbot` folder is called `manual.md`
-- Since this is about standardized naming for documentation, any file name can be understood from a tutorial perspective, such as `deploy` being about deployment tutorials
-- Except for configuration file section documents, other pages should not have a table of contents at the top
+- Folder and file naming: **Use all lowercase, separate words with `-`, such as** `plugin-intro.mdx`
+- Sub-file (folder) naming: **No prefix** (i.e., the folder name), such as: in the `deploy` folder, the folder `langbot`, the `manual` file in the `langbot` folder is called `manual.mdx`
+- Documentation files should use `.mdx` format to support Mintlify components.
+- Configure sidebar navigation structure in `docs.json`.
---
-**[中文版 README](README.md)**
\ No newline at end of file
+**[中文版 README](README.md)**
diff --git a/docs/public/c12e8803945846f4ea730e249db79574.txt b/c12e8803945846f4ea730e249db79574.txt
similarity index 100%
rename from docs/public/c12e8803945846f4ea730e249db79574.txt
rename to c12e8803945846f4ea730e249db79574.txt
diff --git a/docs/public/chrome-192.png b/chrome-192.png
similarity index 100%
rename from docs/public/chrome-192.png
rename to chrome-192.png
diff --git a/docs/public/chrome-512.png b/chrome-512.png
similarity index 100%
rename from docs/public/chrome-512.png
rename to chrome-512.png
diff --git a/docs.json b/docs.json
new file mode 100644
index 000000000..463a21633
--- /dev/null
+++ b/docs.json
@@ -0,0 +1,628 @@
+{
+ "$schema": "https://mintlify.com/docs.json",
+ "theme": "mint",
+ "name": "LangBot",
+ "colors": {
+ "primary": "#4692dd",
+ "light": "#4692dd",
+ "dark": "#4692dd"
+ },
+ "fontFamily": "Noto Sans SC",
+ "logo": {
+ "light": "/logo/langbot-logo-0.5x.png",
+ "dark": "/logo/langbot-logo-0.5x.png",
+ "href": "https://langbot.app"
+ },
+ "favicon": "/favicon.ico",
+ "navbar": {
+ "links": [
+ {
+ "label": "Home",
+ "href": "https://langbot.app"
+ },
+ {
+ "label": "Market",
+ "href": "https://space.langbot.app"
+ },
+ {
+ "label": "Blog",
+ "href": "https://blog.langbot.app"
+ },
+ {
+ "label": "Roadmap",
+ "href": "https://langbot.featurebase.app/roadmap"
+ }
+ ]
+ },
+ "footer": {
+ "socials": {
+ "github": "https://github.com/langbot-app/LangBot"
+ }
+ },
+ "redirects": [
+ { "source": "/zh/deploy/models/readme", "destination": "/zh/usage/models/readme" },
+ { "source": "/zh/deploy/platforms/readme", "destination": "/zh/usage/platforms/readme" },
+ { "source": "/zh/deploy/pipelines/readme", "destination": "/zh/usage/pipelines/readme" },
+ { "source": "/zh/deploy/knowledge/readme", "destination": "/zh/usage/knowledge/readme" },
+ { "source": "/en/deploy/models/readme", "destination": "/en/usage/models/readme" },
+ { "source": "/en/deploy/platforms/readme", "destination": "/en/usage/platforms/readme" },
+ { "source": "/en/deploy/pipelines/readme", "destination": "/en/usage/pipelines/readme" },
+ { "source": "/en/deploy/knowledge/readme", "destination": "/en/usage/knowledge/readme" },
+ { "source": "/ja/deploy/models/readme", "destination": "/ja/usage/models/readme" },
+ { "source": "/ja/deploy/platforms/readme", "destination": "/ja/usage/platforms/readme" },
+ { "source": "/ja/deploy/pipelines/readme", "destination": "/ja/usage/pipelines/readme" },
+ { "source": "/ja/deploy/knowledge/readme", "destination": "/ja/usage/knowledge/readme" }
+ ],
+ "navigation": {
+ "languages": [
+ {
+ "language": "cn",
+ "tabs": [
+ {
+ "tab": "指南",
+ "groups": [
+ {
+ "group": "快速开始",
+ "pages": [
+ "zh/insight/guide",
+ "zh/insight/features",
+ "zh/insight/community"
+ ]
+ },
+ {
+ "group": "安装部署",
+ "pages": [
+ "zh/deploy/langbot/package",
+ "zh/deploy/langbot/docker",
+ "zh/deploy/langbot/one-click/1panel",
+ "zh/deploy/langbot/one-click/bt",
+ "zh/deploy/langbot/manual",
+ "zh/deploy/settings",
+ "zh/deploy/update",
+ "zh/deploy/command"
+ ]
+ },
+ {
+ "group": "配置机器人",
+ "pages": [
+ "zh/usage/platforms/readme",
+ "zh/usage/platforms/discord",
+ "zh/usage/platforms/telegram",
+ "zh/usage/platforms/slack",
+ "zh/usage/platforms/line",
+ "zh/usage/platforms/kook",
+ "zh/usage/platforms/lark",
+ "zh/usage/platforms/dingtalk",
+ "zh/usage/platforms/wxoa",
+ {
+ "group": "QQ (OneBot v11)",
+ "pages": [
+ "zh/usage/platforms/qq/aiocqhttp/napcat",
+ "zh/usage/platforms/qq/aiocqhttp/lagrange",
+ "zh/usage/platforms/qq/aiocqhttp/llonebot"
+ ]
+ },
+ {
+ "group": "QQ 官方机器人",
+ "pages": [
+ "zh/usage/platforms/qq/official_webhook",
+ "zh/usage/platforms/qq/official"
+ ]
+ },
+ {
+ "group": "企业微信",
+ "pages": [
+ "zh/usage/platforms/wecom/wecom",
+ "zh/usage/platforms/wecom/wecomcs",
+ "zh/usage/platforms/wecom/wecombot"
+ ]
+ },
+ {
+ "group": "微信",
+ "pages": [
+ "zh/usage/platforms/wechat/wechatpad"
+ ]
+ }
+ ]
+ },
+ {
+ "group": "配置 AI 能力",
+ "pages": [
+ "zh/usage/models/readme",
+ "zh/usage/pipelines/readme",
+ {
+ "group": "接入 LLMOps 平台",
+ "pages": [
+ "zh/usage/pipelines/dify",
+ "zh/usage/pipelines/n8n",
+ "zh/usage/pipelines/langflow",
+ "zh/usage/pipelines/tbox",
+ "zh/usage/pipelines/coze"
+ ]
+ },
+ "zh/usage/knowledge/readme",
+ "zh/usage/mcp/readme"
+ ]
+ },
+ {
+ "group": "进阶运维",
+ "pages": [
+ "zh/workshop/production/proxy-and-ssl",
+ "zh/workshop/network-details",
+ "zh/workshop/mcp-details",
+ "zh/insight/platform-features",
+ {
+ "group": "第三方模型接入",
+ "pages": [
+ "zh/workshop/newapi-integration",
+ "zh/workshop/shengsuanyun-integration",
+ "zh/workshop/tokenpony-integration",
+ "zh/workshop/ppio-integration",
+ "zh/workshop/302ai-integration"
+ ]
+ },
+ {
+ "group": "规模使用",
+ "hidden": true,
+ "pages": [
+ "zh/tob/index",
+ "zh/tob/platform",
+ "zh/tob/provider",
+ "zh/tob/contact"
+ ]
+ }
+ ]
+ },
+ {
+ "group": "插件使用",
+ "pages": [
+ "zh/plugin/plugin-intro",
+ "zh/plugin/compatibility"
+ ]
+ }
+ ]
+ },
+ {
+ "tab": "开发者",
+ "groups": [
+ {
+ "group": "插件开发",
+ "pages": [
+ "zh/plugin/dev/tutor",
+ "zh/plugin/dev/basic-info",
+ "zh/plugin/dev/directory-structure",
+ {
+ "group": "组件开发",
+ "pages": [
+ "zh/plugin/dev/components/add",
+ "zh/plugin/dev/components/event-listener",
+ "zh/plugin/dev/components/command",
+ "zh/plugin/dev/components/tool",
+ "zh/plugin/dev/components/knowledge-retriever"
+ ]
+ },
+ "zh/plugin/dev/style",
+ "zh/plugin/dev/migration",
+ {
+ "group": "发布插件",
+ "pages": [
+ "zh/plugin/dev/publish/market",
+ "zh/plugin/dev/publish/github"
+ ]
+ },
+ "zh/develop/plugin-runtime"
+ ]
+ },
+ {
+ "group": "插件 SDK API",
+ "pages": [
+ "zh/plugin/dev/apis/common",
+ "zh/plugin/dev/apis/pipeline-events",
+ "zh/plugin/dev/apis/messages",
+ "zh/plugin/dev/apis/tech-details"
+ ]
+ },
+ {
+ "group": "核心开发",
+ "pages": [
+ "zh/develop/dev-config",
+ "zh/develop/comp-arch",
+ "zh/workshop/impl-platform-adapter",
+ {
+ "group": "Discord 适配器",
+ "pages": [
+ "zh/develop/adapter/discord/README",
+ "zh/develop/adapter/discord/quick_start",
+ "zh/develop/adapter/discord/design",
+ "zh/develop/adapter/discord/api_reference",
+ "zh/develop/adapter/discord/troubleshooting"
+ ]
+ }
+ ]
+ }
+ ]
+ },
+ {
+ "tab": "API 参考",
+ "groups": [
+ {
+ "group": "Service API",
+ "pages": [
+ "zh/tags/readme",
+ "zh/tags/webhook"
+ ]
+ },
+ {
+ "group": "HTTP API Reference",
+ "openapi": {
+ "source": "openapi/service-api-zh.json",
+ "directory": "zh/api-reference"
+ }
+ }
+ ]
+ }
+ ]
+ },
+ {
+ "language": "en",
+ "tabs": [
+ {
+ "tab": "Guides",
+ "groups": [
+ {
+ "group": "Quick Start",
+ "pages": [
+ "en/insight/guide",
+ "en/insight/features",
+ "en/insight/community"
+ ]
+ },
+ {
+ "group": "Installation",
+ "pages": [
+ "en/deploy/langbot/package",
+ "en/deploy/langbot/docker",
+ "en/deploy/langbot/one-click/1panel",
+ "en/deploy/langbot/one-click/bt",
+ "en/deploy/langbot/manual",
+ "en/deploy/settings",
+ "en/deploy/update",
+ "en/deploy/command"
+ ]
+ },
+ {
+ "group": "Configure Bots",
+ "pages": [
+ "en/usage/platforms/readme",
+ "en/usage/platforms/discord",
+ "en/usage/platforms/telegram",
+ "en/usage/platforms/slack",
+ "en/usage/platforms/line",
+ "en/usage/platforms/kook",
+ "en/usage/platforms/lark",
+ "en/usage/platforms/dingtalk",
+ "en/usage/platforms/wxoa",
+ {
+ "group": "QQ (OneBot v11)",
+ "pages": [
+ "en/usage/platforms/qq/aiocqhttp/napcat",
+ "en/usage/platforms/qq/aiocqhttp/lagrange",
+ "en/usage/platforms/qq/aiocqhttp/llonebot"
+ ]
+ },
+ {
+ "group": "QQ Official Bot",
+ "pages": [
+ "en/usage/platforms/qq/official_webhook"
+ ]
+ },
+ {
+ "group": "WeCom (Enterprise WeChat)",
+ "pages": [
+ "en/usage/platforms/wecom/wecom",
+ "en/usage/platforms/wecom/wecomcs",
+ "en/usage/platforms/wecom/wecombot"
+ ]
+ }
+ ]
+ },
+ {
+ "group": "AI Configuration",
+ "pages": [
+ "en/usage/models/readme",
+ "en/usage/pipelines/readme",
+ {
+ "group": "LLMOps Integrations",
+ "pages": [
+ "en/usage/pipelines/dify",
+ "en/usage/pipelines/n8n",
+ "en/usage/pipelines/langflow",
+ "en/usage/pipelines/coze"
+ ]
+ },
+ "en/usage/knowledge/readme",
+ "en/usage/mcp/readme"
+ ]
+ },
+ {
+ "group": "Advanced Operations",
+ "pages": [
+ "en/workshop/production/proxy-and-ssl",
+ "en/workshop/network-details",
+ "en/workshop/mcp-details",
+ "en/insight/platform-features",
+ {
+ "group": "Third-Party Model Providers",
+ "pages": [
+ "en/workshop/newapi-integration",
+ "en/workshop/ppio-integration",
+ "en/workshop/302ai-integration"
+ ]
+ }
+ ]
+ },
+ {
+ "group": "Using Plugins",
+ "pages": [
+ "en/plugin/plugin-intro",
+ "en/plugin/compatibility"
+ ]
+ }
+ ]
+ },
+ {
+ "tab": "Developers",
+ "groups": [
+ {
+ "group": "Plugin Development",
+ "pages": [
+ "en/plugin/dev/tutor",
+ "en/plugin/dev/basic-info",
+ "en/plugin/dev/directory-structure",
+ {
+ "group": "Component Development",
+ "pages": [
+ "en/plugin/dev/components/add",
+ "en/plugin/dev/components/event-listener",
+ "en/plugin/dev/components/command",
+ "en/plugin/dev/components/tool",
+ "en/plugin/dev/components/knowledge-retriever"
+ ]
+ },
+ "en/plugin/dev/style",
+ "en/plugin/dev/migration",
+ {
+ "group": "Publish Plugin",
+ "pages": [
+ "en/plugin/dev/publish/market",
+ "en/plugin/dev/publish/github"
+ ]
+ },
+ "en/develop/plugin-runtime"
+ ]
+ },
+ {
+ "group": "Plugin SDK API",
+ "pages": [
+ "en/plugin/dev/apis/common",
+ "en/plugin/dev/apis/pipeline-events",
+ "en/plugin/dev/apis/messages",
+ "en/plugin/dev/apis/tech-details"
+ ]
+ },
+ {
+ "group": "Core Development",
+ "pages": [
+ "en/develop/dev-config",
+ "en/develop/comp-arch",
+ "en/workshop/impl-platform-adapter"
+ ]
+ }
+ ]
+ },
+ {
+ "tab": "API Reference",
+ "groups": [
+ {
+ "group": "Service API",
+ "pages": [
+ "en/tags/readme",
+ "en/tags/webhook"
+ ]
+ },
+ {
+ "group": "HTTP API Reference",
+ "openapi": {
+ "source": "openapi/service-api-en.json",
+ "directory": "en/api-reference"
+ }
+ }
+ ]
+ }
+ ]
+ },
+ {
+ "language": "jp",
+ "tabs": [
+ {
+ "tab": "ガイド",
+ "groups": [
+ {
+ "group": "クイックスタート",
+ "pages": [
+ "ja/insight/guide",
+ "ja/insight/features",
+ "ja/insight/community"
+ ]
+ },
+ {
+ "group": "インストール",
+ "pages": [
+ "ja/deploy/langbot/package",
+ "ja/deploy/langbot/docker",
+ "ja/deploy/langbot/one-click/1panel",
+ "ja/deploy/langbot/one-click/bt",
+ "ja/deploy/langbot/manual",
+ "ja/deploy/settings",
+ "ja/deploy/update",
+ "ja/deploy/command"
+ ]
+ },
+ {
+ "group": "ボットを設定",
+ "pages": [
+ "ja/usage/platforms/readme",
+ "ja/usage/platforms/discord",
+ "ja/usage/platforms/telegram",
+ "ja/usage/platforms/slack",
+ "ja/usage/platforms/line",
+ "ja/usage/platforms/kook",
+ "ja/usage/platforms/lark",
+ "ja/usage/platforms/dingtalk",
+ "ja/usage/platforms/wxoa",
+ {
+ "group": "QQ (OneBot v11)",
+ "pages": [
+ "ja/usage/platforms/qq/aiocqhttp/napcat",
+ "ja/usage/platforms/qq/aiocqhttp/lagrange",
+ "ja/usage/platforms/qq/aiocqhttp/llonebot"
+ ]
+ },
+ {
+ "group": "QQ 公式ボット",
+ "pages": [
+ "ja/usage/platforms/qq/official_webhook"
+ ]
+ },
+ {
+ "group": "WeCom(企業微信)",
+ "pages": [
+ "ja/usage/platforms/wecom/wecom",
+ "ja/usage/platforms/wecom/wecomcs",
+ "ja/usage/platforms/wecom/wecombot"
+ ]
+ }
+ ]
+ },
+ {
+ "group": "AI 設定",
+ "pages": [
+ "ja/usage/models/readme",
+ "ja/usage/pipelines/readme",
+ {
+ "group": "LLMOps プラットフォーム連携",
+ "pages": [
+ "ja/usage/pipelines/dify",
+ "ja/usage/pipelines/n8n",
+ "ja/usage/pipelines/langflow",
+ "ja/usage/pipelines/coze"
+ ]
+ },
+ "ja/usage/knowledge/readme",
+ "ja/usage/mcp/readme"
+ ]
+ },
+ {
+ "group": "運用ガイド",
+ "pages": [
+ "ja/workshop/production/proxy-and-ssl",
+ "ja/workshop/network-details",
+ "ja/workshop/mcp-details",
+ "ja/insight/platform-features",
+ {
+ "group": "サードパーティモデル接続",
+ "pages": [
+ "ja/workshop/newapi-integration",
+ "ja/workshop/ppio-integration",
+ "ja/workshop/302ai-integration"
+ ]
+ }
+ ]
+ },
+ {
+ "group": "プラグインの利用",
+ "pages": [
+ "ja/plugin/plugin-intro",
+ "ja/plugin/compatibility"
+ ]
+ }
+ ]
+ },
+ {
+ "tab": "開発者",
+ "groups": [
+ {
+ "group": "プラグイン開発",
+ "pages": [
+ "ja/plugin/dev/tutor",
+ "ja/plugin/dev/basic-info",
+ "ja/plugin/dev/directory-structure",
+ {
+ "group": "コンポーネント開発",
+ "pages": [
+ "ja/plugin/dev/components/add",
+ "ja/plugin/dev/components/event-listener",
+ "ja/plugin/dev/components/command",
+ "ja/plugin/dev/components/tool",
+ "ja/plugin/dev/components/knowledge-retriever"
+ ]
+ },
+ "ja/plugin/dev/style",
+ "ja/plugin/dev/migration",
+ {
+ "group": "プラグインを配布",
+ "pages": [
+ "ja/plugin/dev/publish/market",
+ "ja/plugin/dev/publish/github"
+ ]
+ },
+ "ja/develop/plugin-runtime"
+ ]
+ },
+ {
+ "group": "プラグイン SDK API",
+ "pages": [
+ "ja/plugin/dev/apis/common",
+ "ja/plugin/dev/apis/pipeline-events",
+ "ja/plugin/dev/apis/messages",
+ "ja/plugin/dev/apis/tech-details"
+ ]
+ },
+ {
+ "group": "コア開発",
+ "pages": [
+ "ja/develop/dev-config",
+ "ja/develop/comp-arch",
+ "ja/workshop/impl-platform-adapter"
+ ]
+ }
+ ]
+ },
+ {
+ "tab": "API リファレンス",
+ "groups": [
+ {
+ "group": "Service API",
+ "pages": [
+ "ja/tags/readme",
+ "ja/tags/webhook"
+ ]
+ },
+ {
+ "group": "HTTP API Reference",
+ "openapi": {
+ "source": "openapi/service-api-ja.json",
+ "directory": "ja/api-reference"
+ }
+ }
+ ]
+ }
+ ]
+ }
+ ]
+ },
+ "description": "Production-grade AI Bot Platform for Discord, Telegram, LINE & WeChat etc.",
+ "fonts": {
+ "family": "Source Sans Pro"
+ }
+}
diff --git a/docs/.vitepress/config.mts b/docs/.vitepress/config.mts
deleted file mode 100644
index 2e39ca5b1..000000000
--- a/docs/.vitepress/config.mts
+++ /dev/null
@@ -1,574 +0,0 @@
-import { defineConfig } from "vitepress";
-import { useSidebar } from "vitepress-openapi";
-import specZh from '../assets/service-api-openapi-zh.json' with { type: 'json' }
-import specEn from '../assets/service-api-openapi-en.json' with { type: 'json' }
-
-const sidebarZh = useSidebar({
- spec: specZh,
- linkPrefix: '/zh/tags/',
-})
-
-const sidebarEn = useSidebar({
- spec: specEn,
- linkPrefix: '/en/tags/',
-})
-
-// https://vitepress.dev/reference/site-config
-export default defineConfig({
- themeConfig: {
- logo: "/langbot-logo-0.5x.png",
-
- // 编辑链接
- editLink: {
- pattern:
- "https://github.com/langbot-app/Langbot-Wiki/edit/main/docs/:path",
- },
-
- // 本地搜索
- search: {
- provider: "local",
- },
- },
-
- locales: {
- root: {
- title: "LangBot 文档",
- label: "简体中文",
- lang: "zh",
- link: "/zh/",
- themeConfig: {
- // https://vitepress.dev/reference/default-theme-config
- nav: [
- { text: "主页", link: "https://langbot.app" },
- { text: "路线图", link: "https://langbot.featurebase.app/roadmap" },
- ],
-
- sidebar: [
- {
- text: "概述",
- items: [
- { text: "新手指引(必看)", link: "/zh/insight/guide" },
- { text: "社区资源", link: "/zh/insight/community" },
- { text: "特性规格", link: "/zh/insight/features" },
- ],
- },
- {
- text: "部署和使用",
- items: [
- {
- text: "部署 LangBot",
- collapsed: true,
- items: [
- { text: "包管理器部署", link: "/zh/deploy/langbot/package" },
- { text: "Docker部署", link: "/zh/deploy/langbot/docker" },
- {
- text: "1Panel面板部署",
- link: "/zh/deploy/langbot/one-click/1panel",
- },
- {
- text: "宝塔面板部署",
- link: "/zh/deploy/langbot/one-click/bt",
- },
- { text: "手动部署", link: "/zh/deploy/langbot/manual" },
- ],
- },
- {
- text: "配置机器人",
- collapsed: true,
- link: "/zh/deploy/platforms/readme",
- items: [
- {
- text: "OneBot v11",
- collapsed: true,
- items: [
- {
- text: "NapCat",
- link: "/zh/deploy/platforms/qq/aiocqhttp/napcat",
- },
- {
- text: "Lagrange",
- link: "/zh/deploy/platforms/qq/aiocqhttp/lagrange",
- },
- {
- text: "llonebot",
- link: "/zh/deploy/platforms/qq/aiocqhttp/llonebot",
- },
- ],
- },
- {
- text: "QQ 官方机器人",
- // link: "/deploy/platforms/qq/official",
- collapsed: true,
- items: [
- {
- text: "Webhook 方式",
- link: "/zh/deploy/platforms/qq/official_webhook",
- },
- {
- text: "WebSocket 方式",
- link: "/zh/deploy/platforms/qq/official",
- },
- ],
- },
- {
- text: "企业微信",
- collapsed: true,
- items: [
- {
- text: "内部应用",
- link: "/zh/deploy/platforms/wecom/wecom",
- },
- {
- text: "对外客服",
- link: "/zh/deploy/platforms/wecom/wecomcs",
- },
- {
- text: "智能机器人",
- link: "/zh/deploy/platforms/wecom/wecombot",
- }
- ],
- },
- {
- text: "微信",
- collapsed: true,
- items: [
- {
- text: "WeChatPadPro",
- link: "/zh/deploy/platforms/wechat/wechatpad.md"
- },
- ],
- },
- { text: "微信公众号", link: "/zh/deploy/platforms/wxoa.md" },
- { text: "飞书", link: "/zh/deploy/platforms/lark" },
- { text: "钉钉", link: "/zh/deploy/platforms/dingtalk.md" },
- { text: "Discord", link: "/zh/deploy/platforms/discord" },
- { text: "Telegram", link: "/zh/deploy/platforms/telegram" },
- { text: "Slack", link: "/zh/deploy/platforms/slack" },
- { text: "LINE", link: "/zh/deploy/platforms/line" },
- ],
- },
- {
- text: "配置模型",
- link: "/zh/deploy/models/readme",
- },
- {
- text: "修改对话流水线",
- link: "/zh/deploy/pipelines/readme",
- collapsed: true,
- items: [
- { text: "Dify", link: "/zh/deploy/pipelines/dify" },
- { text: "n8n", link: "/zh/deploy/pipelines/n8n" },
- { text: "Langflow", link: "/zh/deploy/pipelines/langflow" },
- { text: "TBox", link: "/zh/deploy/pipelines/tbox" },
- { text: "Coze", link: "/zh/deploy/pipelines/coze" },
- ],
- },
- {
- text: "使用知识库",
- link: "/zh/deploy/knowledge/readme",
- },
- {
- text: "使用 MCP 服务",
- link: "zh/deploy/mcp/readme"
- },
- {
- text: "系统环境设置",
- link: "/zh/deploy/settings",
- },
- {
- text: "对话命令",
- link: "/zh/deploy/command",
- },
- {
- text: "更新 LangBot",
- link: "/zh/deploy/update",
- },
- ],
- },
- {
- text: "插件",
- // collapsed: true,
- items: [
- { text: "插件介绍", link: "/zh/plugin/plugin-intro" },
- {
- text: "插件开发",
- collapsed: true,
- items: [
- { text: "基础教程", link: "/zh/plugin/dev/tutor" },
- { text: "完善配置信息", link: "/zh/plugin/dev/basic-info" },
- { text: "目录规范", link: "/zh/plugin/dev/directory-structure" },
- {
- text: "组件开发",
- collapsed: true,
- items: [
- { text: "添加组件", link: "/zh/plugin/dev/components/add" },
- { text: "组件:事件监听器", link: "/zh/plugin/dev/components/event-listener" },
- { text: "组件:命令", link: "/zh/plugin/dev/components/command" },
- { text: "组件:工具", link: "/zh/plugin/dev/components/tool" },
- ],
- },
- {
- text: "API 参考",
- collapsed: true,
- items: [
- { text: "插件通用 API", link: "/zh/plugin/dev/apis/common" },
- { text: "流水线事件", link: "/zh/plugin/dev/apis/pipeline-events" },
- { text: "消息平台实体", link: "/zh/plugin/dev/apis/messages" },
- ],
- },
- { text: "迁移指南", link: "/zh/plugin/dev/migration" },
- {
- text: "分发插件", collapsed: true,
- items: [
- { text: "发布到插件市场", link: "/zh/plugin/dev/publish/market" },
- { text: "通过 GitHub 分发", link: "/zh/plugin/dev/publish/github" },
- ]
- },
- ],
- },
- { text: "系统兼容处理", link: "/zh/plugin/compatibility" },
- ],
- },
- {
- text: "实践",
- items: [
- {
- text: "如何实现一个消息平台适配器?",
- link: "/zh/workshop/impl-platform-adapter",
- },
- {
- text: "容器网络配置详解",
- link: "/zh/workshop/network-details",
- },
- {
- text: "使用 New API 中转多种渠道模型",
- link: "/zh/workshop/newapi-integration"
- },
- {
- text: "接入来自胜算云的模型",
- link: "/zh/workshop/shengsuanyun-integration"
- },
- {
- text: "接入来自小马算力的模型",
- link: "/zh/workshop/tokenpony-integration"
- },
- {
- text: "接入 PPIO API 的模型",
- link: "/zh/workshop/ppio-integration"
- },
- {
- text: "接入 302.AI 的模型",
- link: "/zh/workshop/302ai-integration"
- }
- ],
- },
- {
- text: "[Beta] Service API 参考",
- items: [
- { text: "概述", link: "/zh/tags/readme" },
- ...sidebarZh.generateSidebarGroups({
- linkPrefix: '/zh/tags/',
- }).map(group => ({
- ...group,
- collapsed: true, // Collapsible and open by default.
- })),
- ],
- },
- {
- text: "开发",
- items: [
- { text: "开发配置", link: "/zh/develop/dev-config" },
- { text: "组件架构", link: "/zh/develop/comp-arch" },
- { text: "插件运行时", link: "/zh/develop/plugin-runtime" },
- {
- text: "适配器开发",
- collapsed: true,
- items: [
- {
- text: "Discord 适配器",
- collapsed: true,
- items: [
- { text: "概述", link: "/zh/develop/adapter/discord/README" },
- { text: "快速开始", link: "/zh/develop/adapter/discord/quick_start" },
- { text: "架构设计", link: "/zh/develop/adapter/discord/design" },
- { text: "API 参考", link: "/zh/develop/adapter/discord/api_reference" },
- { text: "故障排除", link: "/zh/develop/adapter/discord/troubleshooting" },
- ],
- },
- ],
- },
- ],
- },
- ],
-
- // 编辑链接
- editLink: {
- pattern:
- "https://github.com/langbot-app/Langbot-Wiki/edit/main/docs/:path",
- },
-
- // 导航栏的社交图标
- socialLinks: [
- {
- icon: "github",
- link: "https://github.com/langbot-app/LangBot",
- },
- ],
- },
- },
- en: {
- title: "LangBot Docs",
- label: "English",
- lang: "en",
- link: "/en/",
- themeConfig: {
- // https://vitepress.dev/reference/default-theme-config
-
- nav: [
- { text: "Home", link: "https://langbot.app" },
- { text: "Roadmap", link: "https://langbot.featurebase.app/roadmap" },
- ],
-
- sidebar: [
- {
- text: "Overview",
- items: [
- { text: "Getting Started (Must Read)", link: "/en/insight/guide" },
- { text: "Community Resources", link: "/en/insight/community" },
- { text: "Features", link: "/en/insight/features" },
- ],
- },
- {
- text: "Deployment and Usage",
- items: [
- {
- text: "Deploy LangBot",
- collapsed: true,
- items: [
- { text: "Package Manager Deployment", link: "/en/deploy/langbot/package" },
- { text: "Docker Deployment", link: "/en/deploy/langbot/docker" },
- {
- text: "1Panel Deployment",
- link: "/en/deploy/langbot/one-click/1panel",
- },
- {
- text: "aaPanel Deployment",
- link: "/en/deploy/langbot/one-click/bt",
- },
- { text: "Manual Deployment", link: "/en/deploy/langbot/manual" },
- ],
- },
- {
- text: "Configure Bots",
- collapsed: true,
- link: "/en/deploy/platforms/readme",
- items: [
- { text: "Discord", link: "/en/deploy/platforms/discord" },
- { text: "Telegram", link: "/en/deploy/platforms/telegram" },
- { text: "Slack", link: "/en/deploy/platforms/slack" },
- { text: "LINE", link: "/en/deploy/platforms/line" },
- { text: "Lark", link: "/en/deploy/platforms/lark" },
- { text: "DingTalk", link: "/en/deploy/platforms/dingtalk" },
- {
- text: "OneBot v11",
- collapsed: true,
- items: [
- {
- text: "NapCat",
- link: "/en/deploy/platforms/qq/aiocqhttp/napcat",
- },
- {
- text: "Lagrange",
- link: "/en/deploy/platforms/qq/aiocqhttp/lagrange",
- },
- {
- text: "llonebot",
- link: "/en/deploy/platforms/qq/aiocqhttp/llonebot",
- },
- ],
- },
- {
- text: "QQ Official Bot",
- collapsed: true,
- items: [
- {
- text: "Webhook Method",
- link: "/en/deploy/platforms/qq/official_webhook",
- },
- {
- text: "WebSocket Method",
- link: "/en/deploy/platforms/qq/official",
- },
- ],
- },
- {
- text: "WeCom (Enterprise WeChat)",
- collapsed: true,
- items: [
- {
- text: "Internal Application",
- link: "/en/deploy/platforms/wecom/wecom",
- },
- {
- text: "External Customer Service",
- link: "/en/deploy/platforms/wecom/wecomcs",
- },
- {
- text: "Intelligent Bot",
- link: "/en/deploy/platforms/wecom/wecombot",
- }
- ],
- },
- { text: "WeChat Official Account", link: "/en/deploy/platforms/wxoa" },
- ],
- },
- {
- text: "Configure Models",
- link: "/en/deploy/models/readme",
- },
- {
- text: "Modify Dialogue Pipeline",
- link: "/en/deploy/pipelines/readme",
- collapsed: true,
- items: [
- { text: "Dify", link: "/en/deploy/pipelines/dify" },
- { text: "n8n", link: "/en/deploy/pipelines/n8n" },
- { text: "Langflow", link: "/en/deploy/pipelines/langflow" },
- ],
- },
- {
- text: "Using Knowledge Base",
- link: "/en/deploy/knowledge/readme",
- },
- {
- text: "Using MCP Services",
- link: "/en/deploy/mcp/readme",
- },
- {
- text: "System Settings",
- link: "/en/deploy/settings",
- },
- {
- text: "Dialogue Commands",
- link: "/en/deploy/command",
- },
- {
- text: "Update LangBot",
- link: "/en/deploy/update",
- },
- ],
- },
- {
- text: "Plugins",
- items: [
- { text: "Plugin Introduction", link: "/en/plugin/plugin-intro" },
- {
- text: "Plugin Development",
- collapsed: true,
- items: [
- { text: "Basic Tutorial", link: "/en/plugin/dev/tutor" },
- { text: "Complete Plugin Configuration Information", link: "/en/plugin/dev/basic-info" },
- { text: "Directory Structure", link: "/en/plugin/dev/directory-structure" },
- {
- text: "Component Development",
- collapsed: true,
- items: [
- { text: "Adding Components", link: "/en/plugin/dev/components/add" },
- { text: "Component: Event Listener", link: "/en/plugin/dev/components/event-listener" },
- { text: "Component: Command", link: "/en/plugin/dev/components/command" },
- { text: "Component: Tool", link: "/en/plugin/dev/components/tool" },
- ],
- },
- {
- text: "API Reference",
- collapsed: true,
- items: [
- { text: "Plugin Common APIs", link: "/en/plugin/dev/apis/common" },
- { text: "Pipeline Events", link: "/en/plugin/dev/apis/pipeline-events" },
- { text: "Message Platform Entities", link: "/en/plugin/dev/apis/messages" },
- ],
- },
- { text: "Migration Guide", link: "/en/plugin/dev/migration" },
- {
- text: "Distribute Plugin", collapsed: true,
- items: [
- { text: "Publish to Marketplace", link: "/en/plugin/dev/publish/market" },
- { text: "Distribute via GitHub", link: "/en/plugin/dev/publish/github" },
- ]
- },
- ],
- },
- { text: "System Compatibility", link: "/en/plugin/compatibility" },
- ],
- },
- {
- text: "Workshops",
- items: [
- {
- text: "How to Implement a Message Platform Adapter?",
- link: "/en/workshop/impl-platform-adapter",
- },
- // {
- // text: "Integrating Complete MCP Ecosystem in LangBot",
- // link: "/en/workshop/mcp-details"
- // },
- {
- text: "Container Network Configuration Details",
- link: "/en/workshop/network-details",
- },
- {
- text: "Using New API to Transmit Models from Multiple Channels",
- link: "/en/workshop/newapi-integration"
- },
- {
- text: "Integrating PPIO API Model",
- link: "/en/workshop/ppio-integration"
- },
- {
- text: "Integrating 302.AI Models",
- link: "/en/workshop/302ai-integration"
- }
- ],
- },
- {
- text: "[Beta] Service API Reference",
- items: [
- { text: "Overview", link: "/en/tags/readme" },
- ...sidebarEn.generateSidebarGroups({
- linkPrefix: '/en/tags/',
- }).map(group => ({
- ...group,
- collapsed: true,
- })),
- ],
- },
- {
- text: "Development",
- items: [
- { text: "Development Configuration", link: "/en/develop/dev-config" },
- { text: "Component Architecture", link: "/en/develop/comp-arch" },
- { text: "Plugin Runtime", link: "/en/develop/plugin-runtime" },
- ],
- },
- ],
-
- // edit link
- editLink: {
- pattern:
- "https://github.com/langbot-app/Langbot-Wiki/edit/main/docs/:path",
- },
-
- // social links in the navbar
- socialLinks: [
- {
- icon: "github",
- link: "https://github.com/langbot-app/LangBot",
- },
- ],
- },
- },
- },
-
- // 最后更新时间
- lastUpdated: true,
-});
diff --git a/docs/.vitepress/theme/custom.css b/docs/.vitepress/theme/custom.css
deleted file mode 100644
index fa23cbf5f..000000000
--- a/docs/.vitepress/theme/custom.css
+++ /dev/null
@@ -1,6 +0,0 @@
-/* .vitepress/theme/custom.css */
-:root {
- /* 自定义主页的hero部分的 name 的字体颜色 */
- --vp-home-hero-name-color: transparent;
- --vp-home-hero-name-background: -webkit-linear-gradient(120deg, #bd34fe, #41d1ff);
-}
\ No newline at end of file
diff --git a/docs/.vitepress/theme/index.ts b/docs/.vitepress/theme/index.ts
deleted file mode 100644
index bb041d3a6..000000000
--- a/docs/.vitepress/theme/index.ts
+++ /dev/null
@@ -1,72 +0,0 @@
-// .vitepress/theme/index.ts
-import DefaultTheme from 'vitepress/theme'
-import './custom.css'
-import { theme, useOpenapi } from 'vitepress-openapi/client'
-import 'vitepress-openapi/dist/style.css'
-
-import specZh from '../../assets/service-api-openapi-zh.json'
-import specEn from '../../assets/service-api-openapi-en.json'
-
-export default {
- extends: DefaultTheme,
- enhanceApp({ app, router, siteData }) {
- // Determine which spec to use based on the current route
- const getSpec = () => {
- // Check if we're in the Chinese or English version
- if (typeof window !== 'undefined') {
- const path = window.location.pathname
- return path.startsWith('/zh') ? specZh : specEn
- }
- // Default to Chinese spec for SSR
- return specZh
- }
-
- const getLocale = () => {
- if (typeof window !== 'undefined') {
- const path = window.location.pathname
- return path.startsWith('/zh') ? 'zh' : 'en'
- }
- return 'zh'
- }
-
- // Register the openapi spec with custom configuration
- useOpenapi({
- spec: getSpec(),
- config: {
- // Allow users to customize the server URL in the playground
- server: {
- allowCustomServer: true,
- },
- // Set locale based on current language
- i18n: {
- locale: getLocale(),
- fallbackLocale: 'en',
- },
- },
- })
-
- // Update spec when route changes
- if (router) {
- router.onAfterRouteChanged = (to) => {
- const newSpec = to.startsWith('/zh') ? specZh : specEn
- const newLocale = to.startsWith('/zh') ? 'zh' : 'en'
-
- useOpenapi({
- spec: newSpec,
- config: {
- server: {
- allowCustomServer: true,
- },
- i18n: {
- locale: newLocale,
- fallbackLocale: 'en',
- },
- },
- })
- }
- }
-
- // Then enhance the app with the theme
- theme.enhanceApp({ app, router, siteData })
- }
-}
\ No newline at end of file
diff --git a/docs/assets/icon/chrome-mask-192.png b/docs/assets/icon/chrome-mask-192.png
deleted file mode 100644
index 3aa04857a..000000000
Binary files a/docs/assets/icon/chrome-mask-192.png and /dev/null differ
diff --git a/docs/assets/icon/chrome-mask-512.png b/docs/assets/icon/chrome-mask-512.png
deleted file mode 100644
index 94d6d8ac1..000000000
Binary files a/docs/assets/icon/chrome-mask-512.png and /dev/null differ
diff --git a/docs/assets/icon/guide-maskable.png b/docs/assets/icon/guide-maskable.png
deleted file mode 100644
index 9d678fe6a..000000000
Binary files a/docs/assets/icon/guide-maskable.png and /dev/null differ
diff --git a/docs/assets/image/zh/deploy/bots/lark/lark_04.png b/docs/assets/image/zh/deploy/bots/lark/lark_04.png
deleted file mode 100644
index de741dca7..000000000
Binary files a/docs/assets/image/zh/deploy/bots/lark/lark_04.png and /dev/null differ
diff --git a/docs/assets/image/zh/deploy/bots/lark/lark_14.png b/docs/assets/image/zh/deploy/bots/lark/lark_14.png
deleted file mode 100644
index fe98eb3a4..000000000
Binary files a/docs/assets/image/zh/deploy/bots/lark/lark_14.png and /dev/null differ
diff --git a/docs/assets/image/zh/deploy/bots/qq/official/qqofficial3.png b/docs/assets/image/zh/deploy/bots/qq/official/qqofficial3.png
deleted file mode 100644
index a9cdb118d..000000000
Binary files a/docs/assets/image/zh/deploy/bots/qq/official/qqofficial3.png and /dev/null differ
diff --git a/docs/assets/image/zh/deploy/bots/slack/connect_to_langbot.png b/docs/assets/image/zh/deploy/bots/slack/connect_to_langbot.png
deleted file mode 100644
index 319aa9409..000000000
Binary files a/docs/assets/image/zh/deploy/bots/slack/connect_to_langbot.png and /dev/null differ
diff --git a/docs/assets/image/zh/deploy/bots/wecom/wecom/connect_to_langbot.png b/docs/assets/image/zh/deploy/bots/wecom/wecom/connect_to_langbot.png
deleted file mode 100644
index d88b7e211..000000000
Binary files a/docs/assets/image/zh/deploy/bots/wecom/wecom/connect_to_langbot.png and /dev/null differ
diff --git a/docs/assets/image/zh/deploy/bots/wecom/wecom/wecom1.png b/docs/assets/image/zh/deploy/bots/wecom/wecom/wecom1.png
deleted file mode 100644
index da1b1b256..000000000
Binary files a/docs/assets/image/zh/deploy/bots/wecom/wecom/wecom1.png and /dev/null differ
diff --git a/docs/assets/image/zh/deploy/bots/wecom/wecom/wecom2.png b/docs/assets/image/zh/deploy/bots/wecom/wecom/wecom2.png
deleted file mode 100644
index c281856d0..000000000
Binary files a/docs/assets/image/zh/deploy/bots/wecom/wecom/wecom2.png and /dev/null differ
diff --git a/docs/assets/image/zh/deploy/bots/wecom/wecom/wecom3.jpg b/docs/assets/image/zh/deploy/bots/wecom/wecom/wecom3.jpg
deleted file mode 100644
index e2a16508e..000000000
Binary files a/docs/assets/image/zh/deploy/bots/wecom/wecom/wecom3.jpg and /dev/null differ
diff --git a/docs/assets/image/zh/deploy/bots/wecom/wecom/wecom4.png b/docs/assets/image/zh/deploy/bots/wecom/wecom/wecom4.png
deleted file mode 100644
index 537703d40..000000000
Binary files a/docs/assets/image/zh/deploy/bots/wecom/wecom/wecom4.png and /dev/null differ
diff --git a/docs/assets/image/zh/deploy/bots/wecom/wecom/wecom5.png b/docs/assets/image/zh/deploy/bots/wecom/wecom/wecom5.png
deleted file mode 100644
index d1a79c862..000000000
Binary files a/docs/assets/image/zh/deploy/bots/wecom/wecom/wecom5.png and /dev/null differ
diff --git a/docs/assets/image/zh/deploy/bots/wecom/wecomcs/connect_to_langbot.png b/docs/assets/image/zh/deploy/bots/wecom/wecomcs/connect_to_langbot.png
deleted file mode 100644
index 5a7e70423..000000000
Binary files a/docs/assets/image/zh/deploy/bots/wecom/wecomcs/connect_to_langbot.png and /dev/null differ
diff --git a/docs/assets/image/zh/deploy/bots/wxoa/connect_to_langbot.png b/docs/assets/image/zh/deploy/bots/wxoa/connect_to_langbot.png
deleted file mode 100644
index d96ee2586..000000000
Binary files a/docs/assets/image/zh/deploy/bots/wxoa/connect_to_langbot.png and /dev/null differ
diff --git a/docs/en/deploy/knowledge/readme.md b/docs/en/deploy/knowledge/readme.md
deleted file mode 100644
index d82639c54..000000000
--- a/docs/en/deploy/knowledge/readme.md
+++ /dev/null
@@ -1,29 +0,0 @@
-# Using Knowledge Base
-
-LangBot natively supports RAG (Retrieval-Augmented Generation), you can create a knowledge base and bind it to a pipeline, and the pipeline will answer questions based on the content in the knowledge base.
-
-:::info
-- You need to configure the embedding model before creating a knowledge base, please read [Configure Models](/en/deploy/models/readme).
-:::
-
-## Build Knowledge Base
-
-In the knowledge base page, click the `Create Knowledge Base` button, fill in the knowledge base name, select the configured embedding model, and click the `Create` button.
-
-
-
-## Use Knowledge Base
-
-Please go to the pipeline configuration, in the "AI" page, select `Local Agent` as the runner, and select the knowledge base you just created below.
-
-
-
-
-
-:::info
-Only when the runner is `Local Agent`, can you use the LangBot native knowledge base, if you want to use the knowledge base with other runners, please refer to the documentation of the corresponding product.
-:::
-
-Now you can use the knowledge base to chat in the `Chat Debug` or the robot bound to the pipeline:
-
-
\ No newline at end of file
diff --git a/docs/en/deploy/models/readme.md b/docs/en/deploy/models/readme.md
deleted file mode 100644
index bc8e5455b..000000000
--- a/docs/en/deploy/models/readme.md
+++ /dev/null
@@ -1,31 +0,0 @@
-# Configure Models (Models)
-
-Models will be used by pipelines to process messages. The first model you configure will be set as the model for the default pipeline.
-
-
-
-You can add multiple models, and then select which model to use in the pipeline.
-
-
-
-Enter these four parameters: `Model Name`, `Model Provider`, `Request URL`, and `API Key`, then submit.
-
-For model capabilities, please choose according to the specific model characteristics:
-
-- Visual Capability: Needs to be enabled to recognize images
-
-- Function Calling: Needs to be enabled to use Agent tools in conversations
-
-:::info
-
-*If you don't have an API Key, you can [get one from this relay station](https://api.qhaigc.net/)*
-
-If you need to use third-party API relays or other model providers,
-
-Select `OpenAI`
-
-Fill in the relay's Base URL for the Request URL, for example:
-
-
-
-:::
diff --git a/docs/en/deploy/platforms/lark.md b/docs/en/deploy/platforms/lark.md
deleted file mode 100644
index 9a4782589..000000000
--- a/docs/en/deploy/platforms/lark.md
+++ /dev/null
@@ -1,83 +0,0 @@
-# Connect to Feishu Bot
-
-## Create Bot
-
-Go to the [Feishu Open Platform](https://open.feishu.cn/app), log in, and create an enterprise self-built application.
-
-
-
-
-
-Add bot capability to the application:
-
-
-Add the permissions shown in the image in the permission management:
-
-
-
-If card streaming permissions are required, additionally add the following card creation and update permissions as shown in the image:
-
-
-
-## Connect to LangBot
-
-Find `app_id` and `app_secret` on the `Credentials and Basic Information` page.
-
-
-
-
-
-Open LangBot's Webui configuration page, create a new bot
-
-Fill in the relevant information in the form
-
-
-
-Streaming related:
-
-
-After filling in, start LangBot. If configured successfully, the log will show `[01-29 23:42:56.796] manager.py (68) - [INFO] : Initializing platform adapter 1: lark`, keep LangBot running.
-
-:::warning
-By default, WebSocket long connection mode is used, corresponding to the long connection subscription below. But in some cases (such as international version of Feishu), long connection mode is not available, in which case you need to use Webhook mode, corresponding to the `Send events to developer server` mode, please refer to the following configuration:
-
-- `enable-webhook`: Set to `true`
-- `encrypt-key`: Set to `Encrypt Key` in the `Encryption Strategy` of the `Events and Callbacks` page
-
-Note that in Webhook mode, LangBot needs to be deployed on a server with a public IP, and ensure that the firewall has opened the port configured above.
-:::
-
-## Configure Event Subscription
-
-Go to the `Events and Callbacks` page, configure the subscription method as `Long Connection`:
-
-
-
-And add the event: `Receive Messages`
-
-
-
-:::warning
-Webhook mode configuration method:
-
-
-
-Please start LangBot first, fill in your server address and port here, the path is `/lark/callback`, click `Save`.
-
-:::
-
-## Publish Bot
-
-Click `Create Version` at the top, fill in the version number and other information, click `Save` below.
-
-
-
-Add the bot to a Feishu group to use it:
-
-
-
-
-
-Private chat can also be used directly
-
-
diff --git a/docs/en/deploy/platforms/qq/official_webhook.md b/docs/en/deploy/platforms/qq/official_webhook.md
deleted file mode 100644
index 69468bb5e..000000000
--- a/docs/en/deploy/platforms/qq/official_webhook.md
+++ /dev/null
@@ -1,107 +0,0 @@
-# Using QQ Official Bot API (Using webhook method)
-
-This article only provides the deployment of test bots. For the official launch of bots, please follow the [release process](https://q.qq.com/qqbot/#/home).
-
-## Register QQ Bot (Test Bot)
-
-### Configure Basic Bot Information
-
-Go to the [QQ Open Platform](https://q.qq.com/#/), find `Application Management` at the bottom, click Create Bot, fill in the basic information, and then enter the bot page, as shown:
-
-
-
-The `Release Process` in the `Home` option is the step to launch the bot. Since you are deploying a test version bot, you only need to complete the `Information` and `Sandbox Configuration` sections.
-
-First fill in the information, then click on Sandbox Configuration.
-
-#### Configure Sandbox Settings
-
-Click on `Sandbox Configuration`.
-If you want to deploy in a QQ group, follow the requirements under `QQ Group ID` to select a group chat, and add users with private chat permissions in the message list configuration.
-If you want to deploy in a QQ channel, follow the requirements under `Channel ID` to select a channel ID, with bot type 0.
-
-#### Configure Development Management
-
-Click on `Development Management`.
-
-
-
-Record the `AppID`, `Token`, and `AppSecret`, and add the IP address of the server where LangBot is located to the IP whitelist.
-
-## Connect to LangBot
-
-Next, open the LangBot configuration page
-
-Click on Bots, then click Add
-
-Select `OneBot v11` for `Platform/Adapter Selection`
-
-
-
-
-## Configure Callback Address
-
-Since QQ official bots require the callback address to be an https request, but LangBot only provides http, you need to configure a reverse proxy yourself.
-
-This article recommends using [Caddy](https://caddy2.dengxiaolong.com/docs/) for reverse proxy, with the process as follows.
-
-### Caddy Operation Process
-
-#### Install Caddy
-
-Go to the [Caddy Installation Documentation](https://caddy2.dengxiaolong.com/docs/install). Choose the installation steps for your operating system and install.
-
-#### Fill in Caddyfile
-
-This article assumes that LangBot is deployed on an Ubuntu system, where the default location of Caddyfile is `/etc/caddy/Caddyfile`.
-Use vim or nano to edit Caddyfile, and fill in the Caddyfile as:
-```json
-your_domain_name {
- reverse_proxy 127.0.0.1:2284
-}
-```
-For example, if you have a domain testlb.com that resolves to your machine, and you have port **443** open, fill in:
-```json
-testlb.com {
- reverse_proxy 127.0.0.1:2284
-}
-```
-
-Save and exit the file.
-
-**Note, the Caddyfile format is very strict, please fill it in correctly. If you encounter problems, please refer to the Caddy documentation or ask AI.**
-
-#### Start Caddy
-Enter the command
-```bash
-sudo systemctl start caddy
-```
-
-After successful startup, check the Caddy status with:
-```bash
-sudo systemctl status caddy
-```
-
-
-#### Subsequent Configuration
-
-If Caddy fails to start, please read the [Caddy documentation](https://caddy2.dengxiaolong.com/docs/quick-starts/caddyfile) or join the LangBot community group for help.
-
-Here are some possible issues:
-
-- Port 443 is not open
-- The domain is not resolved to your machine
-- Caddyfile was not saved successfully
-
-### Set Management Portal Callback Address
-
-
-First **start LangBot**.
-
-Click on `Callback Configuration` in the bot management portal, check all events under `Add Event`. In the request address, enter the domain set in Caddyfile, with the suffix `/callback/command`.
-
-For example, if the domain is `testlb.com`, then enter `testlb.com/callback/command` in the request address, and click to confirm the configuration. If the callback address is saved successfully, it means the deployment is successful. If you see `Verification Failed`, please carefully check if the above configuration items are filled in correctly.
-
-## Publication Method
-
-Enter the release process in `Home` and follow the process to publish and launch the bot.
diff --git a/docs/en/deploy/platforms/readme.md b/docs/en/deploy/platforms/readme.md
deleted file mode 100644
index 5ec3be14d..000000000
--- a/docs/en/deploy/platforms/readme.md
+++ /dev/null
@@ -1,21 +0,0 @@
-# Configure Bots (Bots)
-
-Bots are used to receive message events from messaging platforms and call pipelines to process messages.
-
-
-
-
-| Platform | Status | Notes | Tutorial |
-| ------ | ---- | ---- | ---- |
-| Discord | ✅ | | [Tutorial](/en/deploy/platforms/discord) |
-| Telegram | ✅ | | [Tutorial](/en/deploy/platforms/telegram) |
-| Slack | ✅ | | [Tutorial](/en/deploy/platforms/slack) |
-| LINE | ✅ | | [Tutorial](/en/deploy/platforms/line) |
-| Lark | ✅ | | [Tutorial](/en/deploy/platforms/lark) |
-| DingTalk | ✅ | | [Tutorial](/en/deploy/platforms/dingtalk) |
-| WeCom (Enterprise WeChat) | ✅ | Enterprise internal bot | [Tutorial](/en/deploy/platforms/wecom/wecom) |
-| WeCom Intelligent Bot | ✅ | wecom intelligent bot | [Tutorial](/en/deploy/platforms/wecom/wecombot) |
-| WeCom Customer Service | ✅ | Enterprise external bot | [Tutorial](/en/deploy/platforms/wecom/wecomcs) |
-| WeChat Official Account | ✅ | WeChat public platform bot | [Tutorial](/en/deploy/platforms/wxoa) |
-| OneBot v11 | ✅ | Uses a personal QQ account as a bot, requires an independent protocol client, supports OneBot v11 | [NapCat](/en/deploy/platforms/qq/aiocqhttp/napcat)
[Lagrange](/en/deploy/platforms/qq/aiocqhttp/lagrange)
[LiteLoaderQQNT](/en/deploy/platforms/qq/aiocqhttp/llonebot) |
-| QQ Official Bot | ✅ | Connects to the QQ Open Platform bot API | [Tutorial](/en/deploy/platforms/qq/official_webhook) |
diff --git a/docs/en/deploy/platforms/wecom/wecom.md b/docs/en/deploy/platforms/wecom/wecom.md
deleted file mode 100644
index abfc749dc..000000000
--- a/docs/en/deploy/platforms/wecom/wecom.md
+++ /dev/null
@@ -1,64 +0,0 @@
-# Deploy WeCom Bot
-
-Deploy WeCom (Enterprise WeChat) bot to connect with LangBot.
-
-:::info
-This integration method is for internal enterprise applications, used within the enterprise. If you need external customer service, please check the [WeCom Customer Service integration solution](wecomcs.md).
-:::
-
-
-## Create Bot
-
-Enter the [WeCom Admin Portal](https://work.weixin.qq.com/), log in to your account, after entering the main page, click `App Management`, `Build Your Own`, `Create App`, fill in the basic information of the bot, after creation, you will see a page similar to this:
-
-
-## Set Callback Address
-
-### Get WeCom Configuration Items
-
-1. Open the WeCom Admin Portal homepage, click `My Enterprise`, and record the Enterprise ID at the bottom.
-
-
-
-2. Enable Contact Sync Permission
-
-:::info
-- This configuration item is for implementing LangBot's mass messaging feature, the specific code is located in libs/wecom_api/api.py.
-- LangBot is still under development, so the functionality related to this configuration item has not been implemented yet.
-- This configuration item can be filled with random characters, but **cannot be empty**.
-:::
-
-
-
-Click `Security and Management`, `Management Tools`, `Contact Sync`
-
-
-
-Click `View Secret`, record it, this is the contacts_secret (Contact Sync Secret).
-
-3. Click `App Management`, find the bot you just created, view the bot's secret, and record it.
-
-
-
-At this point, you have obtained three configuration items: corpid (Enterprise ID), secret (Bot Secret), and contacts_secret (Contact Sync Secret).
-
-### Configure Callback Address
-
-Enter the bot page.
-
-Click `Enterprise Trusted IP` at the bottom and add the server where LangBot is deployed.
-
-Click `Receive Messages`, `Set API Reception`, and start filling in the server message reception configuration.
-
-Fill in the URL as `http://your_ip_address:2290/callback/command`, where your IP address is the address of the server where LangBot is deployed.
-
-Click to randomly generate the Token and EncodingAESKey, and record them
-
-## Connect to LangBot
-
-
-
-## Save Callback Address
-When the five configuration items above have been correctly obtained and accurately filled into the WeCom adapter, then **start LangBot**.
-
-Return to the callback address configuration page and click save. If the above configuration items are filled in correctly, the save will be successful, which means that WeCom and LangBot can communicate (deployment successful). If you see **openapi request callback address failed**, please triple-check that your configuration items are filled in correctly.
diff --git a/docs/en/develop/comp-arch.md b/docs/en/develop/comp-arch.md
deleted file mode 100644
index f1606d73d..000000000
--- a/docs/en/develop/comp-arch.md
+++ /dev/null
@@ -1,3 +0,0 @@
-# Component Architecture
-
-
diff --git a/docs/en/index.md b/docs/en/index.md
deleted file mode 100644
index 8c7b3173f..000000000
--- a/docs/en/index.md
+++ /dev/null
@@ -1,3 +0,0 @@
-
diff --git a/docs/en/plugin/dev/apis/messages.md b/docs/en/plugin/dev/apis/messages.md
deleted file mode 100644
index de9cf2e57..000000000
--- a/docs/en/plugin/dev/apis/messages.md
+++ /dev/null
@@ -1,96 +0,0 @@
-# Message Platform Entities
-
-:::info Table of Contents
-[[toc]]
-:::
-
-LangBot supports multiple messaging platforms, and each platform has different `message entity` formats. To abstract away these differences, we have implemented a unified standard. Plugin developers only need to master and use the message entities described on this page in plugins, and LangBot's internal message processing logic can automatically handle message parsing and conversion.
-
-## Message Chain
-
-`Messages` on messaging platforms are different from messages used for AI interaction. Messages on messaging platforms are described in the form of `message chains`. Each independent message displayed on QQ is a message chain, which can contain various `message chain components` such as `text`, `images`, `@mentions`, etc. For example:
-
-
-
-This is a message chain containing one Plain component (Hello World) and one Image component (Usagi).
-
-The definitions of message chains and message chain components are located in `langbot_plugin.api.entities.platform.message`.
-
-### Constructing Message Chains
-
-Please first import the `langbot_plugin.api.entities.platform.message` package to use the message components within it.
-
-```python
-from langbot_plugin.api.entities.platform.message import *
-
-# Build a message containing text "Hello LangBot" and an image (from URL)
-msg_chain = MessageChain([
- Plain(text="Hello LangBot"),
- Image(url='https://qchatgpt.rockchin.top/langbot-logo.png')
-])
-
-# Build a message containing @everyone and text "Hello LangBot"
-msg_chain = MessageChain([
- AtAll(),
- Plain(text="Hello LangBot")
-])
-
-# Build a message containing @specific member and text "Hello LangBot"
-msg_chain = MessageChain([
- At(target=123456),
- Plain(text="Hello LangBot")
-])
-```
-
-Currently supported message chain components:
-
-- `Source` - Source message chain information. Messages received from messaging platforms will include this component at the front of the message chain to record message information
-- `Plain` - Plain text message
-- `Quote` - Quote message
-- `Image` - Image message
-- `AtAll` - @everyone message
-- `At` - @specific member message
-- `Voice` - Voice message
- - Need to check messaging platform support
-- `Forward` - Forward message
- - Not supported on many platforms, not recommended
-- `File` - File message
-
-When creating components, named parameters must be used. For specific usage, you can check the definitions in the source code `langbot_plugin.api.entities.platform.message`.
-
-## Other Entities
-
-In addition to the above entities, there are also entities like `Friend` and `Group`. These entities are defined in `langbot_plugin.api.entities.platform.entities`.
-
-## Accessing Underlying Platform APIs
-
-:::warning Note
-Not applicable for 4.x.
-:::
-
-To abstract away platform differences, LangBot provides an abstraction layer above messaging platform APIs, which includes the content described above and various platform adapters in the `pkg/platform/sources` directory.
-However, due to significant platform differences, the entity and API encapsulation in the abstraction layer is not complete. If your plugin needs to access platform-specific functionality, you can access underlying APIs according to the following instructions.
-
-:::info
-The `adapter` here is the instantiated object of each adapter, corresponding to the `xxxAdapter(adapter.MessagePlatformAdapter)` classes in files under `pkg/platform/sources/`. It can be obtained from `query.adapter` in plugin events, for example:
-
-```python
- # For example in a plugin
- @handler(GroupMessageReceived)
- async def _(self, ctx: EventContext):
- # Get adapter object
- adapter = ctx.query.adapter
-```
-:::
-
-| Platform | Adapter | Access Method | Description |
-| --- | --- | --- | --- |
-| OneBot v11| aiocqhttp | adapter.bot | bot object corresponds to [aiocqhttp](https://github.com/nonebot/aiocqhttp) CQHttp object, please refer to aiocqhttp documentation for detailed usage |
-| QQ Official API | qqofficial | adapter.bot | bot object is the SDK object under libs/qq_official_api, for detailed usage please refer to the `send_group_text_msg` method in `QQOfficialClient` in libs/qq_official_api/api.py for HTTP request methods, please refer to QQ Official API documentation for specific interface documentation |
-| WeCom (Enterprise WeChat) | wecom | adapter.bot | Refer to the `send_image` method in `WecomClient` in libs/wecom_api/api.py for HTTP request methods, please refer to WeCom API documentation for specific interface documentation |
-| WeChat Official Account | officialaccount | - | Please refer to WeChat Official Account API documentation for interface documentation, credential information can be obtained from adapter.bot |
-| Lark | lark | adapter.api_client | Lark SDK's API Client object, please refer to [oapi-sdk-python](https://github.com/larksuite/oapi-sdk-python) for details |
-| DingTalk | dingtalk | - | Please refer to DingTalk API documentation, credential information can be obtained from adapter.bot |
-| Discord | discord | adapter.bot | bot object is [Rapptz/discord.py](https://github.com/Rapptz/discord.py) Discord object, please refer to documentation for detailed usage |
-| Telegram | telegram | adapter.bot | bot object is [python-telegram-bot](https://github.com/python-telegram-bot/python-telegram-bot) Telegram object, please refer to documentation for detailed usage |
-| Slack | slack | adapter.bot | bot object in libs/slack_api/api.py, please refer to its code and Slack SDK for detailed usage |
\ No newline at end of file
diff --git a/docs/en/tags/[operationId].md b/docs/en/tags/[operationId].md
deleted file mode 100644
index 587c310a1..000000000
--- a/docs/en/tags/[operationId].md
+++ /dev/null
@@ -1,13 +0,0 @@
----
-aside: false
-outline: [2, 3]
-title: Service API
----
-
-
-
-
diff --git a/docs/en/tags/[operationId].paths.mts b/docs/en/tags/[operationId].paths.mts
deleted file mode 100644
index 1fa0b9cfd..000000000
--- a/docs/en/tags/[operationId].paths.mts
+++ /dev/null
@@ -1,18 +0,0 @@
-import { usePaths } from 'vitepress-openapi'
-import spec from '../../assets/service-api-openapi-en.json' with { type: 'json' }
-
-export default {
- paths() {
- return usePaths({ spec })
- .getPathsByVerbs()
- .filter(item => item && item.operationId)
- .map(({ operationId, summary }) => {
- return {
- params: {
- operationId,
- pageTitle: `${summary || operationId} - LangBot API`,
- },
- }
- })
- },
-}
diff --git a/docs/en/tags/[tag].md b/docs/en/tags/[tag].md
deleted file mode 100644
index c2902a5aa..000000000
--- a/docs/en/tags/[tag].md
+++ /dev/null
@@ -1,16 +0,0 @@
----
-aside: false
-outline: false
-title: Service API
----
-
-
-
-
diff --git a/docs/en/tags/[tag].paths.mts b/docs/en/tags/[tag].paths.mts
deleted file mode 100644
index 7932baa1b..000000000
--- a/docs/en/tags/[tag].paths.mts
+++ /dev/null
@@ -1,17 +0,0 @@
-import { usePaths } from 'vitepress-openapi'
-import spec from '../../assets/service-api-openapi-en.json' with { type: 'json' }
-
-export default {
- paths() {
- return usePaths({ spec })
- .getTags()
- .map(({ name }) => {
- return {
- params: {
- tag: name,
- pageTitle: `${name} - LangBot API`,
- },
- }
- })
- },
-}
diff --git a/docs/en/workshop/302ai-integration.md b/docs/en/workshop/302ai-integration.md
deleted file mode 100644
index cffebfde8..000000000
--- a/docs/en/workshop/302ai-integration.md
+++ /dev/null
@@ -1,5 +0,0 @@
-# Integrating Models with 302 AI
-
-Open the WebUI page, and select [302 AI](https://share.302.ai/SuTG99) when adding a model.
-
-
\ No newline at end of file
diff --git a/docs/index.md b/docs/index.md
deleted file mode 100644
index 8c7b3173f..000000000
--- a/docs/index.md
+++ /dev/null
@@ -1,3 +0,0 @@
-
diff --git a/docs/zh/deploy/knowledge/readme.md b/docs/zh/deploy/knowledge/readme.md
deleted file mode 100644
index 6d3c06484..000000000
--- a/docs/zh/deploy/knowledge/readme.md
+++ /dev/null
@@ -1,30 +0,0 @@
-# 使用知识库 (Knowledge Base)
-
-LangBot 原生支持 RAG(Retrieval-Augmented Generation,即检索增强生成),您可以创建知识库,并将其与流水线绑定,流水线将根据知识库中的内容回答问题。
-
-:::info
-- 知识库的创建和使用需要先配置嵌入模型,请先阅读[配置模型](/zh/deploy/models/readme)。
-:::
-
-## 构建知识库
-
-在知识库页面,点击`创建知识库`按钮,填写知识库名称,选择已配置好的嵌入模型,然后点击`创建`按钮。
-之后请到知识库的“文档”页面,上传文档,LangBot 将会在后台开始解析和索引。
-
-
-
-## 使用知识库
-
-请到流水线配置中,“AI 能力”页,选择`内置 Agent`作为运行器,并在下方选择您刚刚创建的知识库。
-
-
-
-
-
-:::info
-仅当运行器为`内置 Agent`时,才可以使用 LangBot 原生知识库,若要在使用其他运行器时使用知识库,请参考所使用的运行器对应产品的文档。
-:::
-
-现在即可在`对话调试`或流水线所绑定的机器人上使用知识库进行对话:
-
-
\ No newline at end of file
diff --git a/docs/zh/deploy/langbot/docker.md b/docs/zh/deploy/langbot/docker.md
deleted file mode 100644
index 2a7d0077e..000000000
--- a/docs/zh/deploy/langbot/docker.md
+++ /dev/null
@@ -1,42 +0,0 @@
-# Docker部署
-
-:::warning
-建议您先学习以下内容:
-
- - `Docker` 和 `Docker Compose` 的使用
- - Docker 容器间网络通信配置方式
-:::
-
-:::info
-- 请先确保 Git、 Docker 和 Docker Compose 已安装
-- 推荐使用[阿里云,服务器价格低至 38 元一年,更可以享受8折优惠](https://www.aliyun.com/minisite/goods?userCode=ys4ad8gs)
-:::
-
-Git 克隆本项目:
-
-```bash
-git clone https://github.com/langbot-app/LangBot
-cd LangBot/docker
-```
-
-启动容器:
-
-```bash
-docker compose up
-```
-
-:::info
-- 如果你的主机位于中国大陆,可以把上方命令的`https://github.com/langbot-app/LangBot`改为`https://gitcode.com/RockChinQ/LangBot`以使用国内镜像源。
-- 如果你的主机位于中国大陆,可以考虑把 `docker-compose.yaml` 文件中的镜像名称改为`docker.langbot.app/langbot-public/rockchin/langbot:latest`以使用我们提供的镜像源。
-- 推荐[设置 Docker 容器代理](https://yeasy.gitbook.io/docker_practice/advanced_network/http_https_proxy),以便保证 LangBot 在运行期间的网络访问通畅。
-:::
-
-首次启动会输出创建配置文件的提示,请继续按照文件配置。
-
-容器会映射`5300`端口供 WebUI 使用,您可以访问`http://127.0.0.1:5300`查看 WebUI。
-还会映射`2280-2290`端口供使用 OneBot 协议的消息平台适配器反向连接。
-
-完成 LangBot 部署后,请继续阅读:
-
-- [配置机器人文档](/zh/deploy/platforms/readme)。
-- [配置模型文档](/zh/deploy/models/readme)。
diff --git a/docs/zh/deploy/mcp/readme.md b/docs/zh/deploy/mcp/readme.md
deleted file mode 100644
index 2dcebac52..000000000
--- a/docs/zh/deploy/mcp/readme.md
+++ /dev/null
@@ -1,37 +0,0 @@
-# 使用MCP服务器
-
-
-LangBot 支持 SSE 模式 MCP 服务器,您可以添加 MCP 服务器,使用大语言模型中的工具调用特性,更好的处理 LLM 请求。
-
-:::info
-- MCP 服务仅支持 SSE 模式。
-- MCP 服务器推荐获取渠道:[ModelScope](https://modelscope.cn/mcp)
-:::
-
-## 打开模型的函数调用功能
-
-如图,将模型的`函数调用`功能打开。
-
-
-
-## 创建MCP服务器
-
-点击`插件管理` -> `MCP管理`,如图所示:
-
-
-
-点击右上角的`添加`,选择`添加 MCP 服务器`,
-
-
-
-比如使用 Fetch HTML 服务器,填写对应的 URL,点击`测试`用来测试 MCP 服务器,点`提交`添加此服务器。
-
-添加完成之后,点击卡片上的开关以连接 MCP 服务器,点击卡片可以看到 MCP 服务器的详情:
-
-
-
-## 效果
-
-需要在流水线设置中选用 `内置 Agent` 作为运行器,并使用支持函数调用的模型。
-
-
diff --git a/docs/zh/deploy/models/readme.md b/docs/zh/deploy/models/readme.md
deleted file mode 100644
index 32d2a0503..000000000
--- a/docs/zh/deploy/models/readme.md
+++ /dev/null
@@ -1,41 +0,0 @@
-# 配置模型 (Models)
-
-## 对话模型 (LLM Model)
-
-对话模型将被流水线用于处理消息,您配置的第一个模型将被设置为默认流水线的模型。
-
-
-
-可以添加多个模型,然后再流水线中选择具体使用什么模型
-
-
-
-填入这四个参数`模型名称`、`模型供应商`、`请求 URL`、`API Key`,然后提交即可
-
-模型能力方面,请根据具体模型特性来选择:
-
-- 视觉能力:需要启用才可以识图
-
-- 函数调用:需要启用才可以在对话中使用 Agent 工具
-
-:::info
-
-*如果你没有API Key,你可以[在此中转站获取](https://api.qhaigc.net/)*
-
-如果需要使用第三方中转 API 等模型提供商
-
-选择 `OpenAI`即可
-
-请求 URL 填入中转的 Base URL 即可,例如
-
-
-
-:::
-
-## 嵌入模型 (Embedding Model)
-
-嵌入模型将被用于计算消息的向量,若您需要使用知识库,请配置此模型。
-
-
-
-填入这四个参数`模型名称`、`模型供应商`、`请求 URL`、`API Key`,然后提交即可,之后请在知识库中配置使用此模型。
diff --git a/docs/zh/deploy/platforms/lark.md b/docs/zh/deploy/platforms/lark.md
deleted file mode 100644
index 42ffd0e06..000000000
--- a/docs/zh/deploy/platforms/lark.md
+++ /dev/null
@@ -1,83 +0,0 @@
-# 接入飞书机器人
-
-## 创建机器人
-
-前往[飞书开放平台](https://open.feishu.cn/app),登录后,创建企业自建应用。
-
-
-
-
-
-为应用添加机器人能力:
-
-
-在权限管理中添加图中所示权限:
-
-
-
-如需卡片流式权限则多添加如下图的创建与更新卡片:
-
-
-
-## 对接 LangBot
-
-在`凭证与基础信息`页找到`app_id`和`app_secret`。
-
-
-
-
-
-打开LangBot 的 Webui 配置页面,创建一个新的机器人
-
-将相关信息填入表单
-
-
-
-流式相关:
-
-
-填写完成后启动 LangBot,若成功配置,日志中会出现`[01-29 23:42:56.796] manager.py (68) - [INFO] : 初始化平台适配器 1: lark`的字样,保持 LangBot 运行。
-
-:::warning
-默认使用的是 WebSocket 长连接模式,对应下方的长连接订阅。但某些情况下(如国际版飞书)不具有长连接模式,此时需要使用 Webhook 模式,对应`将事件发送到开发者服务器`模式,请参考以下配置:
-
-- `enable-webhook`:设置为`true`
-- `encrypt-key`:设置为`事件与回调`页面的`加密策略`中的`Encrypt Key`
-
-注意,在Webhook模式中,LangBot 需要部署在具有公网 IP 的服务器上,并确保防火墙已开放上方配置的端口。
-:::
-
-## 配置事件订阅
-
-前往`事件与回调`页,配置订阅方式为`长连接`:
-
-
-
-并添加事件:`接收消息`
-
-
-
-:::warning
-Webhook 模式配置方式:
-
-
-
-请先启动 LangBot,在此处填写你的服务器地址和端口,路径为`/lark/callback`,点击`保存`。
-
-:::
-
-## 发布机器人
-
-点击顶部`创建版本`,填写版本号等信息,点击下方`保存`。
-
-
-
-在飞书群中添加机器人,即可使用:
-
-
-
-
-
-私聊也可以直接使用
-
-
\ No newline at end of file
diff --git a/docs/zh/deploy/platforms/qq/official_webhook.md b/docs/zh/deploy/platforms/qq/official_webhook.md
deleted file mode 100644
index 85fd0c050..000000000
--- a/docs/zh/deploy/platforms/qq/official_webhook.md
+++ /dev/null
@@ -1,107 +0,0 @@
-# 使用 QQ 官方机器人 API(使用webhook方式)
-
-本文章只提供测试版机器人的发布,具体机器人上线请按照 [发布流程](https://q.qq.com/qqbot/#/home) 进行部署。
-
-## 注册 QQ 机器人(测试机器人)
-
-### 配置机器人基本信息
-
-前往 [QQ开放平台](https://q.qq.com/#/) ,找到下方的 `应用管理` ,点击创建机器人,填写基本信息之后,进入机器人页面,如图:
-
-
-
-`首页` 选项中的 `发布流程` 即为上线机器人的步骤。由于部署的是测试版机器人,所以只需要进行其中的 `资料` 和 `沙箱配置` 。
-
-先进行资料填写,然后点击沙箱配置。
-
-#### 配置沙箱配置项
-
-点击 `沙箱配置` 。
-如果要部署在QQ群中,那么按照 `QQ群ID` 下方的要求进行选择群聊,在消息列表配置中添加有私聊权限的用户。
-如果要部署在QQ频道中,那么按照 `频道ID` 下方的要求选择频道ID,机器人类型为0。
-
-#### 配置开发管理项
-
-点击 `开发管理` 。
-
-
-
-记录其中的 `AppID` , `Token` , `AppSecret` ,并将 LangBot 所在服务器的IP地址填写到IP白名单中。
-
-## 对接 LangBot
-
-接下来打开 LangBot 配置页面
-
-点击机器人,点击添加
-
-`平台/适配器选择`为`OneBot v11`
-
-
-
-
-## 配置回调地址
-
-由于QQ官方机器人必须要求回调地址是 https 请求,但 LangBot 仅提供 http 方式,所以需要自行配置反向代理。
-
-本文建议使用 [Caddy](https://caddy2.dengxiaolong.com/docs/) 反向代理,操作流程如下文。
-
-### 操作caddy流程
-
-#### 安装caddy
-
-进入[Caddy安装文档](https://caddy2.dengxiaolong.com/docs/install)。选择对应自己操作系统的安装步骤,进行安装。
-
-#### 填写Caddyfile
-
-本文假设使用 ubuntu 系统部署 LangBot ,那么在系统中,Caddyfile 的默认位置为 `/etc/caddy/Caddyfile`。
-使用 vim 或 nano 编辑 Caddyfile ,Caddyfile文件填写为:
-```json
-your_domain_name {
- reverse_proxy 127.0.0.1:2284
-}
-```
-例如,如果你有域名 testlb.com,并且解析地址为本机,同时开启**443**端口,那么填写为:
-```json
-testlb.com {
- reverse_proxy 127.0.0.1:2284
-}
-```
-
-保存并且退出文件。
-
-**注,Caddyfile文件的填写要求非常严苛,请按照正确的格式填写,如果遇到问题请自行查询Caddy文档或者询问AI。**
-
-#### 启动caddy
-输入命令
-```bash
-sudo systemctl start caddy
-```
-
-成功启动后,检查 Caddy 状态命令:
-```bash
-sudo systemctl status caddy
-```
-
-
-#### 后续配置
-
-若 Caddy 启动不成功,请自行阅读 [Caddy文档](https://caddy2.dengxiaolong.com/docs/quick-starts/caddyfile),或者加入 LangBot 社区群请求帮助。
-
-以下是一些可能出现的问题:
-
-- 没有开启443端口
-- 没有将域名解析到本机
-- 没有成功保存 Caddyfile
-
-### 设置管理端回调地址
-
-
-首先 **启动 LangBot** 。
-
-点击 机器人管理端网页中的 `回调配置`,勾选下面 `添加事件` 中的所有事件。 在请求地址中填写 Caddyfile 中设置的域名,后缀为`/callback/command`。
-
-比如域名为 `testlb.com`,那么请求地址中填写 `testlb.com/callback/command` ,点击确定配置。如果回调地址保存成功,那么意味着部署成功。若出现 `校验失败` 字样,请认真检查上述配置项是否填写正确。
-
-## 发布方式
-
-进入 `首页` 的发布流程 ,按照流程进行机器人发布,上线。
diff --git a/docs/zh/deploy/platforms/readme.md b/docs/zh/deploy/platforms/readme.md
deleted file mode 100644
index 8e876024b..000000000
--- a/docs/zh/deploy/platforms/readme.md
+++ /dev/null
@@ -1,21 +0,0 @@
-# 配置机器人 (Bots)
-
-机器人用于从消息平台接收消息事件并调用流水线处理消息。
-
-
-
-
-| 平台 | 状态 | 备注 |教程 |
-| ------ | ---- | ---- | ---- |
-| OneBot v11 | ✅ | 使用普通的 QQ 号作为机器人,需要使用独立的协议端,支持 OneBot v11 | [NapCat](/zh/deploy/platforms/qq/aiocqhttp/napcat)
[Lagrange](/zh/deploy/platforms/qq/aiocqhttp/lagrange)
[LiteLoaderQQNT](/zh/deploy/platforms/qq/aiocqhttp/llonebot) |
-| QQ 官方机器人 | ✅ | 接入 QQ 开放平台的机器人 API | [教程](/zh/deploy/platforms/qq/official_webhook) |
-| 企业微信 | ✅ | 企业内部机器人 | [教程](/zh/deploy/platforms/wecom/wecom) |
-| 企业微信客服 | ✅ | 企业对外机器人 | [教程](/zh/deploy/platforms/wecom/wecomcs) |
-| 企业微信智能机器人 | ✅ | 智能机器人 | [教程](/zh/deploy/platforms/wecom/wecombot) |
-| 微信公众号 | ✅ | 微信公众平台机器人 | [教程](/zh/deploy/platforms/wxoa.md) |
-| 飞书 | ✅ | | [教程](/zh/deploy/platforms/lark) |
-| 钉钉 | ✅ | | [教程](/zh/deploy/platforms/dingtalk) |
-| Discord | ✅ | | [教程](/zh/deploy/platforms/discord) |
-| Telegram | ✅ | | [教程](/zh/deploy/platforms/telegram) |
-| Slack | ✅ | | [教程](/zh/deploy/platforms/slack) |
-| LINE | ✅ | | [教程](/zh/deploy/platforms/line) |
diff --git a/docs/zh/deploy/platforms/wecom/wecom.md b/docs/zh/deploy/platforms/wecom/wecom.md
deleted file mode 100644
index 62e115928..000000000
--- a/docs/zh/deploy/platforms/wecom/wecom.md
+++ /dev/null
@@ -1,75 +0,0 @@
-# 部署企业微信机器人
-
-部署企业微信机器人接入 LangBot 。
-
-:::info
-此种接入方式为企业内部自建应用,是在企业内部使用的,若需要对外接待,请查看[企业微信客服接入方案](wecomcs.md)。
-:::
-
-
-## 创建机器人
-
-进入[企业微信管理后台](https://work.weixin.qq.com/),登陆账号,进入主页面后,点击` 应用管理 `,` 自建 `,` 创建应用 `,填写机器人基本信息,创建好之后,会出现类似这样的界面:
-
-
-## 设置回调地址
-
-### 获取企业微信配置项
-
-1. 打开企业微信管理后台主页,点击`我的企业`,记录下最下面的企业ID。
-
-
-
-2. 开启通讯录同步权限
-
-:::info
-- 此配置项是为了实现 LangBot 的群发消息,具体代码位于libs/wecom_api/api.py 。
-- 目前 LangBot 仍在开发,所以未实现此配置项的相关功能。
-- 此配置项可以填写入随机字符,**不能为空**。
-:::
-
-
-
-点击`安全与管理`,`管理工具`,`通讯录同步`
-
-
-
-点击`查看secret`,记录下来,这是 contacts_secret(通讯录同步 secret)。
-
-3. 点击`应用管理`,找到刚才创建的机器人,查看机器人的 secret ,记录下来。
-
-
-
-至此,已经获得了三个配置项,分别是 corpid(企业ID),secret(机器人 secret),contacts_secret(通讯录同步 secret)。
-
-### 配置回调地址
-
-进入机器人页面。
-
-点击最下方的`企业可信IP`,将部署 LangBot 的服务器添加进去。
-
-点击` 接收消息 `,` 设置API接收 `,开始填写接收服务器消息配置。
-
-URL填写为` http://your_ip_address:2290/callback/command `,你的IP地址就是部署LangBot的服务器的地址。
-
-Token 和 EncodingAESKey 点击随机获取,并记录下来
-
-## 对接 LangBot
-
-
-
-## 保存回调地址
-当前面五个配置项已经正确获取,并且准确的填入到企业微信适配器中,那么**启动 LangBot**。
-
-回到配置回调地址页面并且点击保存,如果以上的配置项填写正确,那么可以保存成功,这意味着企业微信和 LangBot 可以进行通信(部署成功),如果出现**openapi 请求回调地址不通过**,请再三检查你的配置项填写是否正确。
-
-
-
-
-
-
-
-
-
-
-
diff --git a/docs/zh/develop/comp-arch.md b/docs/zh/develop/comp-arch.md
deleted file mode 100644
index 797a03611..000000000
--- a/docs/zh/develop/comp-arch.md
+++ /dev/null
@@ -1,3 +0,0 @@
-# 组件架构
-
-
\ No newline at end of file
diff --git a/docs/zh/index.md b/docs/zh/index.md
deleted file mode 100644
index 8c7b3173f..000000000
--- a/docs/zh/index.md
+++ /dev/null
@@ -1,3 +0,0 @@
-
diff --git a/docs/zh/plugin/dev/apis/messages.md b/docs/zh/plugin/dev/apis/messages.md
deleted file mode 100644
index de2dcb10a..000000000
--- a/docs/zh/plugin/dev/apis/messages.md
+++ /dev/null
@@ -1,97 +0,0 @@
-# 消息平台实体
-
-:::info 目录
-[[toc]]
-:::
-
-LangBot 支持多种消息平台,每个消息平台的`消息实体`格式均不相同。为了屏蔽这些差异,我们实现了一套统一的标准。插件开发者只需要掌握并在插件中使用此页所述的消息实体,LangBot 内部的消息处理逻辑能够自动完成消息的解析和转换。
-
-## 消息链
-
-消息平台的`消息`不同于用于 AI 交互的消息,消息平台的消息以`消息链`的形式描述,QQ 上展示的每一个独立的消息就是一条消息链,消息链中可以包含`文字`、`图片`、`@组件`等多种`消息链组件`,例如:
-
-
-
-这就是一个消息链,包含 一个 Plain 组件(Hello World)和 一个 Image 组件(乌萨奇)
-
-消息链和消息链组件的定义位于`langbot_plugin.api.entities.platform.message`中。
-
-### 构造消息链
-
-请先引入`langbot_plugin.api.entities.platform.message`包,才能使用其中的消息组件。
-
-```python
-from langbot_plugin.api.entities.platform.message import *
-
-# 构建一个包含文字 Hello LangBot 和图片(从URL获取)的消息
-msg_chain = MessageChain([
- Plain(text="Hello LangBot"),
- Image(url='https://qchatgpt.rockchin.top/langbot-logo.png')
-])
-
-# 构建一个包含 @全体成员 和文字 Hello LangBot 的消息
-msg_chain = MessageChain([
- AtAll(),
- Plain(text="Hello LangBot")
-])
-
-# 构建一个包含 @指定成员 和文字 Hello LangBot 的消息
-msg_chain = MessageChain([
- At(target=123456),
- Plain(text="Hello LangBot")
-])
-```
-
-目前支持的消息链组件:
-
-- `Source` 源消息链信息,如果是从消息平台收到的消息,都会在消息链最前端包含此组件,记录消息信息
-- `Plain` 纯文本消息
-- `Quote` 引用消息
-- `Image` 图片消息
-- `AtAll` @全体成员消息
-- `At` @指定成员消息
-- `Voice` 语音消息
- - 需要检查消息平台支持性
-- `Forward` 转发消息
- - 在很多平台不受支持,不建议使用
-- `File` 文件消息
-
-创建组件时,须使用具名参数传入。具体使用方式可以查看源码`langbot_plugin.api.entities.platform.message`中的定义。
-
-## 其他实体
-
-除了上述实体之外,还有`好友 Friend`和`群 Group`等实体,这些实体的定义位于`langbot_plugin.api.entities.platform.entities`中。
-
-## 访问消息平台底层 API
-
-:::warning 注意
-4.x 暂不适用。
-:::
-
-为了抹平各个平台的差异,LangBot 在消息平台API之上,提供了一个抽象层,即上方所述的内容,以及`pkg/platform/sources`目录下的各个平台适配器。
-但由于各个平台的差异较大,抽象层内的实体和 API 封装并不完整,如果您的插件需要访问特定平台的功能,可以按照以下说明访问底层 API。
-
-:::info
-其中的`adapter`为每个适配器的实例化对象,对应 `pkg/platform/sources/` 下各个文件中的 `xxxAdapter(adapter.MessagePlatformAdapter)` 类。可以在插件事件的`query.adapter`中取得,例如:
-
-```python
- # 例如在插件中
- @handler(GroupMessageReceived)
- async def _(self, ctx: EventContext):
- # 取得适配器对象
- adapter = ctx.query.adapter
-```
-:::
-
-
-| 平台 | 适配器 | 访问方式 | 说明 |
-| --- | --- | --- | --- |
-| OneBot v11| aiocqhttp | adapter.bot | bot 对象对应 [aiocqhttp](https://github.com/nonebot/aiocqhttp) 的 CQHttp 对象,详细使用方式请参考 aiocqhttp 文档 |
-| QQ 官方API | qqofficial | adapter.bot | bot 对象为 libs/qq_official_api 下的 SDK 对象,详细使用方式可以参考 libs/qq_official_api/api.py 中`QQOfficialClient`中的`send_group_text_msg`方法发起 HTTP 请求的方式,具体接口文档请查看 QQ 官方 API 文档|
-| 企业微信 | wecom | adapter.bot | 参考 libs/wecom_api/api.py 中`WecomClient`中的`send_image`方法发起 HTTP 请求的方式,具体接口文档请查看企业微信 API 文档 |
-| 微信公众号 | officialaccount | - | 请参考微信公众号的 API 文档中的接口文档信息,相关的凭据信息可以在 adapter.bot 中取得 |
-| 飞书 | lark | adapter.api_client | 飞书 SDK 的 API Client 对象,具体请参考[oapi-sdk-python](https://github.com/larksuite/oapi-sdk-python) |
-| 钉钉 | dingtalk | - | 请参考钉钉 API 文档,相关的凭据信息可以在 adapter.bot 中取得 |
-| Discord | discord | adapter.bot | bot 对象为 [Rapptz/discord.py](https://github.com/Rapptz/discord.py) 的 Discord 对象,详细使用方式请参考文档 |
-| Telegram | telegram | adapter.bot | bot 对象为 [python-telegram-bot](https://github.com/python-telegram-bot/python-telegram-bot) 的 Telegram 对象,详细使用方式请参考文档 |
-| Slack | slack | adapter.bot | bot 对象 libs/slack_api/api.py 中的对象,详细使用方式请参考其代码以及 Slack SDK |
\ No newline at end of file
diff --git a/docs/zh/tags/[operationId].md b/docs/zh/tags/[operationId].md
deleted file mode 100644
index 587c310a1..000000000
--- a/docs/zh/tags/[operationId].md
+++ /dev/null
@@ -1,13 +0,0 @@
----
-aside: false
-outline: [2, 3]
-title: Service API
----
-
-
-
-
diff --git a/docs/zh/tags/[operationId].paths.mts b/docs/zh/tags/[operationId].paths.mts
deleted file mode 100644
index 580371b2e..000000000
--- a/docs/zh/tags/[operationId].paths.mts
+++ /dev/null
@@ -1,18 +0,0 @@
-import { usePaths } from 'vitepress-openapi'
-import spec from '../../assets/service-api-openapi-zh.json' with { type: 'json' }
-
-export default {
- paths() {
- return usePaths({ spec })
- .getPathsByVerbs()
- .filter(item => item && item.operationId)
- .map(({ operationId, summary }) => {
- return {
- params: {
- operationId,
- pageTitle: `${summary || operationId} - LangBot API`,
- },
- }
- })
- },
-}
diff --git a/docs/zh/tags/[tag].md b/docs/zh/tags/[tag].md
deleted file mode 100644
index 8aac25cfe..000000000
--- a/docs/zh/tags/[tag].md
+++ /dev/null
@@ -1,16 +0,0 @@
----
-aside: false
-outline: false
-title: Service API
----
-
-
-
-
\ No newline at end of file
diff --git a/docs/zh/tags/[tag].paths.mts b/docs/zh/tags/[tag].paths.mts
deleted file mode 100644
index ec4ab08cf..000000000
--- a/docs/zh/tags/[tag].paths.mts
+++ /dev/null
@@ -1,18 +0,0 @@
-import { usePaths } from 'vitepress-openapi'
-import spec from '../../assets/service-api-openapi-zh.json' with { type: 'json' }
-
-export default {
- paths() {
- return usePaths({ spec })
- .getTags()
- .map(({ name }) => {
- return {
- params: {
- tag: name,
- pageTitle: `${name} - LangBot API`,
- },
- }
- })
- },
-}
-
diff --git a/docs/zh/workshop/302ai-integration.md b/docs/zh/workshop/302ai-integration.md
deleted file mode 100644
index 6ec7dbf47..000000000
--- a/docs/zh/workshop/302ai-integration.md
+++ /dev/null
@@ -1,6 +0,0 @@
-# 接入 302.AI 的模型
-
-打开 WebUI 页面,添加模型时选择[302.AI](https://share.302.ai/SuTG99)即可
-
-
-
diff --git a/docs/en/deploy/command.md b/en/deploy/command.mdx
similarity index 76%
rename from docs/en/deploy/command.md
rename to en/deploy/command.mdx
index e8413e83e..89421553d 100644
--- a/docs/en/deploy/command.md
+++ b/en/deploy/command.mdx
@@ -1,5 +1,7 @@
-# Command
+---
+title: "Command"
+---
LangBot will regard messages starting with `!` as commands. Official provides [`EssentialCommands` plugin](https://space.langbot.app/market?author=langbot-team&plugin=EssentialCommands), which includes commonly used commands.
-You can also develop your own command plugin, please refer to [Command Plugin Development](/en/plugin/dev/components/command.md).
\ No newline at end of file
+You can also develop your own command plugin, please refer to [Command Plugin Development](/en/plugin/dev/components/command).
diff --git a/docs/en/deploy/langbot/docker.md b/en/deploy/langbot/docker.mdx
similarity index 58%
rename from docs/en/deploy/langbot/docker.md
rename to en/deploy/langbot/docker.mdx
index 8edc6fea4..421810870 100644
--- a/docs/en/deploy/langbot/docker.md
+++ b/en/deploy/langbot/docker.mdx
@@ -1,33 +1,35 @@
-# Docker Deployment
-
-:::warning
-It is recommended that you first learn the following:
-
- - Usage of `Docker` and `Docker Compose`
- - Docker container network communication configuration methods
-:::
-
-:::info
-- Please ensure Git, Docker, and Docker Compose are installed
-:::
-
-Clone the project:
-
-```bash
-git clone https://github.com/langbot-app/LangBot
-cd LangBot/docker
-```
-
-Start the container:
-
-```bash
-docker compose up
-```
-
-The container maps port `5300` for WebUI access. You can visit `http://127.0.0.1:5300` to view the WebUI.
-It also maps ports `2280-2290` for reserved for message platform adapters.
-
-After completing the LangBot deployment, please continue reading:
-
-- [Bot Configuration Documentation](/en/deploy/platforms/readme).
-- [Model Configuration Documentation](/en/deploy/models/readme).
+---
+title: "Docker Deployment"
+---
+
+
+ Before you start, you may learn about in advanced:
+
+ - Usage of `Docker` and `Docker Compose`
+ - Docker container network communication configuration methods
+
+
+
+ - Please ensure Git, Docker, and Docker Compose are installed
+
+
+Clone the project:
+
+```bash
+git clone https://github.com/langbot-app/LangBot
+cd LangBot/docker
+```
+
+Start the container:
+
+```bash
+docker compose up
+```
+
+The container maps port `5300` for WebUI access. You can visit `http://127.0.0.1:5300` to view the WebUI.\
+It also maps ports `2280-2290` for reserved for message platform adapters.
+
+After completing the LangBot deployment, please continue reading:
+
+- [Bot Configuration Documentation](/en/deploy/platforms/readme).
+- [Model Configuration Documentation](/en/deploy/models/readme).
\ No newline at end of file
diff --git a/docs/en/deploy/langbot/manual.md b/en/deploy/langbot/manual.mdx
similarity index 69%
rename from docs/en/deploy/langbot/manual.md
rename to en/deploy/langbot/manual.mdx
index 483e5ab7e..9c9d144f2 100644
--- a/docs/en/deploy/langbot/manual.md
+++ b/en/deploy/langbot/manual.mdx
@@ -1,46 +1,43 @@
-# Manual Deployment
-
-:::warning
-1. Please use Python 3.10.1 (not including 3.10.0) or higher version, 3.10.14 is recommended. You need to install Python if you don't have it.
-2. This method is not recommended, manual deployment may not be supported in the future. Please consider using Docker deployment.
-:::
-
-## Installing the Main Program
-
-1. Go to the [Release](https://github.com/langbot-app/LangBot/releases) page to download the latest version of the zip package (recommended) `langbot-xxx-all.zip` (do not download Source Code as it does not include WebUI). Extract it and open a command line (terminal) in the extracted directory.
-
-
-
-2. Install dependencies
-
-We use [uv](https://docs.astral.sh/uv/) to manage dependencies.
-
-```bash
-pip install uv
-uv sync
-```
-
-3. Run the main program once to generate configuration files
-
-```bash
-uv run main.py
-```
-
-You will see the following message:
-
-```
- _ ___ _
-| | __ _ _ _ __ _| _ ) ___| |_
-| |__/ _` | ' \/ _` | _ \/ _ \ _|
-|____\__,_|_||_\__, |___/\___/\__|
- |___/
-
-⭐️Open Source: https://github.com/langbot-app/LangBot
-📖Documentation: https://docs.langbot.app
-
-The following files do not exist and have been automatically generated. Please modify the configuration files as needed and restart:
-- data/config.yaml
-...
-```
-
-You can now use Ctrl+C to exit the program and continue to the [Deploy Bots](/en/deploy/platforms/readme) page.
+---
+title: "Manual Deployment"
+---
+
+## Installing the Main Program
+
+1. Go to the [Release](https://github.com/langbot-app/LangBot/releases) page to download the latest version of the zip package (recommended) `langbot-xxx-all.zip` (do not download Source Code as it does not include WebUI). Extract it and open a command line (terminal) in the extracted directory.
+
+
+
+2. Install dependencies
+
+We use [uv](https://docs.astral.sh/uv/) to manage dependencies.
+
+```bash
+pip install uv
+uv sync
+```
+
+3. Run the main program once to generate configuration files
+
+```bash
+uv run main.py
+```
+
+You will see the following message:
+
+```
+ _ ___ _
+| | __ _ _ _ __ _| _ ) ___| |_
+| |__/ _` | ' \/ _` | _ \/ _ \ _|
+|____\__,_|_||_\__, |___/\___/\__|
+ |___/
+
+⭐️Open Source: https://github.com/langbot-app/LangBot
+📖Documentation: https://docs.langbot.app
+
+The following files do not exist and have been automatically generated. Please modify the configuration files as needed and restart:
+- data/config.yaml
+...
+```
+
+You can now use Ctrl+C to exit the program and continue to the [Deploy Bots](/en/deploy/platforms/readme) page.
\ No newline at end of file
diff --git a/docs/en/deploy/langbot/one-click/1panel.md b/en/deploy/langbot/one-click/1panel.mdx
similarity index 62%
rename from docs/en/deploy/langbot/one-click/1panel.md
rename to en/deploy/langbot/one-click/1panel.mdx
index 5d3603f88..e35953867 100644
--- a/docs/en/deploy/langbot/one-click/1panel.md
+++ b/en/deploy/langbot/one-click/1panel.mdx
@@ -1,19 +1,9 @@
-# 1Panel Deployment
+---
+title: "1Panel Deployment"
+---
Deploy LangBot with one click using [1Panel](https://www.bt.cn/new/download.html?r=dk_LangBot).
-:::warning
-
-Unless you plan to use messaging platforms that do not require additional containers (such as Discord or Lark), or you are familiar with the network connection between Docker containers on 1Panel, it is not recommended to use the one-click deployment of 1Panel. Please consider using [Docker Deployment](/en/deploy/langbot/docker) instead.
-
-:::
-
-:::info
-
-With [Alibaba Cloud](https://www.aliyun.com/minisite/goods?userCode=ys4ad8gs), you can get a server for as low as 38 yuan per year, and even enjoy a 20% discount. It is more convenient to install 1Panel with one click.
-
-:::
-
## Install 1Panel
> Recommended server systems (from 1Panel): Debian 12, Ubuntu 22, etc.
@@ -22,9 +12,7 @@ This article assumes that the server has a public IPv4 address by default. If yo
Visit [1Panel](https://www.bt.cn/new/download.html?r=dk_LangBot) and use the Linux panel installation script provided officially by 1Panel. Select the corresponding script according to your operating system.
-
-
-
+
Copy the corresponding script, paste it into the server, and execute it.
@@ -36,23 +24,17 @@ Then copy the `External Address` and open it in a browser.
Open the `App Store`, select the `AI` category, and click to install LangBot.
-
-
-
+
Check the box for `External Port Access` and click Confirm.
-
-
-
+
Wait for a moment, and the installation will be completed.
Click `Containers` on the left side, then select the `Containers` category, and you will see the LangBot container bar.
-
-
-
+
Copy the public IP address of the server, for example, `http://xxx.xxx.xxx.xxx:5300` (where xxx.xxx.xxx.xxx is the IP address of the server where 1Panel is located, and 5300 is the port number).
diff --git a/docs/en/deploy/langbot/one-click/bt.md b/en/deploy/langbot/one-click/bt.mdx
similarity index 73%
rename from docs/en/deploy/langbot/one-click/bt.md
rename to en/deploy/langbot/one-click/bt.mdx
index bc51a4a05..1d459092e 100644
--- a/docs/en/deploy/langbot/one-click/bt.md
+++ b/en/deploy/langbot/one-click/bt.mdx
@@ -1,53 +1,53 @@
-# aaPanel Deployment
-
-Deploy LangBot with one click using [aaPanel](https://www.bt.cn/new/download.html?r=dk_LangBot).
-
-:::warning
-- Unless you plan to use message platforms like Discord or Feishu that don't require additional containers, or you are familiar with Docker container networking on aaPanel, it's not recommended to use one-click deployment with aaPanel. Please consider using [Docker deployment](/en/deploy/langbot/docker).
-- If you already have aaPanel installed, please update to version **9.2.0** or higher
-:::
-
-
-## Installing aaPanel
-
-> Recommended server systems (from aaPanel): Debian 12, Ubuntu 22, etc.
->
-> This document assumes you have a server with a public IPv4 address. If you're using a home machine without a public IP, you can access the relevant pages through the internal network mentioned below.
-
-Open [aaPanel](https://www.bt.cn/new/download.html?r=dk_LangBot), use the Linux panel installation script provided by aaPanel official, and select the corresponding script based on your system.
-
-
-
-Copy the corresponding script and paste it into your server to execute.
-
-## Installing LangBot
-
-After waiting for a while, aaPanel installation will be complete.
-
-You'll see a message similar to this, copy the external panel address and open it in your browser.
-
-
-
-When you first open it, you should see a popup for `Recommended Installation Suite`. You can skip this by closing it.
-
-Then click on `docker` in the sidebar. If it's your first time, you'll be prompted to install Docker and Docker Compose services. Click "Install Now" if prompted, or ignore if already installed.
-
-Then go to `Docker -> App Store`, search for `LangBot` (note the case sensitivity), click `Install`, and use the default configuration.
-
-After a short wait, you'll see a container named `langbot_XXXX` showing as `Running`.
-
-
-
-Click the red circle in the image above to view the running logs.
-
-
-
-You can see the external and internal access paths for the WebUI configuration page (visual configuration page). Copy the public address, for example `http://xxx.xxx.xxx.xxx:5300` (where xxx.xxx.xxx.xxx is your aaPanel IP, and 5300 is the port number, which may vary as shown in the image).
-
-After opening it, enter your admin email and password, then click initialize.
-
-You can then proceed with configuration in the visual interface.
-
-If you prefer to directly modify JSON configuration files, you can look at the local mapping directory shown in the image above. Go to the installation directory, where the `data` folder is used to store configuration files, and the `plugins` folder is used for plugin-related files.
-
-Next, please continue reading the [Deploy Message Platform](/en/deploy/platforms/readme) page.
+---
+title: "aaPanel Deployment"
+---
+
+Deploy LangBot with one click using [aaPanel](https://www.bt.cn/new/download.html?r=dk_LangBot).
+
+
+ If you already have aaPanel installed, please update to version **9.2.0** or higher
+
+
+## Installing aaPanel
+
+> Recommended server systems (from aaPanel): Debian 12, Ubuntu 22, etc.
+>
+> This document assumes you have a server with a public IPv4 address. If you're using a home machine without a public IP, you can access the relevant pages through the internal network mentioned below.
+
+Open [aaPanel](https://www.bt.cn/new/download.html?r=dk_LangBot), use the Linux panel installation script provided by aaPanel official, and select the corresponding script based on your system.
+
+
+
+Copy the corresponding script and paste it into your server to execute.
+
+## Installing LangBot
+
+After waiting for a while, aaPanel installation will be complete.
+
+You'll see a message similar to this, copy the external panel address and open it in your browser.
+
+
+
+When you first open it, you should see a popup for `Recommended Installation Suite`. You can skip this by closing it.
+
+Then click on `docker` in the sidebar. If it's your first time, you'll be prompted to install Docker and Docker Compose services. Click "Install Now" if prompted, or ignore if already installed.
+
+Then go to `Docker -> App Store`, search for `LangBot` (note the case sensitivity), click `Install`, and use the default configuration.
+
+After a short wait, you'll see a container named `langbot_XXXX` showing as `Running`.
+
+
+
+Click the red circle in the image above to view the running logs.
+
+
+
+You can see the external and internal access paths for the WebUI configuration page (visual configuration page). Copy the public address, for example `http://xxx.xxx.xxx.xxx:5300` (where xxx.xxx.xxx.xxx is your aaPanel IP, and 5300 is the port number, which may vary as shown in the image).
+
+After opening it, enter your admin email and password, then click initialize.
+
+You can then proceed with configuration in the visual interface.
+
+If you prefer to directly modify JSON configuration files, you can look at the local mapping directory shown in the image above. Go to the installation directory, where the `data` folder is used to store configuration files, and the `plugins` folder is used for plugin-related files.
+
+Next, please continue reading the [Deploy Message Platform](/en/deploy/platforms/readme) page.
\ No newline at end of file
diff --git a/docs/en/deploy/langbot/package.md b/en/deploy/langbot/package.mdx
similarity index 79%
rename from docs/en/deploy/langbot/package.md
rename to en/deploy/langbot/package.mdx
index d660a2b9d..c9faa42e9 100644
--- a/docs/en/deploy/langbot/package.md
+++ b/en/deploy/langbot/package.mdx
@@ -1,8 +1,10 @@
-# Deploy with Package Manager
+---
+title: "Deploy with Package Manager"
+---
-:::info
+
Supports Windows, Linux, Mac OS, etc. Recommended for testing environments and personal use scenarios; production-level environments please use [Docker Deployment](/en/deploy/langbot/docker.html).
-:::
+
LangBot is packaged and released to PyPI. Please install [uv](https://docs.astral.sh/uv/getting-started/installation/), and then run the following command in an empty directory:
@@ -10,4 +12,4 @@ LangBot is packaged and released to PyPI. Please install [uv](https://docs.astra
uvx langbot@latest
```
-This will set the current directory as the working directory, and you can access `http://localhost:5300` to start using it.
\ No newline at end of file
+This will set the current directory as the working directory, and you can access `http://localhost:5300` to start using it.
diff --git a/docs/en/deploy/settings.md b/en/deploy/settings.mdx
similarity index 73%
rename from docs/en/deploy/settings.md
rename to en/deploy/settings.mdx
index de10ac712..9334ba27b 100644
--- a/docs/en/deploy/settings.md
+++ b/en/deploy/settings.mdx
@@ -1,4 +1,6 @@
-# System Environment Settings
+---
+title: "System Environment Settings"
+---
Configure some environment information for system operation, located in the `data/config.yaml` file.
Generally, no modification is needed.
@@ -16,6 +18,10 @@ admins: []
# API port
api:
port: 5300
+ # LangBot centrally manages all bot addresses that require Webhook listening
+ # This is the Webhook address prefix displayed on the bot page that requires Webhook connection
+ # You can modify it according to your network environment
+ webhook_prefix: 'http://127.0.0.1:5300'
# Command configuration
command:
@@ -99,6 +105,10 @@ system:
expire: 604800
# JWT secret key, a key will be automatically generated on first startup
secret: 'xxxx'
+ # Whether to allow changing the password
+ allow_change_password: true
+ # Recovery password key
+ recovery_key: 'xxxx'
# Vector database configuration
vdb:
@@ -106,6 +116,9 @@ vdb:
# Supported vector databases:
# - chroma (default, embedded vector database)
# - qdrant (external vector database, please configure below)
+ # - milvus (scalable vector database, please configure below)
+ # - pgvector (PostgreSQL extension, please configure below)
+ # - seekdb (Built-in embedded-model database, please configure below)
use: chroma
# Qdrant configuration
qdrant:
@@ -117,6 +130,30 @@ vdb:
port: 6333
# Qdrant API Key
api_key: ''
+ # Milvus configuration
+ milvus:
+ uri: 'http://127.0.0.1:19530'
+ token: ''
+ # pgvector configuration
+ pgvector:
+ host: '127.0.0.1'
+ port: 5433
+ database: 'langbot'
+ user: 'postgres'
+ password: 'postgres'
+ seekdb:
+ # 'embedded' or 'server'
+ mode: embedded
+ # Embedded mode options:
+ path: './data/seekdb'
+ database: 'langbot'
+ # Server mode options (used when mode='server'):
+ host: 'localhost'
+ port: 2881
+ user: 'root'
+ password: ''
+ # Optional, for OceanBase server
+ tenant: ''
```
## Set configuration via environment variables
@@ -132,4 +169,4 @@ The configuration in `config.yaml` can be set via environment variables. The env
...
-When starting, LangBot will read all environment variables and apply the corresponding configuration to `config.yaml` and write to the `data/config.yaml` file.
\ No newline at end of file
+When starting, LangBot will read all environment variables and apply the corresponding configuration to `config.yaml` and write to the `data/config.yaml` file.
diff --git a/docs/en/deploy/update.md b/en/deploy/update.mdx
similarity index 95%
rename from docs/en/deploy/update.md
rename to en/deploy/update.mdx
index fe40e1ea4..36a41880f 100644
--- a/docs/en/deploy/update.md
+++ b/en/deploy/update.mdx
@@ -1,4 +1,6 @@
-# Update LangBot
+---
+title: "Update LangBot"
+---
## Using Package Manager
@@ -26,9 +28,9 @@ docker compose up --force-recreate --pull always -d
This command will pull the latest LangBot image and rebuild the container.
-:::info
+
4.3.0 version changed the content and location of the `docker-compose.yaml` file, if you updated from a previous version, please [redploy according to the documentation](/en/deploy/langbot/docker).
-:::
+
## Manual Deployment
diff --git a/en/develop/comp-arch.mdx b/en/develop/comp-arch.mdx
new file mode 100644
index 000000000..ae94779a8
--- /dev/null
+++ b/en/develop/comp-arch.mdx
@@ -0,0 +1,5 @@
+---
+title: "Component Architecture"
+---
+
+
diff --git a/docs/en/develop/dev-config.md b/en/develop/dev-config.mdx
similarity index 73%
rename from docs/en/develop/dev-config.md
rename to en/develop/dev-config.mdx
index 5c37d6937..4b9ce3547 100644
--- a/docs/en/develop/dev-config.md
+++ b/en/develop/dev-config.mdx
@@ -1,4 +1,6 @@
-# Development Configuration
+---
+title: "Development Configuration"
+---
LangBot is divided into frontend and backend. The frontend is developed using Next.js + shadcn, and the backend is developed using Quart (an asynchronous version of Flask).
@@ -52,11 +54,18 @@ npm run dev
Then according to the output information, visit `http://127.0.0.1:3000` to view the standalone frontend page.
-:::info
-When using `pnpm dev` to start locally, the environment variable `NEXT_PUBLIC_API_BASE_URL` will be automatically used by the frontend to ensure that the frontend can access the `5300` port of the locally running backend.
+
In production environments, the frontend will be precompiled into static files and provided by the backend, and the frontend will automatically access the backend address on the same domain.
-:::
+
+
+## Code Formatting
+
+The repository contains lint and format check workflows, and your code will be automatically checked when you push it. Please configure pre-commit to check your code locally before submitting.
+
+```bash
+uv run pre-commit install
+```
## API Documentation
diff --git a/docs/en/develop/plugin-runtime.md b/en/develop/plugin-runtime.mdx
similarity index 91%
rename from docs/en/develop/plugin-runtime.md
rename to en/develop/plugin-runtime.mdx
index a7cad71bc..bef150759 100644
--- a/docs/en/develop/plugin-runtime.md
+++ b/en/develop/plugin-runtime.mdx
@@ -1,10 +1,10 @@
-# Debugging Plugin Runtime, CLI, SDK
+---
+title: "Debugging Plugin Runtime, CLI, SDK"
+---
-::: info
-Please read the [Plugin Tutorial](/en/plugin/plugin-intro) first to understand the plugin system.
-
-- Plugin Runtime, CLI, SDK are open sourced at: https://github.com/langbot-app/langbot-plugin-sdk
-:::
+
+ Plugin Runtime, CLI, SDK are open sourced at: https://github.com/langbot-app/langbot-plugin-sdk
+
Clone the plugin runtime source code:
@@ -52,7 +52,7 @@ plugin:
runtime_ws_url: ws://localhost:5400/control/ws
```
-And add the startup parameter `--standalone-runtime` when starting the LangBot main program (e.g., `uv run main.py --standalone-runtime`).
+And add the startup parameter `--standalone-runtime` when starting the LangBot main program (e.g., `uv run main.py --standalone-runtime`).\
Restart LangBot, and it will connect to this runtime using WebSocket.
## langbot-plugin-sdk Architecture
diff --git a/docs/en/insight/community.md b/en/insight/community.mdx
similarity index 88%
rename from docs/en/insight/community.md
rename to en/insight/community.mdx
index eecdf60a7..ee86eae20 100644
--- a/docs/en/insight/community.md
+++ b/en/insight/community.mdx
@@ -1,4 +1,6 @@
-# Community Resources
+---
+title: "Community Resources"
+---
## Simplified Tutorials
@@ -8,4 +10,4 @@ Collected at: https://blog.thelazy.top/tags/langbot
## 🥰 Community
-Join our community on Discord: [](https://discord.gg/wdNEHETs87)
\ No newline at end of file
+Join our community on Discord: [](https://discord.gg/wdNEHETs87)
diff --git a/docs/en/insight/features.md b/en/insight/features.mdx
similarity index 56%
rename from docs/en/insight/features.md
rename to en/insight/features.mdx
index 0695d5dc0..1dcc0a4d1 100644
--- a/docs/en/insight/features.md
+++ b/en/insight/features.mdx
@@ -1,4 +1,6 @@
-# Features
+---
+title: "Features"
+---
LangBot is an open-source LLM native instant messaging robot development platform, aiming to provide an out-of-the-box IM robot development experience, with Agent, RAG, MCP and other LLM application functions, supporting global instant messaging platforms, and providing rich API interfaces, supporting custom development.
@@ -6,21 +8,25 @@ LangBot is an open-source LLM native instant messaging robot development platfor
| Platform | Status | Remarks |
| --- | --- | --- |
-| Personal QQ | ✅ | |
-| QQ Official API | ✅ | |
+| Personal QQ | ✅ | Supported by third-party applications that implement the OneBot11 protocol, supports QQ personal private and group chats |
+| QQ Official Bot | ✅ | QQ Official Bot, supports channels, private chats, and group chats |
| WeCom | ✅ | |
-| WeComCS | ✅ | |
-| WeComIntelligentBot | ✅ | Support streaming output |
+| WeCom Intelligent Bot | ✅ | Support streaming output |
+| WeCom Customer Service | ✅ | |
+| WeChat Official Account | ✅ | |
| Lark | ✅ | Support streaming output |
| DingTalk | ✅ | Support streaming output |
| Discord | ✅ | |
| Telegram | ✅ | Support streaming output |
| Slack | ✅ | |
| LINE | ✅ | |
+| KOOK | ✅ | |
| WhatsApp | 🚧 | |
🚧: In development
+For platform-specific feature support, please check [this document](/en/insight/platform-features).
+
## Model and LLMOps Platform Support
| Provider/Service | Status | Remarks |
@@ -31,22 +37,23 @@ LangBot is an open-source LLM native instant messaging robot development platfor
| [Anthropic](https://www.anthropic.com/) | ✅ | |
| [xAI](https://x.ai/) | ✅ | |
| [Zhipu AI](https://open.bigmodel.cn/) | ✅ | |
+| [ShengSuanYun](https://www.shengsuanyun.com/?from=CH_KYIPP758) | ✅ | Global LLM aggregation platform (Recommended) |
| [CompShare](https://www.compshare.cn/?ytag=GPU_YY-gh_langbot) | ✅ | LLM and GPU resource platform |
+| [PPIO](https://ppio.com/user/register?invited_by=QJKFYD&utm_source=github_langbot) | ✅ | LLM and GPU resource platform |
+| [302.AI](https://share.302.ai/SuTG99) | ✅ | LLM gateway (MaaS) |
+| [Google Gemini](https://aistudio.google.com/prompts/new_chat) | ✅ | |
| [Dify](https://dify.ai) | ✅ | LLMOps platform |
| [n8n](https://n8n.io/) | ✅ | LLMOps platform |
| [Langflow](https://langflow.org/) | ✅ | LLMOps platform |
-| [PPIO](https://ppio.com/user/register?invited_by=QJKFYD&utm_source=github_langbot) | ✅ | LLM and GPU resource platform |
-| [ShengSuanYun](https://www.shengsuanyun.com/login?code=7DS2QLH5) | ✅ | LLM and GPU resource platform |
-| [302.AI](https://share.302.ai/SuTG99) | ✅ | LLM gateway(MaaS) |
-| [Google Gemini](https://aistudio.google.com/prompts/new_chat) | ✅ | |
| [Ollama](https://ollama.com/) | ✅ | Local LLM running platform |
| [LMStudio](https://lmstudio.ai/) | ✅ | Local LLM running platform |
-| [GiteeAI](https://ai.gitee.com/) | ✅ | LLM interface gateway(MaaS) |
-| [SiliconFlow](https://siliconflow.cn/) | ✅ | LLM gateway(MaaS) |
-| [Aliyun Bailian](https://bailian.console.aliyun.com/) | ✅ | LLM gateway(MaaS), LLMOps platform |
-| [Volc Engine Ark](https://console.volcengine.com/ark/region:ark+cn-beijing/model?vendor=Bytedance&view=LIST_VIEW) | ✅ | LLM gateway(MaaS), LLMOps platform |
-| [ModelScope](https://modelscope.cn/docs/model-service/API-Inference/intro) | ✅ | LLM gateway(MaaS) |
-| [Coze](https://coze.com) | ✅ | LLMOps platform |
+| [GiteeAI](https://ai.gitee.com/) | ✅ | LLM interface gateway (MaaS) |
+| [SiliconFlow](https://siliconflow.cn/) | ✅ | LLM gateway (MaaS) |
+| [Aliyun Bailian](https://bailian.console.aliyun.com/) | ✅ | LLM gateway (MaaS), LLMOps platform |
+| [Volc Engine Ark](https://console.volcengine.com/ark/region:ark+cn-beijing/model?vendor=Bytedance&view=LIST_VIEW) | ✅ | LLM gateway (MaaS), LLMOps platform |
+| [ModelScope](https://modelscope.cn/docs/model-service/API-Inference/intro) | ✅ | LLM gateway (MaaS) |
+| [TBox (Ant TreasureBox)](https://tbox.cn/) | ✅ | LLMOps platform |
+| [Coze](https://coze.cn) | ✅ | LLMOps platform |
## LLM Application Paradigm Implementation
@@ -56,16 +63,22 @@ LangBot is an open-source LLM native instant messaging robot development platfor
| RAG | ✅ | Using Chroma as vector database |
| MCP | ✅ | Support Stdio and HTTP protocol |
+## System Extensibility
+
+- HTTP Service API: Supports accessing various entities of LangBot through HTTP API interfaces with API key authentication.
+- Outgoing Webhook: Supports sending internal events of LangBot to external systems through Webhook.
+- Production-grade plugin system: A production-grade plugin system based on cross-process communication technology and asynchronous technology, supporting various component extensions.
+
## Case Screenshots
-
+
-
+
-
+
-
+
-
+
-
\ No newline at end of file
+
diff --git a/docs/en/insight/guide.md b/en/insight/guide.mdx
similarity index 96%
rename from docs/en/insight/guide.md
rename to en/insight/guide.mdx
index e58b15e6b..1b934ab8c 100644
--- a/docs/en/insight/guide.md
+++ b/en/insight/guide.mdx
@@ -1,4 +1,6 @@
-# Welcome to LangBot Documentation
+---
+title: "Welcome to LangBot Documentation"
+---
LangBot is an open-source Large Language Model (LLM) native instant messaging bot platform that supports multiple messaging platforms and model providers. It provides support for LLMOps platforms such as Dify. It also offers a WebUI for users to quickly deploy and use.
@@ -34,6 +36,6 @@ Check [Configure Bots](/en/deploy/platforms/readme) in the left sidebar
Check [Configure Dialogue Models](/en/deploy/models/readme) in the left sidebar
-
+
After completing the above two steps, you can start using LangBot. If you need to configure more features, you can set them in the [Pipeline](/en/deploy/pipelines/readme) section
diff --git a/en/insight/platform-features.mdx b/en/insight/platform-features.mdx
new file mode 100644
index 000000000..a0c9ca95a
--- /dev/null
+++ b/en/insight/platform-features.mdx
@@ -0,0 +1,231 @@
+---
+title: "Platform Feature Support"
+---
+
+The following is a list of features we have implemented and tested for each platform. If you encounter unexpected behavior, please feel free to report it to [GitHub Issues](https://github.com/langbot-app/LangBot/issues) or directly submit a Pull Request to help fix it.
+
+## OneBot v11
+
+### Receive
+
+| Feature | Status | Remarks |
+| --- | --- | --- |
+| Receive private messages | ✅ | |
+| Receive group mention messages | ✅ | |
+| Receive group regular messages | ✅ | |
+| Receive image messages | ✅ | |
+| Receive voice messages | ✅ | |
+| Receive file messages | ✅ | |
+| Receive rich text messages | ✅ | Text and image combined |
+| Get private message event user name | ✅ | |
+| Get group message event group name | ✅ | |
+| Get group message event sender name | ✅ | |
+
+### Send
+
+| Feature | Status | Remarks |
+| --- | --- | --- |
+| Reply to private messages | ✅ | |
+| Reply to group messages | ✅ | |
+| Reply with image messages | ✅ | |
+| Reply with voice messages | ✅ | |
+| Reply with file messages | ✅ | |
+| Reply with rich text messages | ✅ | Text and image combined |
+| Send proactive messages | ✅ | |
+| Send streaming response | ❌ | |
+
+## QQ Official Bot
+
+## WeCom (Internal Application)
+
+### Receive
+
+| Feature | Status | Remarks |
+| --- | --- | --- |
+| Receive private messages | ✅ | |
+| Receive group mention messages | ❌ | WeCom internal application does not support adding to groups |
+| Receive group regular messages | ❌ | |
+| Receive image messages | ✅ | |
+| Receive voice messages | ✅ | |
+| Receive file messages | ✅ | |
+| Receive rich text messages | ❌ | |
+| Get private message event user name | ✅ | |
+| Get group message event group name | ❌ | |
+| Get group message event sender name | ❌ | |
+
+### Send
+
+| Feature | Status | Remarks |
+| --- | --- | --- |
+| Reply to private messages | ✅ | |
+| Reply to group messages | ❌ | |
+| Reply with image messages | ✅ | |
+| Reply with voice messages | ✅ | |
+| Reply with file messages | ✅ | |
+| Reply with rich text messages | ❌ | |
+| Send proactive messages | ✅ | |
+| Send streaming response | ❌ | |
+
+## WeCom (Customer Service)
+
+## WeCom Intelligent Bot
+
+## WeChat Official Account
+
+## Lark
+
+### Receive
+
+| Feature | Status | Remarks |
+| --- | --- | --- |
+| Receive private messages | ✅ | |
+| Receive group mention messages | ✅ | |
+| Receive group regular messages | ❌ | Lark only supports receiving messages that mention the bot |
+| Receive image messages | ✅ | |
+| Receive voice messages | ❌ | Lark does not have voice messages |
+| Receive file messages | ✅ | |
+| Receive rich text messages | ✅ | Text and image combined |
+| Get private message event user name | ❌ | Lark does not support getting user name |
+| Get group message event group name | ❌ | Lark does not support getting group name |
+| Get group message event sender name | ❌ | Lark does not support getting sender name |
+
+### Send
+
+| Feature | Status | Remarks |
+| --- | --- | --- |
+| Reply to private messages | ✅ | |
+| Reply to group messages | ✅ | |
+| Reply with image messages | ✅ | |
+| Reply with voice messages | ❌ | |
+| Reply with file messages | ❌ | |
+| Reply with rich text messages | ❌ | |
+| Send proactive messages | ✅ | |
+| Send streaming response | ✅ | |
+
+## DingTalk
+
+### Receive
+
+| Feature | Status | Remarks |
+| --- | --- | --- |
+| Receive private messages | ✅ | |
+| Receive group mention messages | ✅ | |
+| Receive group regular messages | ❌ | DingTalk only supports receiving messages that mention the bot |
+| Receive image messages | ✅ | |
+| Receive voice messages | ✅ | |
+| Receive file messages | ✅ | |
+| Receive rich text messages | ✅ | Text and image combined |
+| Get private message event user name | ✅ | |
+| Get group message event group name | ✅ | |
+| Get group message event sender name | ✅ | |
+
+### Send
+
+| Feature | Status | Remarks |
+| --- | --- | --- |
+| Reply to private messages | ✅ | |
+| Reply to group messages | ✅ | |
+| Reply with image messages | ✅ | |
+| Reply with voice messages | ❌ | |
+| Reply with file messages | ❌ | |
+| Reply with rich text messages | ✅ | Text and image combined |
+| Send proactive messages | ✅ | |
+| Send streaming response | ✅ | |
+
+## KOOK
+
+P.S. Sending voice and file messages has errors not fixed yet
+
+### Receive
+
+| Feature | Status | Remarks |
+| --- | --- | --- |
+| Receive private messages | ✅ | |
+| Receive group mention messages | ✅ | |
+| Receive group regular messages | ✅ | |
+| Receive image messages | ✅ | |
+| Receive voice messages | ✅ | |
+| Receive file messages | ✅ | |
+| Receive rich text messages | ✅ | Text and image combined |
+| Get private message event user name | ✅ | |
+| Get group message event group name | ✅ | |
+| Get group message event sender name | ✅ | |
+
+### Send
+
+| Feature | Status | Remarks |
+| --- | --- | --- |
+| Reply to private messages | ✅ | |
+| Reply to group messages | ✅ | |
+| Reply with image messages | ✅ | |
+| Reply with voice messages | ❌ | KOOK does not support replying with voice messages |
+| Reply with file messages | ❌ | |
+| Reply with rich text messages | ✅ | Text and image combined |
+| Send proactive messages | ✅ | |
+| Send streaming response | ❌ | |
+
+## Discord
+
+### Receive
+
+| Feature | Status | Remarks |
+| --- | --- | --- |
+| Receive private messages | ✅ | |
+| Receive group mention messages | ✅ | |
+| Receive group regular messages | ✅ | |
+| Receive image messages | ✅ | |
+| Receive voice messages | ❌ | |
+| Receive file messages | ✅ | |
+| Receive rich text messages | ✅ | Text and image combined |
+| Get private message event user name | ✅ | |
+| Get group message event group name | ✅ | |
+| Get group message event sender name | ✅ | |
+
+### Send
+
+| Feature | Status | Remarks |
+| --- | --- | --- |
+| Reply to private messages | ✅ | |
+| Reply to group messages | ✅ | |
+| Reply with image messages | ✅ | Sent as file attachment |
+| Reply with voice messages | ✅ | Sent as file attachment |
+| Reply with file messages | ✅ | |
+| Reply with rich text messages | ✅ | Text and file combined |
+| Send proactive messages | ✅ | |
+| Send streaming response | ❌ | |
+
+## Telegram
+
+P.S. Not tested
+
+### Receive
+
+| Feature | Status | Remarks |
+| --- | --- | --- |
+| Receive private messages | ✅ | |
+| Receive group mention messages | ✅ | |
+| Receive group regular messages | ✅ | |
+| Receive image messages | ✅ | |
+| Receive voice messages | ❌ | |
+| Receive file messages | ✅ | |
+| Receive rich text messages | ✅ | |
+| Get private message event user name | ✅ | |
+| Get group message event group name | ✅ | |
+| Get group message event sender name | ✅ | |
+
+### Send
+
+| Feature | Status | Remarks |
+| --- | --- | --- |
+| Reply to private messages | ✅ | |
+| Reply to group messages | ✅ | |
+| Reply with image messages | ✅ | |
+| Reply with voice messages | ✅ | |
+| Reply with file messages | ✅ | |
+| Reply with rich text messages | ✅ | |
+| Send proactive messages | ✅ | |
+| Send streaming response | ❌ | |
+
+## Slack
+
+## LINE
diff --git a/docs/en/plugin/compatibility.md b/en/plugin/compatibility.mdx
similarity index 95%
rename from docs/en/plugin/compatibility.md
rename to en/plugin/compatibility.mdx
index be7bde856..b7a73058a 100644
--- a/docs/en/plugin/compatibility.md
+++ b/en/plugin/compatibility.mdx
@@ -1,4 +1,6 @@
-# System Compatibility
+---
+title: "System Compatibility"
+---
LangBot's plugin system utilizes mechanisms such as `Asyncio` and `Subprocess`, which work well on Unix-like systems (such as Linux, macOS), but have some issues on Windows, preventing plugins from running properly.
@@ -12,4 +14,4 @@ For detailed information about these issues, please refer to: [Python Official D
Unlike the tight coupling between subprocess management and Stdio communication on Unix-like systems, LangBot and the Plugin Runtime automatically switch to a hybrid subprocess + WebSocket communication strategy on Windows. LangBot still launches the Plugin Runtime via a subprocess, but communicates with it over WebSocket; similarly, the Plugin Runtime starts each installed plugin via subprocesses while communicating with them through WebSocket.
-This behavior is automatically selected based on the OS, so no manual configuration is required.
\ No newline at end of file
+This behavior is automatically selected based on the OS, so no manual configuration is required.
diff --git a/docs/en/plugin/dev/apis/common.md b/en/plugin/dev/apis/common.mdx
similarity index 97%
rename from docs/en/plugin/dev/apis/common.md
rename to en/plugin/dev/apis/common.mdx
index 68eb2622a..f820d7c08 100644
--- a/docs/en/plugin/dev/apis/common.md
+++ b/en/plugin/dev/apis/common.mdx
@@ -1,11 +1,9 @@
-# Plugin Common APIs
+---
+title: "Plugin Common APIs"
+---
LangBot provides a series of APIs for plugins to operate various LangBot modules and control message contexts.
-:::info Table of Contents
-[[toc]]
-:::
-
## Request API
Operations for the currently processing user request (message). Only available in `EventListener` and `Command` components. Access methods:
@@ -309,4 +307,4 @@ async def get_config_file(self, file_key: str) -> bytes:
file_bytes = await self.plugin.get_config_file("key")
```
-Use this in conjunction with configuration fields of type [`file` or `array[file`](/en/plugin/dev/basic-info.html#type-file).
+Use this in conjunction with configuration fields of type [``file or array[file``](/en/plugin/dev/basic-info.html#type-file).
\ No newline at end of file
diff --git a/en/plugin/dev/apis/messages.mdx b/en/plugin/dev/apis/messages.mdx
new file mode 100644
index 000000000..eadf571c6
--- /dev/null
+++ b/en/plugin/dev/apis/messages.mdx
@@ -0,0 +1,91 @@
+---
+title: "Message Platform Entities"
+---
+
+LangBot supports multiple messaging platforms, and each platform has different `message entity` formats. To abstract away these differences, we have implemented a unified standard. Plugin developers only need to master and use the message entities described on this page in plugins, and LangBot's internal message processing logic can automatically handle message parsing and conversion.
+
+## Message Chain
+
+`Messages` on messaging platforms are different from messages used for AI interaction. Messages on messaging platforms are described in the form of `message chains`. Each independent message displayed on QQ is a message chain, which can contain various `message chain components` such as `text`, `images`, `@mentions`, etc. For example:
+
+
+
+This is a message chain containing one Plain component (Hello World) and one Image component (Usagi).
+
+The definitions of message chains and message chain components are located in `langbot_plugin.api.entities.builtin.platform.message`.
+
+### Constructing Message Chains
+
+Please first import the `langbot_plugin.api.entities.builtin.platform.message` package to use the message components within it.
+
+```python
+from langbot_plugin.api.entities.builtin.platform.message import *
+
+# Build a message containing text "Hello LangBot" and an image (from URL)
+msg_chain = MessageChain([
+ Plain(text="Hello LangBot"),
+ Image(url='https://qchatgpt.rockchin.top/langbot-logo.png')
+])
+
+# Build a message containing @everyone and text "Hello LangBot"
+msg_chain = MessageChain([
+ AtAll(),
+ Plain(text="Hello LangBot")
+])
+
+# Build a message containing @specific member and text "Hello LangBot"
+msg_chain = MessageChain([
+ At(target=123456),
+ Plain(text="Hello LangBot")
+])
+```
+
+Currently supported message chain components:
+
+- `Source` - Source message chain information. Messages received from messaging platforms will include this component at the front of the message chain to record message information
+- `Plain` - Plain text message
+- `Quote` - Quote message
+- `Image` - Image message
+- `AtAll` - @everyone message
+- `At` - @specific member message
+- `Voice` - Voice message
+ - Need to check messaging platform support
+- `Forward` - Forward message
+ - Not supported on many platforms, not recommended
+- `File` - File message
+
+When creating components, named parameters must be used. For specific usage, you can check the definitions in the source code `langbot_plugin.api.entities.builtin.platform.message`.
+
+## Other Entities
+
+In addition to the above entities, there are also entities like `Friend` and `Group`. These entities are defined in `langbot_plugin.api.entities.platform.entities`.
+
+## Accessing Underlying Platform APIs
+
+
+ Not applicable for 4.x.
+
+
+To abstract away platform differences, LangBot provides an abstraction layer above messaging platform APIs, which includes the content described above and various platform adapters in the `pkg/platform/sources` directory. However, due to significant platform differences, the entity and API encapsulation in the abstraction layer is not complete. If your plugin needs to access platform-specific functionality, you can access underlying APIs according to the following instructions.
+
+
+ ```python
+ # For example in a plugin
+ @handler(GroupMessageReceived)
+ async def _(self, ctx: EventContext):
+ # Get adapter object
+ adapter = ctx.query.adapter
+ ```
+
+
+| Platform | Adapter | Access Method | Description |
+| ------------------------- | --------------- | ------------------ | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
+| OneBot v11 | aiocqhttp | adapter.bot | bot object corresponds to [aiocqhttp](https://github.com/nonebot/aiocqhttp) CQHttp object, please refer to aiocqhttp documentation for detailed usage |
+| QQ Official API | qqofficial | adapter.bot | bot object is the SDK object under libs/qq_official_api, for detailed usage please refer to the `send_group_text_msg` method in `QQOfficialClient` in libs/qq_official_api/api.py for HTTP request methods, please refer to QQ Official API documentation for specific interface documentation |
+| WeCom (Enterprise WeChat) | wecom | adapter.bot | Refer to the `send_image` method in `WecomClient` in libs/wecom_api/api.py for HTTP request methods, please refer to WeCom API documentation for specific interface documentation |
+| WeChat Official Account | officialaccount | - | Please refer to WeChat Official Account API documentation for interface documentation, credential information can be obtained from adapter.bot |
+| Lark | lark | adapter.api_client | Lark SDK's API Client object, please refer to [oapi-sdk-python](https://github.com/larksuite/oapi-sdk-python) for details |
+| DingTalk | dingtalk | - | Please refer to DingTalk API documentation, credential information can be obtained from adapter.bot |
+| Discord | discord | adapter.bot | bot object is [Rapptz/discord.py](https://github.com/Rapptz/discord.py) Discord object, please refer to documentation for detailed usage |
+| Telegram | telegram | adapter.bot | bot object is [python-telegram-bot](https://github.com/python-telegram-bot/python-telegram-bot) Telegram object, please refer to documentation for detailed usage |
+| Slack | slack | adapter.bot | bot object in libs/slack_api/api.py, please refer to its code and Slack SDK for detailed usage |
\ No newline at end of file
diff --git a/docs/en/plugin/dev/apis/pipeline-events.md b/en/plugin/dev/apis/pipeline-events.mdx
similarity index 74%
rename from docs/en/plugin/dev/apis/pipeline-events.md
rename to en/plugin/dev/apis/pipeline-events.mdx
index 1b5df2237..ceaf5942c 100644
--- a/docs/en/plugin/dev/apis/pipeline-events.md
+++ b/en/plugin/dev/apis/pipeline-events.mdx
@@ -1,8 +1,6 @@
-# Pipeline Events and APIs
-
-:::info Table of Contents
-[[toc]]
-:::
+---
+title: "Pipeline Events and APIs"
+---
LangBot plugins can register and handle pipeline events. For usage instructions, see [Component: Event Listener](/en/plugin/dev/components/event-listener).
@@ -10,7 +8,7 @@ LangBot plugins can register and handle pipeline events. For usage instructions,
Some events have `settable attributes`, which can be modified by plugin code and used in subsequent LangBot processing.
-### *MessageReceived
+### \*MessageReceived
Triggered when any message is received in group chat or private chat.
@@ -27,12 +25,16 @@ class PersonMessageReceived(BaseEventModel):
"""Sender ID"""
sender_id: typing.Union[int, str]
- """Sender ID"""
+ """Sender ID, same as launcher_id in private chat"""
+
+ message_event: platform_events.PersonMessage
+ """Original message event object. Contains sender information."""
message_chain: platform_message.MessageChain = pydantic.Field(
serialization_alias="message_chain"
)
- """Raw message chain"""
+ """Message chain"""
+
class GroupMessageReceived(BaseEventModel):
"""When any group chat message is received"""
@@ -48,13 +50,16 @@ class GroupMessageReceived(BaseEventModel):
sender_id: typing.Union[int, str]
"""Sender ID"""
+ message_event: platform_events.GroupMessage
+ """Original message event object. Contains group and sender information."""
+
message_chain: platform_message.MessageChain = pydantic.Field(
serialization_alias="message_chain"
)
- """Raw message chain"""
+ """Message chain"""
```
-### *NormalMessageReceived
+### \*NormalMessageReceived
Triggered when a group chat or private chat message is received and determined to be a message that needs to be processed by LLM (non-command message).
@@ -65,18 +70,24 @@ class PersonNormalMessageReceived(BaseEventModel):
event_name: str = "PersonNormalMessageReceived"
launcher_type: str
+ """Launcher object type (person)"""
launcher_id: typing.Union[int, str]
+ """Launcher object ID"""
sender_id: typing.Union[int, str]
+ """Sender ID, same as launcher_id in private chat"""
text_message: str
"""Message text"""
+ message_event: platform_events.PersonMessage
+ """Original message event object. Contains sender information."""
+
message_chain: platform_message.MessageChain = pydantic.Field(
serialization_alias="message_chain"
)
- """Raw message chain"""
+ """Message chain"""
# ========== Settable Attributes ==========
@@ -84,7 +95,8 @@ class PersonNormalMessageReceived(BaseEventModel):
"""Modified message text, langbot_plugin.api.entities.builtin.provider.message.ContentElement type"""
reply_message_chain: typing.Optional[platform_message.MessageChain] = None
- """Reply message component list, only effective when preventing default behavior"""
+ """Direct reply message chain, only effective when preventing default behavior"""
+
class GroupNormalMessageReceived(BaseEventModel):
"""Triggered when a group chat normal message that should be processed is determined"""
@@ -92,18 +104,24 @@ class GroupNormalMessageReceived(BaseEventModel):
event_name: str = "GroupNormalMessageReceived"
launcher_type: str
+ """Launcher object type (group)"""
launcher_id: typing.Union[int, str]
+ """Group ID"""
sender_id: typing.Union[int, str]
+ """Sender ID"""
text_message: str
"""Message text"""
+ message_event: platform_events.GroupMessage
+ """Original message event object. Contains group and sender information."""
+
message_chain: platform_message.MessageChain = pydantic.Field(
serialization_alias="message_chain"
)
- """Raw message chain"""
+ """Message chain"""
# ========== Settable Attributes ==========
@@ -111,14 +129,14 @@ class GroupNormalMessageReceived(BaseEventModel):
"""Modified message text, langbot_plugin.api.entities.builtin.provider.message.ContentElement type"""
reply_message_chain: typing.Optional[platform_message.MessageChain] = None
- """Reply message component list, only effective when preventing default behavior"""
+ """Direct reply message chain, only effective when preventing default behavior"""
```
-### *CommandSent
+### \*CommandSent
-:::warning Note
-No longer recommended for use, please use [Component: Command](/en/plugin/dev/components/command) instead.
-:::
+
+ No longer recommended for use, please use [Component: Command](/en/plugin/dev/components/command) instead.
+
Triggered when a group chat or private chat command is received.
@@ -169,7 +187,6 @@ class GroupCommandSent(BaseEventModel):
is_admin: bool
"""Whether it's an administrator"""
-
```
### NormalMessageResponded
@@ -220,11 +237,12 @@ class PromptPreProcessing(BaseEventModel):
event_name: str = "PromptPreProcessing"
session_name: str
+ """Session name, format is person_1234567890 or group_1234567890"""
# ========== Settable Attributes ==========
default_prompt: list[typing.Union[provider_message.Message, provider_message.MessageChunk]]
- """Scenario preset for this conversation, can be modified, langbot_plugin.api.entities.builtin.provider.message.Message or langbot_plugin.api.entities.builtin.provider.message.MessageChunk type"""
+ """Scenario preset (system prompt) for this conversation, can be modified, langbot_plugin.api.entities.builtin.provider.message.Message or langbot_plugin.api.entities.builtin.provider.message.MessageChunk type"""
prompt: list[typing.Union[provider_message.Message, provider_message.MessageChunk]]
"""Existing message records for this conversation, can be modified, langbot_plugin.api.entities.builtin.provider.message.Message or langbot_plugin.api.entities.builtin.provider.message.MessageChunk type"""
@@ -241,6 +259,20 @@ class PromptPreProcessing(BaseEventModel):
Event processing methods will be passed the `EventContext` object, which contains event context information, and the object has both [Request API](/en/plugin/dev/apis/common) and event context specific APIs. The following is a list of event context specific APIs:
+### Get Original Event Attributes
+
+`event_context.event` attribute is the original event object, which can get the attributes of the original event. The type is the type of the event being listened to.
+
+For example, when the event being listened to is `GroupMessageReceived`:
+
+```python
+event = event_context.event
+print(event.launcher_type) # Launcher object type (group)
+print(event.launcher_id) # Group ID
+print(event.sender_id) # Sender account ID
+print(event.message_chain) # Message chain
+```
+
### Prevent Default Behavior
```python
@@ -253,18 +285,15 @@ event_context.prevent_default()
Calling this method will prevent the default subsequent behavior of this event, and the pipeline will end directly.
-:::info
-Only the following events can prevent default behavior:
-
-- PersonMessageReceived
-- GroupMessageReceived
-- PersonNormalMessageReceived
-- GroupNormalMessageReceived
-- PersonCommandSent
-- GroupCommandSent
-- NormalMessageResponded
-
-:::
+
+ - PersonMessageReceived
+ - GroupMessageReceived
+ - PersonNormalMessageReceived
+ - GroupNormalMessageReceived
+ - PersonCommandSent
+ - GroupCommandSent
+ - NormalMessageResponded
+
### Prevent Postorder Execution
@@ -276,4 +305,4 @@ def prevent_postorder(self):
event_context.prevent_postorder()
```
-Calling this method will prevent the subsequent plugins from executing this time.
+Calling this method will prevent the subsequent plugins from executing this time.
\ No newline at end of file
diff --git a/docs/en/plugin/dev/apis/tech-details.md b/en/plugin/dev/apis/tech-details.mdx
similarity index 82%
rename from docs/en/plugin/dev/apis/tech-details.md
rename to en/plugin/dev/apis/tech-details.mdx
index 82b417d2e..8170205d8 100644
--- a/docs/en/plugin/dev/apis/tech-details.md
+++ b/en/plugin/dev/apis/tech-details.mdx
@@ -1,11 +1,13 @@
-# Plugin Technical Details
+---
+title: "Plugin Technical Details"
+---
## Architecture
-
+
In version 4.0, we introduced a high-security, high-flexibility production-grade plugin system and provided developers with rich APIs and easy-to-use supporting tools.
Plugin Runtime is used to manage plugin lifecycles and coordinate interactions between LangBot and plugins. It has two operating modes: `stdio` and `websocket`. When LangBot is started directly by users (not running in a container), it uses `stdio` mode, which is common for personal users or lightweight environments. When LangBot runs in a container, it uses `websocket` mode, designed specifically for production environments.
-Plugin Runtime automatically starts each installed plugin and interacts through stdio. In plugin development scenarios, developers can use the `lbp` command-line tool to start plugins and connect to the running Runtime via WebSocket for debugging.
\ No newline at end of file
+Plugin Runtime automatically starts each installed plugin and interacts through stdio. In plugin development scenarios, developers can use the `lbp` command-line tool to start plugins and connect to the running Runtime via WebSocket for debugging.
diff --git a/docs/en/plugin/dev/basic-info.md b/en/plugin/dev/basic-info.mdx
similarity index 96%
rename from docs/en/plugin/dev/basic-info.md
rename to en/plugin/dev/basic-info.mdx
index 094f2edff..a8b7dcc4f 100644
--- a/docs/en/plugin/dev/basic-info.md
+++ b/en/plugin/dev/basic-info.mdx
@@ -1,8 +1,6 @@
-# Completing Plugin Configuration Information
-
-:::info Table of Contents
-[[toc]]
-:::
+---
+title: "Completing Plugin Configuration Information"
+---
## Modifying the Manifest File
@@ -180,9 +178,9 @@ print(file_config)
file_bytes = await self.get_config_file(file_key)
```
-::: info
-Common MIME type and file extension reference: [MDN Documentation](https://developer.mozilla.org/en-US/docs/Web/HTTP/Basics_of_HTTP/MIME_types/Common_types)
-:::
+
+ Common MIME type and file extension reference: [MDN Documentation](https://developer.mozilla.org/en-US/docs/Web/HTTP/Basics_of_HTTP/MIME_types/Common_types)
+
### type: array[file]
diff --git a/docs/en/plugin/dev/components/add.md b/en/plugin/dev/components/add.mdx
similarity index 76%
rename from docs/en/plugin/dev/components/add.md
rename to en/plugin/dev/components/add.mdx
index c534aaef6..79bb15179 100644
--- a/docs/en/plugin/dev/components/add.md
+++ b/en/plugin/dev/components/add.mdx
@@ -1,10 +1,13 @@
-# Adding Components
+---
+title: "Adding Components"
+---
Plugins consist of one or more components that provide different functionalities to LangBot. Currently supported component types include:
- Event Listeners (EventListener): Listen to events during pipeline execution and modify context or pipelines.
- Commands (Command): Triggered by user command messages starting with `!` (or other configured prefixes).
- Tools (Tool): Called by LLMs during execution of LangBot's built-in Local Agent.
+- Knowledge Retrievers (KnowledgeRetriever): Provide external knowledge base retrieval capabilities for LangBot, supporting integration with various RAG systems.
## Adding Components
@@ -30,8 +33,7 @@ Component EventListener generated successfully.
➜ HelloPlugin >
```
-:::info
-The CLI will generate a `components` directory in the plugin directory and create corresponding component directories within it.
+
```
.
@@ -60,12 +62,13 @@ components:
...
```
To remove components, you can delete the corresponding information manually.
-:::
+
## Component Types
For detailed usage of each component, please refer to:
-- [EventListener](./event-listener.md)
-- [Command](./command.md)
-- [Tool](./tool.md)
\ No newline at end of file
+- [EventListener](./event-listener)
+- [Command](./command)
+- [Tool](./tool)
+- [KnowledgeRetriever](./knowledge-retriever)
diff --git a/docs/en/plugin/dev/components/command.md b/en/plugin/dev/components/command.mdx
similarity index 93%
rename from docs/en/plugin/dev/components/command.md
rename to en/plugin/dev/components/command.mdx
index 1f22c9815..4a21cfff6 100644
--- a/docs/en/plugin/dev/components/command.md
+++ b/en/plugin/dev/components/command.mdx
@@ -1,8 +1,10 @@
-# Component: Command
+---
+title: "Component: Command"
+---
Command components are triggered by user command messages starting with `!` (or other configured prefixes). Here's an example of triggering the `!help` command:
-
+
## Adding Command Components
@@ -53,7 +55,7 @@ execution:
## Plugin Processing
-The following code is generated by default (components/command/.py). You need to register and implement subcommand processing logic in the `initialize` method of the `Info` class.
+The following code is generated by default (`components/command/.py`). You need to register and implement subcommand processing logic in the `initialize` method of the `Info` class.
```python
# Auto generated by LangBot Plugin SDK.
@@ -136,7 +138,7 @@ In subcommand functions, you can read command parameters through the `context` v
The effect of the above command is shown in the image:
-
+
### Command Context
@@ -209,4 +211,4 @@ For specific return values, please refer to the definition of `CommandReturn`: [
You have learned the basic information about command registration and command execution. Next, you can:
-- Check out [Plugin Common APIs](/en/plugin/dev/apis/common)
\ No newline at end of file
+- Check out [Plugin Common APIs](/en/plugin/dev/apis/common)
diff --git a/docs/en/plugin/dev/components/event-listener.md b/en/plugin/dev/components/event-listener.mdx
similarity index 97%
rename from docs/en/plugin/dev/components/event-listener.md
rename to en/plugin/dev/components/event-listener.mdx
index 5acda0d7d..ce616cf33 100644
--- a/docs/en/plugin/dev/components/event-listener.md
+++ b/en/plugin/dev/components/event-listener.mdx
@@ -1,4 +1,6 @@
-# Component: Event Listener
+---
+title: "Component: Event Listener"
+---
LangBot's pipeline generates events during runtime for plugins to hook into and process. Each plugin can only have one event listener (components/event_listener/default.yaml), but can register any number of events within it.
@@ -98,4 +100,4 @@ Event registration is implemented through the `@self.handler` decorator, with th
You have learned the basic information about event listeners. Next, you can:
- Check the `List of Monitorable Events` and `Event Context APIs` in the documentation [Pipeline Events](/en/plugin/dev/apis/pipeline-events)
-- Check out [Plugin Common APIs](/en/plugin/dev/apis/common)
\ No newline at end of file
+- Check out [Plugin Common APIs](/en/plugin/dev/apis/common)
diff --git a/en/plugin/dev/components/knowledge-retriever.mdx b/en/plugin/dev/components/knowledge-retriever.mdx
new file mode 100644
index 000000000..fe90d32a8
--- /dev/null
+++ b/en/plugin/dev/components/knowledge-retriever.mdx
@@ -0,0 +1,266 @@
+---
+title: "Component: Knowledge Retriever"
+---
+
+The Knowledge Retriever component allows plugins to provide external knowledge base retrieval capabilities for LangBot. When users create an external knowledge base in LangBot, they can choose a knowledge retriever provided by a plugin to retrieve knowledge.
+
+
+
+## Adding a Knowledge Retriever Component
+
+A single plugin can add any number of knowledge retrievers. Execute the command `lbp comp KnowledgeRetriever` in the plugin directory and follow the prompts to enter the knowledge retriever configuration.
+
+```bash
+➜ FastGPTRetriever > lbp comp KnowledgeRetriever
+Generating component KnowledgeRetriever...
+KnowledgeRetriever name: fastgpt
+KnowledgeRetriever description: Retrieve knowledge from FastGPT knowledge bases
+Component KnowledgeRetriever generated successfully.
+```
+
+This will generate `fastgpt.yaml` and `fastgpt.py` files in the `components/knowledge_retriever/` directory. The `.yaml` file defines the basic information and configuration parameters of the knowledge retriever, and the `.py` file is the handler for this retriever:
+
+```bash
+➜ FastGPTRetriever > tree
+...
+├── components
+│ ├── __init__.py
+│ └── knowledge_retriever
+│ ├── __init__.py
+│ ├── fastgpt.py
+│ └── fastgpt.yaml
+...
+```
+
+## Manifest File: Knowledge Retriever
+
+```yaml
+apiVersion: v1 # Do not modify
+kind: KnowledgeRetriever # Do not modify
+metadata:
+ name: fastgpt # Knowledge retriever name, used to identify this retriever
+ label:
+ en_US: FastGPT Knowledge Base # Retriever display name, shown in LangBot's UI, supports multiple languages
+ zh_Hans: FastGPT 知识库
+ ja_JP: FastGPT ナレッジベース
+ description:
+ en_US: 'Retrieve knowledge from FastGPT knowledge bases' # Retriever description, shown in LangBot's UI, supports multiple languages. Optional
+ zh_Hans: '从 FastGPT 知识库中检索知识'
+ ja_JP: 'FastGPT ナレッジベースから知識を取得'
+ icon: assets/icon.svg # Retriever icon, displayed on the external knowledge base configuration page
+spec:
+ config: # Retriever configuration parameters, users need to fill in these parameters when creating an external knowledge base
+ - name: api_base_url # Parameter name
+ type: string # Parameter type: string, number, boolean, select
+ label:
+ en_US: API Base URL
+ zh_Hans: API 基础地址
+ ja_JP: API ベース URL
+ description:
+ en_US: 'Base URL for FastGPT API'
+ zh_Hans: 'FastGPT API 基础地址'
+ ja_JP: 'FastGPT API ベース URL'
+ default: 'http://localhost:3000' # Default parameter value
+ required: true # Whether required
+ - name: api_key
+ type: string
+ label:
+ en_US: FastGPT API Key
+ zh_Hans: FastGPT API Key
+ ja_JP: FastGPT API キー
+ description:
+ en_US: 'API key from your FastGPT instance'
+ zh_Hans: '从您的 FastGPT 实例获取的 API Key'
+ ja_JP: 'FastGPT インスタンスから取得した API Key'
+ default: ''
+ required: true
+ - name: search_mode # Example of select type parameter
+ type: select
+ label:
+ en_US: Search Mode
+ zh_Hans: 搜索模式
+ ja_JP: 検索モード
+ description:
+ en_US: 'The search method to use'
+ zh_Hans: '使用的搜索方法'
+ ja_JP: '使用する検索方法'
+ default: 'embedding'
+ options: # Select type parameters need to define an option list
+ - name: 'embedding'
+ label:
+ en_US: 'Embedding Search'
+ zh_Hans: '向量搜索'
+ ja_JP: '埋め込み検索'
+ - name: 'fullTextRecall'
+ label:
+ en_US: 'Full-Text Recall'
+ zh_Hans: '全文检索'
+ ja_JP: '全文検索'
+ - name: using_rerank # Example of boolean type parameter
+ type: boolean
+ label:
+ en_US: Use Re-ranking
+ zh_Hans: 使用重排序
+ ja_JP: リランキングを使用
+ description:
+ en_US: 'Whether to use re-ranking'
+ zh_Hans: '是否使用重排序'
+ ja_JP: 'リランキングを使用するかどうか'
+ default: false
+ required: false
+execution:
+ python:
+ path: fastgpt.py # Retriever handler, do not modify
+ attr: FastGPT # Class name of the retriever handler, consistent with the class name in fastgpt.py
+```
+
+For configuration item format reference, see: [Plugin Manifest Configuration Format](/en/plugin/dev/basic-info)
+
+## Plugin Handler
+
+The following code will be generated by default (`components/knowledge_retriever/.py`). You need to implement the knowledge retrieval logic in the `retrieve` method of the `FastGPT` class. Complete code can be found in [langbot-plugin-demo](https://github.com/langbot-app/langbot-plugin-demo).
+
+```python
+# Auto generated by LangBot Plugin SDK.
+# Please refer to https://docs.langbot.app/en/plugin/dev/tutor.html for more details.
+...
+
+class FastGPT(KnowledgeRetriever):
+
+ async def retrieve(self, context: RetrievalContext) -> list[RetrievalResultEntry]:
+ """Retrieve knowledge from FastGPT knowledge base"""
+
+ # 1. Get configuration parameters
+ api_base_url = self.config.get('api_base_url', 'http://localhost:3000')
+ api_key = self.config.get('api_key')
+ dataset_id = self.config.get('dataset_id')
+ search_mode = self.config.get('search_mode', 'embedding')
+ using_rerank = self.config.get('using_rerank', False)
+
+ # 2. Parameter validation
+ if not api_key or not dataset_id:
+ logger.error("Missing required configuration: api_key or dataset_id")
+ return []
+
+ # 3. Build API request
+ url = f"{api_base_url.rstrip('/')}/api/core/dataset/searchTest"
+ headers = {
+ "Authorization": f"Bearer {api_key}",
+ "Content-Type": "application/json"
+ }
+ payload = {
+ "datasetId": dataset_id,
+ "text": context.query, # Get query text from RetrievalContext
+ "searchMode": search_mode,
+ "usingReRank": using_rerank,
+ }
+
+ try:
+ # 4. Call external API
+ async with httpx.AsyncClient() as client:
+ response = await client.post(url, json=payload, headers=headers, timeout=30.0)
+ response.raise_for_status()
+ result = response.json()
+
+ # 5. Parse response and convert to RetrievalResultEntry
+ results = []
+ for record in result.get('data', []):
+ # Combine main data and auxiliary data as content
+ content_text = '\n'.join([
+ record.get('q', ''),
+ record.get('a', '')
+ ]).strip()
+
+ # Create retrieval result entry
+ entry = RetrievalResultEntry(
+ id=record.get('id', ''),
+ content=[ContentElement.from_text(content_text)],
+ metadata={
+ 'dataset_id': record.get('datasetId', ''),
+ 'source_name': record.get('sourceName', ''),
+ 'score': record.get('score', 0.0),
+ },
+ # Convert similarity score to distance (higher score = smaller distance)
+ distance=1.0 - float(record.get('score', 0.0)),
+ )
+ results.append(entry)
+
+ logger.info(f"Retrieved {len(results)} chunks from FastGPT dataset {dataset_id}")
+ return results
+
+ except httpx.HTTPStatusError as e:
+ logger.error(f"HTTP error from FastGPT API: {e.response.status_code} - {e.response.text}")
+ return []
+ except httpx.RequestError as e:
+ logger.error(f"Request error when calling FastGPT API: {str(e)}")
+ return []
+ except Exception as e:
+ traceback.print_exc()
+ logger.error(f"Unexpected error during retrieval: {str(e)}")
+ return []
+```
+
+### Retrieval Context
+
+`RetrievalContext` contains context information for this retrieval:
+
+```python
+class RetrievalContext(pydantic.BaseModel):
+ """Knowledge retrieval context"""
+
+ query: str
+ """Query text, the user's retrieval question"""
+```
+
+### Retrieval Results
+
+Retrieval results need to be converted to a list of `RetrievalResultEntry` objects, each representing a retrieved knowledge chunk:
+
+```python
+class RetrievalResultEntry(pydantic.BaseModel):
+ """Single retrieval result entry"""
+
+ id: str
+ """Result ID, uniquely identifies this entry"""
+
+ content: list[ContentElement]
+ """Result content, create text content using ContentElement.from_text()"""
+
+ metadata: dict[str, Any]
+ """Result metadata, can contain any key-value pairs, such as source, score, etc."""
+
+ distance: float
+ """Distance score, indicates relevance to the query (smaller is more relevant)
+ Usually calculated as 1.0 - similarity_score"""
+```
+
+### Getting Configuration Parameters
+
+Get user-configured parameter values using `self.config.get(parameter_name, default_value)`:
+
+```python
+# Get string parameter
+api_base_url = self.config.get('api_base_url', 'http://localhost:3000')
+
+# Get number parameters
+limit = self.config.get('limit', 5000)
+similarity = self.config.get('similarity', 0.0)
+
+# Get boolean parameter
+using_rerank = self.config.get('using_rerank', False)
+
+# Get select parameter
+search_mode = self.config.get('search_mode', 'embedding')
+```
+
+## Testing the Retriever
+
+After creation, execute the command `lbp run` in the plugin directory to start debugging. Then in LangBot:
+
+1. Go to the "Knowledge Base" page
+2. Add an external knowledge base
+3. Select the knowledge retriever provided by your plugin and fill in the configuration
+
+
+
+After saving, you can select this knowledge base in the LangBot pipeline.
diff --git a/docs/en/plugin/dev/components/tool.md b/en/plugin/dev/components/tool.mdx
similarity index 93%
rename from docs/en/plugin/dev/components/tool.md
rename to en/plugin/dev/components/tool.mdx
index 305c6ef09..55b4c82e2 100644
--- a/docs/en/plugin/dev/components/tool.md
+++ b/en/plugin/dev/components/tool.mdx
@@ -1,4 +1,6 @@
-# Component: Tool
+---
+title: "Component: Tool"
+---
LangBot's built-in Local Agent calls tools to interact with the outside world during execution. Currently, adding tools is supported through both plugins and MCP.
@@ -53,7 +55,7 @@ execution:
## Plugin Processing
-The following code is generated by default (components/tools/.py). You need to implement the calling and return logic for this tool in the `call` method of the `GetWeatherAlerts` class.
+The following code is generated by default (`components/tools/.py`). You need to implement the calling and return logic for this tool in the `call` method of the `GetWeatherAlerts` class.
```python
# Auto generated by LangBot Plugin SDK.
@@ -75,9 +77,9 @@ class GetWeatherAlerts(Tool):
In the `call` method, implement this tool:
-:::info
+
The weather retrieval tool example comes from MCP's [Server Writing Example](https://modelcontextprotocol.io/quickstart/server).
-:::
+
```python
from __future__ import annotations
@@ -165,10 +167,10 @@ httpx
Now execute the command `lbp run` in the plugin directory to start debugging. Configure a model that supports tool calling in LangBot and select to use that model on the corresponding pipeline to use this tool.
-
+
## What's Next
You have learned the basic usage of tools. Next, you can:
-- Check out [Plugin Common APIs](/en/plugin/dev/apis/common)
\ No newline at end of file
+- Check out [Plugin Common APIs](/en/plugin/dev/apis/common)
diff --git a/docs/en/plugin/dev/directory-structure.md b/en/plugin/dev/directory-structure.mdx
similarity index 89%
rename from docs/en/plugin/dev/directory-structure.md
rename to en/plugin/dev/directory-structure.mdx
index 7fb528f3e..78e448afc 100644
--- a/docs/en/plugin/dev/directory-structure.md
+++ b/en/plugin/dev/directory-structure.mdx
@@ -1,8 +1,6 @@
-# Plugin Directory Structure
-
-:::info Table of Contents
-[[toc]]
-:::
+---
+title: "Plugin Directory Structure"
+---
This document introduces the standard directory structure and file organization specifications for LangBot plugins, helping developers create compliant plugins.
@@ -38,12 +36,11 @@ LangBot plugins support multilingual README documentation to provide localized p
**Important Specifications:**
-1. **Root `README.md` (Required)**
+1. **`Root README.md (Required)`**
- Must be written in **English**
- Serves as the plugin's default documentation
- Used as fallback when requested language version doesn't exist
-
-2. **`readme/` Directory (Optional)**
+2. **`readme/ Directory (Optional)`**
- Used to store **non-English** README documents
- File naming format: `README_{language_code}.md`
@@ -51,12 +48,12 @@ LangBot plugins support multilingual README documentation to provide localized p
According to [RFC 4646](https://datatracker.ietf.org/doc/html/rfc4646) standard, LangBot currently supports the following language codes:
-| Language | Language Code | Filename | Location |
-|----------|---------------|----------|----------|
-| English | `en` or `en_US` | `README.md` | **Plugin root directory** |
-| Simplified Chinese | `zh_Hans` | `README_zh_Hans.md` | `readme/` directory |
-| Traditional Chinese | `zh_Hant` | `README_zh_Hant.md` | `readme/` directory |
-| Japanese | `ja_JP` | `README_ja_JP.md` | `readme/` directory |
+| Language | Language Code | Filename | Location |
+| ------------------- | --------------- | ------------------- | ------------------------- |
+| English | `en` or `en_US` | `README.md` | **Plugin root directory** |
+| Simplified Chinese | `zh_Hans` | `README_zh_Hans.md` | `readme/` directory |
+| Traditional Chinese | `zh_Hant` | `README_zh_Hant.md` | `readme/` directory |
+| Japanese | `ja_JP` | `README_ja_JP.md` | `readme/` directory |
### Example Directory Structure
@@ -102,7 +99,6 @@ When a user requests a README in a specific language, LangBot will search in the
- User requests Simplified Chinese (`zh_Hans`)
- → Look for `readme/README_zh_Hans.md`
- → If not found, return `README.md` (English version)
-
- User requests Japanese (`ja_JP`)
- → Look for `readme/README_ja_JP.md`
- → If not found, return `README.md` (English version)
@@ -188,4 +184,4 @@ pillow>=9.0.0
- [Basic Tutorial](/en/plugin/dev/tutor) - Learn how to create your first plugin
- [Complete Plugin Configuration Information](/en/plugin/dev/basic-info) - Configure manifest.yaml
- [Adding Components](/en/plugin/dev/components/add) - Develop plugin components
-- [Publish to Marketplace](/en/plugin/dev/publish/market) - Distribute your plugin
+- [Publish to Marketplace](/en/plugin/dev/publish/market) - Distribute your plugin
\ No newline at end of file
diff --git a/docs/en/plugin/dev/migration.md b/en/plugin/dev/migration.mdx
similarity index 92%
rename from docs/en/plugin/dev/migration.md
rename to en/plugin/dev/migration.mdx
index 5fa7879a1..488e14757 100644
--- a/docs/en/plugin/dev/migration.md
+++ b/en/plugin/dev/migration.mdx
@@ -1,14 +1,15 @@
-# Migration Guide
+---
+title: "Migration Guide"
+---
This tutorial highlights certain considerations. Please read the current version plugin tutorial first, then use this document as a reference for plugin migration.
## Migrating from 3.x Supported Asynchronous Plugins
-:::info
-Plugin characteristics:
+
- Main time period: 2024.2 ~ 2025.8
- Registration method: Using `@handler` decorators to register event listeners and `@llm_func` decorators to register content functions (tools) in the plugin class in `main.py`; all handler functions are asynchronous functions (async def)
-:::
+
- Plugin and component registration method: Changed from the previous single plugin class decorator registration method to manifest file registration method. See [Manifest File](/en/plugin/dev/basic-info); and separated different types of components independently. For details, see [Adding Components](/en/plugin/dev/components/add).
- Message chain entities: Now refactored. The construction method of each message chain element now requires explicit passing of **named parameters**. See [Message Platform Entities](/en/plugin/dev/apis/messages).
@@ -17,11 +18,10 @@ Plugin characteristics:
## Migrating from 2.x and 3.x Supported Synchronous Plugins
-:::info
-Plugin characteristics:
+
- Main time period: 2023.1 ~ 2024.2
- Registration method: Using `@on` decorators to register event listeners and `@func` decorators to register content functions (tools) in the plugin class in `main.py`; all handler functions are synchronous functions (def)
-:::
+
- Synchronous to asynchronous: Plugin runtime has now changed to fully asynchronous (based on asyncio). Please change all plugin code involving IO operations to asynchronous writing.
-- For detailed content, please refer to the above 3.x asynchronous plugin migration guide.
\ No newline at end of file
+- For detailed content, please refer to the above 3.x asynchronous plugin migration guide.
diff --git a/docs/en/plugin/dev/publish/github.md b/en/plugin/dev/publish/github.mdx
similarity index 83%
rename from docs/en/plugin/dev/publish/github.md
rename to en/plugin/dev/publish/github.mdx
index fcfe58d49..7b54e93c2 100644
--- a/docs/en/plugin/dev/publish/github.md
+++ b/en/plugin/dev/publish/github.mdx
@@ -1,4 +1,6 @@
-# Distribute Plugins via GitHub
+---
+title: "Distribute Plugins via GitHub"
+---
You can upload your plugin to GitHub, create a Release for the repository, and upload the `.lbpkg` file, allowing other users to install it in LangBot.
@@ -16,7 +18,7 @@ This will generate a `.lbpkg` file in the `dist` directory.
Upload your plugin to GitHub, then go to the Release page of your plugin repository, click to create a Release, and upload the `.lbpkg` file you just built.
-
+
## Install Plugin
diff --git a/docs/en/plugin/dev/publish/market.md b/en/plugin/dev/publish/market.mdx
similarity index 89%
rename from docs/en/plugin/dev/publish/market.md
rename to en/plugin/dev/publish/market.mdx
index 43c5682f4..7be746d83 100644
--- a/docs/en/plugin/dev/publish/market.md
+++ b/en/plugin/dev/publish/market.mdx
@@ -1,4 +1,6 @@
-# Publish to Plugin Marketplace
+---
+title: "Publish to Plugin Marketplace"
+---
Publish plugins to [LangBot Plugin Marketplace](https://space.langbot.app/market) via CLI.
@@ -6,7 +8,7 @@ Publish plugins to [LangBot Plugin Marketplace](https://space.langbot.app/market
LangBot Space is LangBot's centralized service platform. Please visit [LangBot Space](https://space.langbot.app), click the top-right corner to log in with GitHub and create an account.
-
+
This will redirect to GitHub authorization page, please complete authorization as prompted.
@@ -31,7 +33,7 @@ Waiting for verification...
Please click `Verification URL` to redirect to LangBot Space, enter `User Code` to complete login.
-
+
```bash
==================================================
@@ -60,6 +62,6 @@ Plugin built successfully: dist/tmp/RockChinQ-HelloPlugin-0.1.0.lbpkg
You can now check your plugin submission task at [LangBot Plugin Marketplace](https://space.langbot.app/market). Please wait for approval, after which you can view your plugin in the marketplace.
-
+
-If you have any questions, you can send an email to `hello@langbot.app` or contact us through [Community](/en/insight/community).
\ No newline at end of file
+If you have any questions, you can send an email to `hello@langbot.app` or contact us through [Community](/en/insight/community).
diff --git a/en/plugin/dev/style.mdx b/en/plugin/dev/style.mdx
new file mode 100644
index 000000000..36da3b353
--- /dev/null
+++ b/en/plugin/dev/style.mdx
@@ -0,0 +1,17 @@
+---
+title: "Code Style Guide"
+---
+
+## Logging
+
+In plugins, please use the `logging` module to record logs, do not use `print` statements (this will cause logs to not be output in the container environment).
+
+```python
+import logging
+
+logger = logging.getLogger(__name__) # Import logging module at the beginning of any Python file and define logger object
+
+logger.info('This is an info message') # Use logger.info to record info level logs
+logger.warning('This is a warning message')
+logger.error('This is an error message')
+```
diff --git a/docs/en/plugin/dev/tutor.md b/en/plugin/dev/tutor.mdx
similarity index 85%
rename from docs/en/plugin/dev/tutor.md
rename to en/plugin/dev/tutor.mdx
index e395e4e71..dd851ae7a 100644
--- a/docs/en/plugin/dev/tutor.md
+++ b/en/plugin/dev/tutor.mdx
@@ -1,10 +1,12 @@
-# Plugin Development Tutorial
+---
+title: "Plugin Development Tutorial"
+---
## Architecture Foundation
In version 4.0, we introduced a high-security, high-flexibility production-grade plugin system and provided developers with rich APIs and easy-to-use supporting tools.
-
+
Plugin Runtime is used to manage plugin lifecycles and coordinate interactions between LangBot and plugins. It has two operating modes: `stdio` and `websocket`. When LangBot is started directly by users (not running in a container), it uses `stdio` mode, which is common for personal users or lightweight environments. When LangBot runs in a container, it uses `websocket` mode, designed specifically for production environments.
@@ -43,11 +45,14 @@ The plugin class in main.py is common code for each plugin, initialized when the
Each component is a core functional module of your plugin, which can be [added and removed](/en/plugin/dev/components/add) as needed. Different components are called in different situations, making it easy to extend plugin functionality later. Each component directly inherits from the various component base classes under the `langbot_plugin.api.definition.components` package and contains a `plugin: BasePlugin` object, allowing you to directly call the plugin's APIs.
-::: info
-- For detailed API documentation, please refer to [API Reference](/en/plugin/dev/apis/common).
+
Please continue reading this tutorial to understand the plugin development process.
-:::
+
+
+## AI-Assisted Development
+
+- [skills-LangBotplugin](https://github.com/TyperBody/skills-LangBotplugin) - Skills contributed by community member [@TyperBody](https://github.com/TyperBody), use AI to quickly develop plugins, welcome to try
## Installing CLI
@@ -69,16 +74,14 @@ lbp init
Follow the prompts to enter `Author`, `Description`, and other information.
-:::info
-You can also use the `lbp init HelloPlugin` command to initialize the plugin in the subdirectory `HelloPlugin`.
+
-
-:::
+
+
This operation will generate the initial files for the plugin. You can now open the `HelloPlugin` directory in your favorite editor and start writing plugin code.
-:::info
-If you get a "command not found" error for `lbp`, it may be because you haven't properly set the `PATH` environment variable.
+
You can use `python -m langbot_plugin.cli.__init__` instead of the `lbp` command.
For example:
@@ -87,14 +90,13 @@ For example:
python -m langbot_plugin.cli.__init__ init HelloPlugin
cd HelloPlugin
```
-:::
+
## Starting Debug Mode
You need to first deploy and start LangBot, ensuring that Plugin Runtime is running and listening on port `5401`.
-::: info
-Runtime has two startup modes:
+
- `Stdio` mode: When you start LangBot using source code without the startup parameter `--standalone-runtime`, LangBot will automatically start Plugin Runtime as a subprocess and communicate with Plugin Runtime through `stdio` (standard input/output streams). In this case, Runtime will load plugins from the `data/plugins` directory in the LangBot root directory and listen on port `5401` of the LangBot host as a debug port.
@@ -105,7 +107,7 @@ Runtime has two startup modes:
Whether in `stdio` or `websocket` mode, Plugin Runtime will listen on port `5401` of its host as a debug port for plugin debugging connections.
When developing plugins, we recommend starting LangBot according to the [Development Configuration](/en/develop/dev-config) method, which will start Plugin Runtime in Stdio mode, making plugin development easier.
-:::
+
Copy the `.env.example` file in the plugin directory to `.env`, and check or modify `DEBUG_RUNTIME_WS_URL` to your Plugin Runtime's WebSocket address.
@@ -119,15 +121,15 @@ Start plugin debugging, and you will see the plugin output:
lbp run
```
-
+
And you can see this plugin has been loaded in LangBot's WebUI.
-
+
## What's Next
This tutorial will guide you through step-by-step completion of plugin functionality.
- Modify Plugin Information: The plugin has been created with basic plugin information. Please [complete the plugin information](/en/plugin/dev/basic-info).
-- Add Components: Plugin components are the core functional units of plugins. You can [add components](/en/plugin/dev/components/add) based on your needs.
\ No newline at end of file
+- Add Components: Plugin components are the core functional units of plugins. You can [add components](/en/plugin/dev/components/add) based on your needs.
diff --git a/docs/en/plugin/plugin-intro.md b/en/plugin/plugin-intro.mdx
similarity index 76%
rename from docs/en/plugin/plugin-intro.md
rename to en/plugin/plugin-intro.mdx
index e2a782c6c..68b3648d2 100644
--- a/docs/en/plugin/plugin-intro.md
+++ b/en/plugin/plugin-intro.mdx
@@ -1,10 +1,12 @@
-# LangBot Plugins
+---
+title: "LangBot Plugins"
+---
LangBot is composed of various internal components such as Large Language Model tools, commands, messaging platform adapters, LLM requesters, and more. To meet extensibility and flexibility requirements, we have implemented a production-grade plugin system.
Each plugin runs in an independent process, managed uniformly by the Plugin Runtime.
-
+
## Plugin Structure
@@ -13,6 +15,7 @@ Plugins can provide the following components based on their specific functionali
- Event Handlers: Listen to events during pipeline execution and modify context or pipelines.
- Commands: Triggered by user command messages starting with `!` (or other configured prefixes).
- Tools: Called by LLMs during execution of LangBot's built-in Local Agent.
+- Knowledge Retrievers: Used to retrieve relevant knowledge from external knowledge bases.
More component types will be supported for plugin implementation in the future.
@@ -21,17 +24,17 @@ More component types will be supported for plugin implementation in the future.
Currently supports uploading plugin packages and installing plugins from the plugin marketplace.
In LangBot's plugin management page, click the top-right corner to choose the installation method.
-
+
Click `Upload Local`, select `.lbpkg` files shared by others or downloaded from the Marketplace to install plugins.
Or click the Plugin Marketplace tab, select a plugin, and click install.
-
+
After installing plugins, you need to select the plugin in your pipeline configuration page.
-
+
## Plugin Management
@@ -39,14 +42,14 @@ After installing plugins, you need to select the plugin in your pipeline configu
Some plugins may require you to fill in specific configuration items (please refer to the plugin README instructions). Click on the plugin card to enter the plugin details page and obtain and input the required information as prompted.
-
+
### Updating Plugins
Only plugins installed from the plugin marketplace can be updated.
-
+
## Plugin Marketplace
-The plugin marketplace can be accessed from LangBot's internal `Plugin Management` page, or you can visit the standalone site [LangBot Plugin Marketplace](https://space.langbot.app/market).
\ No newline at end of file
+The plugin marketplace can be accessed from LangBot's internal `Plugin Management` page, or you can visit the standalone site [LangBot Plugin Marketplace](https://space.langbot.app/market).
diff --git a/docs/en/tags/readme.md b/en/tags/readme.mdx
similarity index 81%
rename from docs/en/tags/readme.md
rename to en/tags/readme.mdx
index 1d16d8d5c..a09bd6513 100644
--- a/docs/en/tags/readme.md
+++ b/en/tags/readme.mdx
@@ -1,20 +1,22 @@
-# Service API Overview
+---
+title: "Service API Overview"
+---
LangBot provides a set of APIs for external services to integrate. These APIs are authenticated with API keys, which are a subset of the HTTP API. To view the API documentation for frontend-backend communication, please go to the [Development](/en/develop/dev-config) section.
-::: warning
+
Service API is currently in Beta and some APIs may change frequently.
-:::
+
## Get API Key
Click the `API Keys` button in the sidebar of the WebUI to create an API Key.
-
+
After creation, copy the API Key and save it.
-
+
## Use API
diff --git a/en/tags/webhook.mdx b/en/tags/webhook.mdx
new file mode 100644
index 000000000..2f3035362
--- /dev/null
+++ b/en/tags/webhook.mdx
@@ -0,0 +1,106 @@
+---
+title: "Webhooks"
+---
+
+Webhooks allow you to send bot message events to external services for processing.
+
+## Configure Webhooks
+
+1. In LangBot WebUI, click "API Integration" in the sidebar
+2. Switch to the "Webhooks" tab
+3. Click "+" to create a new webhook
+4. Fill in:
+ - **Name**: Webhook identifier
+ - **URL**: Target URL to receive events
+ - **Description**: Optional
+ - **Status**: Enable or disable
+
+## Event Format
+
+### Person Message (bot.person_message)
+
+```json
+{
+ "uuid": "event-unique-id",
+ "event_type": "bot.person_message",
+ "data": {
+ "bot_uuid": "bot-uuid",
+ "adapter_name": "AdapterName",
+ "sender": {
+ "id": "user-id",
+ "name": "User Name"
+ },
+ "message": [
+ {
+ "type": "Plain",
+ "text": "Message content"
+ }
+ ],
+ "timestamp": 1234567890
+ }
+}
+```
+
+### Group Message (bot.group_message)
+
+```json
+{
+ "uuid": "event-unique-id",
+ "event_type": "bot.group_message",
+ "data": {
+ "bot_uuid": "bot-uuid",
+ "adapter_name": "AdapterName",
+ "group": {
+ "id": "group-id",
+ "name": "Group Name"
+ },
+ "sender": {
+ "id": "user-id",
+ "name": "User Name"
+ },
+ "message": [
+ {
+ "type": "Plain",
+ "text": "Message content"
+ }
+ ],
+ "timestamp": 1234567890
+ }
+}
+```
+
+## Response Format
+
+Webhook services should return JSON:
+
+```json
+{
+ "status": "ok",
+ "skip_pipeline": false
+}
+```
+
+### Parameters
+
+- **status**: Processing status (recommend "ok")
+- **skip_pipeline**: Whether to skip LangBot pipeline processing
+ - `true`: Message won't continue in pipeline
+ - `false`: Message proceeds normally
+
+
+`skip_pipeline` lets you completely take over message processing. When `true`, the message is only handled by your webhook service and won't trigger LangBot's AI features.
+
+
+## Integration Example
+
+### Dify Workflow
+
+Use the [dify-plugin-langbot-trigger](https://github.com/langbot-app/dify-plugin-langbot-trigger) plugin to receive LangBot webhook events and create workflows in Dify.
+
+## Notes
+
+- Webhook URL must be accessible
+- Request timeout: 15 seconds
+- Failed requests don't affect normal processing
+- Multiple webhooks execute in parallel
+- Any webhook returning `skip_pipeline: true` skips pipeline processing
diff --git a/en/usage/knowledge/readme.mdx b/en/usage/knowledge/readme.mdx
new file mode 100644
index 000000000..5326e5746
--- /dev/null
+++ b/en/usage/knowledge/readme.mdx
@@ -0,0 +1,37 @@
+---
+title: "Using the Knowledge Base"
+---
+
+LangBot natively supports RAG (Retrieval-Augmented Generation). You can create a built-in knowledge base and bind it to a pipeline, allowing the pipeline to answer questions based on the contents of the knowledge base. LangBot also supports connecting to external knowledge retrieval services (e.g., Dify, RAGFlow).
+
+## Build a Built-in Knowledge Base
+
+
+Creating and using a built-in knowledge base requires configuring an embedding model first. Please read [Configure Models](/en/usage/models/readme).
+
+
+On the knowledge base page, click the `Create Knowledge Base` button, fill in the name, select an already configured embedding model, then click `Create`.
+
+After creation, go to the "Documents" tab of your knowledge base and upload documents. LangBot will automatically parse and index these in the background.
+
+
+
+## Connect External Knowledge Base
+
+On the knowledge base page, switch to the "External Knowledge Base" tab and add an external retriever. In the dialog, select the knowledge retriever plugin to use (please install the related plugin in Plugin Management first). Supported retrievers can be found in the [Plugin Marketplace](https://space.langbot.app/market?category=KnowledgeRetriever).
+
+## Use the Knowledge Base
+
+Go to your pipeline configuration, under the "AI" tab, choose `Local Agent` as the runner, then select the knowledge base you just created.
+
+
+
+
+
+
+LangBot's built-in knowledge base can be used only when the runner is set to `Local Agent`. For other runners, refer to their documentation.
+
+
+Now you can use the knowledge base in `Chat Debug`, or through the bot linked to this pipeline:
+
+
diff --git a/docs/en/deploy/mcp/readme.md b/en/usage/mcp/readme.mdx
similarity index 51%
rename from docs/en/deploy/mcp/readme.md
rename to en/usage/mcp/readme.mdx
index b54c76d04..cd7f058c0 100644
--- a/docs/en/deploy/mcp/readme.md
+++ b/en/usage/mcp/readme.mdx
@@ -1,37 +1,38 @@
-# Using MCP Servers
+---
+title: "Using MCP Servers"
+---
-LangBot supports SSE mode MCP servers. You can add MCP servers to leverage the tool calling capabilities in large language models for better handling of LLM requests.
+LangBot supports using tools from MCP servers. You can add MCP servers to leverage the tool calling capabilities in large language models for better handling of LLM requests.
-:::info
-MCP service only supports SSE mode.
+
- MCP servers recommended acquisition channel: [Composio MCP](https://mcp.composio.dev/)
-:::
+
## Enable Function Calling for Models
As shown in the image, enable the `Function Calling` feature for the model.
-
+
## Create MCP Server
Click `Plugin Management`, then `MCP Management`, as shown:
-
+
Click `Add` in the top right corner, then `Create MCP Server`,
-
+
For example, to use the Fetch HTML server, fill in the corresponding URL, click `Test` to test the MCP server, and click `Submit` to add the server.
After adding, click the switch on the card to connect to the MCP server. Click the card to view the MCP server details:
-
+
## Effect
You need to select `Local Agent` as the runner in the pipeline settings and use a model that supports function calling.
-
+
diff --git a/en/usage/models/readme.mdx b/en/usage/models/readme.mdx
new file mode 100644
index 000000000..5d7557403
--- /dev/null
+++ b/en/usage/models/readme.mdx
@@ -0,0 +1,47 @@
+---
+title: "Configure Models (Models)"
+---
+
+## LangBot Models
+
+LangBot Models is an official model service provided by LangBot. When you initialize a local instance with your LangBot Space account, available models will be automatically added to your instance without any configuration. You will receive a certain amount of free quota to get started quickly.
+
+
+
+For specific available models, please check [LangBot Space](https://space.langbot.app/models).
+
+## Custom Models
+
+You can also add models from other sources.
+
+### LLM Model
+
+Models will be used by pipelines to process messages. The first model you configure will be set as the model for the default pipeline.
+
+
+
+You can add multiple models, and then select which model to use in the pipeline.
+
+
+
+Enter these four parameters: `Model Name`, `Model Provider`, `Request URL`, and `API Key`, then submit.
+
+For model capabilities, please choose according to the specific model characteristics:
+
+- Visual Capability: Needs to be enabled to recognize images
+
+- Function Calling: Needs to be enabled to use Agent tools in conversations
+
+### Embedding Model
+
+Embedding models are used to compute vector representations of messages. If you need to use knowledge bases, please configure this model.
+
+
+
+Enter these four parameters: `Model Name`, `Model Provider`, `Request URL`, and `API Key`, then submit. After that, please configure the knowledge base to use this model.
+
+### Using seekdb Built-in Embedding Model (Zero Configuration)
+The system has integrated the official embedding model provided by seekdb, no parameters required.
+- On the "Embedding Model" page, select "seekdb-built-in";
+- Click "Save" to use it immediately;
+- Then select this model in your knowledge base to take effect.
diff --git a/docs/en/deploy/pipelines/coze.md b/en/usage/pipelines/coze.mdx
similarity index 79%
rename from docs/en/deploy/pipelines/coze.md
rename to en/usage/pipelines/coze.mdx
index 02c6358f3..172043f42 100644
--- a/docs/en/deploy/pipelines/coze.md
+++ b/en/usage/pipelines/coze.mdx
@@ -1,24 +1,26 @@
-# Integrating Coze API
+---
+title: "Integrating Coze API"
+---
This document explains how to obtain the Token and Bot ID from the Coze platform and enter them into the LangBot pipeline configuration.
## 1. Obtaining the Token and Bot ID
1. Log in to the Coze platform and enter your developer console.
-
+
2. In "API Management", create and copy the token.
-
+
-:::info
+
In Coze authorization, coze.cn supports long-term authorization through "Service Identities and Credentials", while coze.com only provides Personal Access Tokens.
-:::
+
3. Select your own agent (or create a new one) from the project development section. The obtained ID is the `bot_id`.
-
+
* Make sure to select the API option when publishing the agent
-
+
Please securely store the following two pieces of information:
- **token**: The token generated by the Coze platform
@@ -35,7 +37,7 @@ Please securely store the following two pieces of information:
- **bot_id**: Paste the corresponding Bot ID
- Please select the `API Base URL` according to the Coze site you are using: coze.cn please fill in `https://api.coze.cn`; coze.com please fill in `https://api.coze.com`
- 
+ 
4. Click "Save" to complete the configuration
@@ -46,4 +48,4 @@ Once completed, you can invoke the Coze agent within this pipeline for dialogue
- **Save fails or invocation returns an error**: Please verify that the token and bot_id are correct and do not contain extra spaces
- **Unable to select `Coze API`**: Please confirm whether the current version supports this runner. If not yet supported, please upgrade to a version that includes the Coze runner
-For more general pipeline configuration instructions, please refer to [Modifying Dialogue Pipeline Configuration](/en/deploy/pipelines/readme)
\ No newline at end of file
+For more general pipeline configuration instructions, please refer to [Modifying Dialogue Pipeline Configuration](/en/usage/pipelines/readme)
diff --git a/docs/en/deploy/pipelines/dify.md b/en/usage/pipelines/dify.mdx
similarity index 79%
rename from docs/en/deploy/pipelines/dify.md
rename to en/usage/pipelines/dify.mdx
index a145acac0..4ec036e2d 100644
--- a/docs/en/deploy/pipelines/dify.md
+++ b/en/usage/pipelines/dify.mdx
@@ -1,4 +1,6 @@
-# Using Dify with LangBot
+---
+title: "Using Dify with LangBot"
+---
[Dify](https://dify.ai) is an open-source large language model (LLM) application development platform. It combines the concepts of Backend as Service and LLMOps, enabling developers to quickly build production-grade generative AI applications.
Dify can create chat assistants (including Chatflow), Agents, text generation applications, workflows, and other types of applications.
@@ -11,32 +13,30 @@ Please follow the [Dify documentation](https://docs.dify.ai) to deploy Dify and
After publishing your application, go to the `Access API` page of your application to generate an API key.
-
+
Save the API server and API key for configuring LangBot's pipeline `AI Capability`.
-:::info
-The above is an example for Dify cloud service version. If you are using the self-hosted community version, please use your own Dify service address as the `base-url` in LangBot, and add `/v1` as the path.
+
- If LangBot and Dify are deployed on the same host and both are deployed using Docker, you can refer to the article: [Network Configuration Details](/zh/workshop/network-details.html#langbot-%E5%92%8C%E6%B6%88%E6%81%AF%E5%B9%B3%E5%8F%B0%E5%9D%87%E8%BF%90%E8%A1%8C%E5%9C%A8-docker-%E5%AE%B9%E5%99%A8%E4%B8%AD). In this case, add `langbot-network` to the `networks` of all containers in the docker-compose.yaml file that starts Dify, add the container name `dify-nginx` to the `nginx` container, and finally set `base-url` to `http://dify-nginx/v1` in the LangBot configuration.
- For other cases, please consult your company's operations team.
-:::
+
## Configuring LangBot
Open the LangBot WebUI page, add a new pipeline or switch to the AI capability configuration page in an existing pipeline.
-
+
-::: info
-### Workflow Output Key
+
If you are using a Dify workflow application, please use `summary` as the key to pass the output content.
-
+
## Output Processing
When using a workflow application or Agent application, if you enable `track-function-calls` in LangBot's pipeline `Output Processing`, a message of `calling function xxx` will be output to the user when Dify executes each tool call.
However, if you are using `ChatFlow` under the `chat` application (Chat Assistant -> Workflow Orchestration), it will only output the text returned by the Answer (direct reply) node regardless of the settings.
-:::
+
diff --git a/docs/en/deploy/pipelines/langflow.md b/en/usage/pipelines/langflow.mdx
similarity index 72%
rename from docs/en/deploy/pipelines/langflow.md
rename to en/usage/pipelines/langflow.mdx
index a687473fd..201066862 100644
--- a/docs/en/deploy/pipelines/langflow.md
+++ b/en/usage/pipelines/langflow.mdx
@@ -1,4 +1,6 @@
-# Using Langflow with LangBot
+---
+title: "Using Langflow with LangBot"
+---
[Langflow](https://langflow.com/) is an open-source project for building and deploying AI-based Agents and Workflows. It supports local and cloud deployment, and provides APIs for other applications to integrate.
@@ -10,22 +12,22 @@ Please follow the [Langflow documentation](https://langflow.com/docs/introductio
As an example of the default template's Simple Agent:
-
+
You can modify the workflow according to your needs:
-
+
## Configuring LangBot
Open the LangBot WebUI page, add a new pipeline or switch to the AI capability configuration page in an existing pipeline, and select `Langflow API` as the runner.
-
+
Fill in the other settings according to the prompts, including `Base URL` (fill in according to actual network conditions), `API Key`, `Flow ID`, etc. The API Key can be obtained from Langflow's Settings:
-
+
Flow ID can be obtained by clicking the `Share` -> `API access` button in the top right corner of the edit page and obtaining it from the example code:
-
\ No newline at end of file
+
diff --git a/docs/en/deploy/pipelines/n8n.md b/en/usage/pipelines/n8n.mdx
similarity index 55%
rename from docs/en/deploy/pipelines/n8n.md
rename to en/usage/pipelines/n8n.mdx
index 373051e2b..1d6650655 100644
--- a/docs/en/deploy/pipelines/n8n.md
+++ b/en/usage/pipelines/n8n.mdx
@@ -1,4 +1,6 @@
-# Using n8n with LangBot
+---
+title: "Using n8n with LangBot"
+---
[n8n](https://n8n.io/) is an open-source workflow automation platform that allows you to create, schedule, and execute various automated tasks.
@@ -8,42 +10,40 @@ LangBot currently supports triggering workflows and receiving responses through
Please open the configuration page of an existing pipeline or create a new pipeline (recommended) and open the configuration page. Select `n8n Workflow API` as the runner in `AI`.
-
+
Then configure and fill in the other settings according to the content below.
## Configuring n8n Workflow Connection
-
+
or
-
+
Select `Webhook` or `On chat message` as the trigger and configure as follows:
- Webhook:
- 
+ 
- On chat message:
- 
+ 
-:::info
-If you need streaming responses, set `Response Mode` to `Streaming`.
-
-:::
+
+
+
-:::info
-Authentication corresponds to the authentication methods in LangBot's pipeline configuration, which you can modify as needed.
+
-
-:::
+
+
Configure the node that calls the AI model as `AI Agent`, following the setup below:
> For streaming responses, add the items highlighted in the red box. If you don't need streaming, you can skip this.
-
+
For the workflow response content in n8n, please use the `Respond to Webhook` node and configure it according to the image below (if you choose streaming responses with the `AI Agent` node, you do not need this step):
-
+
The response content key name in `Response Body` needs to match the `output key name` in LangBot's pipeline configuration.
-After completing the n8n workflow configuration, please click `Active` at the top to enable the workflow.
\ No newline at end of file
+After completing the n8n workflow configuration, please click `Active` at the top to enable the workflow.
diff --git a/docs/en/deploy/pipelines/readme.md b/en/usage/pipelines/readme.mdx
similarity index 69%
rename from docs/en/deploy/pipelines/readme.md
rename to en/usage/pipelines/readme.mdx
index f1996bcf6..99a5f0ae8 100644
--- a/docs/en/deploy/pipelines/readme.md
+++ b/en/usage/pipelines/readme.mdx
@@ -1,10 +1,12 @@
-# Modify Dialogue Pipeline Configuration (Pipelines)
+---
+title: "Modify Dialogue Pipeline Configuration (Pipelines)"
+---
The pipeline controls the processing flow after receiving a message, as well as the information exchange with the large language model. Each bot can be bound to one pipeline, and the same pipeline can be bound to multiple bots.
LangBot automatically creates a default pipeline when first started. When creating a bot, it is automatically bound to the default pipeline. When creating the first model, it is automatically set as the model for the default pipeline.
-
+
You can create multiple pipelines for different bots to adapt to different scenarios.
@@ -20,28 +22,33 @@ AI capabilities are mainly divided into two parts: selecting the runner and conf
The runner defines how to schedule the large model to process messages. The default is `Built-in Agent`, which is a multi-round Agent strategy implemented by LangBot. Only when this runner is selected will the models and tools configured internally in LangBot be used.
-**
+{/*  */}
-
+
You can also choose to use external LLMOps platforms such as `Dify`, [`n8n`](https://n8n.io/). In this case, the models, prompts, tools, and other resources used will be provided by the LLMOps platform.
-
+
-- For detailed steps on connecting to Dify, you can [refer to the tutorial](/en/deploy/pipelines/dify.html).
-- For detailed steps on connecting to n8n, you can [refer to the tutorial](/en/deploy/pipelines/n8n.html).
+- For detailed steps on connecting to Dify, you can [refer to the tutorial](/en/usage/pipelines/dify.html).
+- For detailed steps on connecting to n8n, you can [refer to the tutorial](/en/usage/pipelines/n8n.html).
### Conversation Variables
When using external LLMOps platforms, LangBot explicitly passes the following parameters, which you can add to the start node of the LLMOps platform workflow (the image below is an example of Dify):
+- `launcher_type`: Launcher object type, `person` for private chat, `group` for group chat
+- `launcher_id`: Launcher object ID, user ID for private chat, group ID for group chat
+- `sender_id`: Sender ID
- `user_message_text`: The plain text of the user message
- `session_id`: User session ID, `person_` for private chat, `group_` for group chat
- `conversation_id`: String, user session ID, generated by LangBot. It will be regenerated after the user resets the session
-- `msg_create_time`: Numeric type, timestamp (seconds) when this message was received
+- `msg_create_time`: Numeric type, timestamp (seconds) when this message was received
+- `group_name`: Group name, only set when receiving group messages
+- `sender_name`: Sender name
-You can [customize any variable through plugins](/zh/plugin/dev/apis/common.html#set-request-variables).
+You can [customize any variable through plugins](/en/plugin/dev/apis/common.html#set-request-variables).
-
+
## Other Configurations
diff --git a/docs/en/deploy/platforms/dingtalk.md b/en/usage/platforms/dingtalk.mdx
similarity index 69%
rename from docs/en/deploy/platforms/dingtalk.md
rename to en/usage/platforms/dingtalk.mdx
index 426e72fd1..4462184c0 100644
--- a/docs/en/deploy/platforms/dingtalk.md
+++ b/en/usage/platforms/dingtalk.mdx
@@ -1,56 +1,58 @@
-# Deploy DingTalk Bot
+---
+title: "Deploy DingTalk Bot"
+---
Deploy LangBot to DingTalk.
## Create Bot
Enter the [DingTalk Developer Backend](https://open-dev.dingtalk.com/?spm=ding_open_doc.document.0.0.74f445e5MkawbT#/), log in and enter the organization. After successful login, enter the open platform, which looks like this:
-
+
Click `Application Development` at the top, then click the blue button `Create Application` on the right, fill in the basic information of the bot, and click save.
Enter the bot's backend, for example, if we have a bot named langbot2, its management page looks like this:
-
+
## Configure Bot
Click `Add Application Capability`, `Other Application Capabilities`, `Configure` in `Robot`, click configure and fill in the information, as shown below:
-
+
Click `Publish` at the bottom of the page, after successful publication, click `Version Management and Publishing` at the bottom left of the bot page, as shown:
-
+
If this is the first time creating a bot, the right side is empty, you need to click `Create New Version`, set information in it, then set `Application Visibility Range`, and click save.
Click `Event Subscription`, change the push method to `Stream Mode Push`.
If card streaming is needed, you must apply for card permissions in the permission management, as shown:
-
+
-
+
Additionally, for card messages you mainly need to create a card template and record the template ID to fill in the configuration, the process is as follows:
> The card content template ID can be obtained by logging into the developer backend > [Card Platform](https://open-dev.dingtalk.com/fe/card?spm=ding_open_doc.document.0.0.33cf2281L0fXsV)
Fill in information when creating a new template, as shown:
-
+
Select a preset template (just choose the first one and modify the template content later), as shown:
-
+
Click Use
-
+
Create
-
+
After clicking Create you'll be redirected to edit the template. As shown, you can freely edit your desired card message:
-
+
For the main content, keep the default 'content' unchanged:
-
+
After editing and confirming everything is correct, save it and copy the template ID to fill in the configuration file:
-
-
+
+
## Fill in Configuration Information
@@ -61,17 +63,17 @@ Record the above configuration items and fill them in the LangBot bot configurat
Click [Card Platform](https://open-dev.dingtalk.com/fe/card?spm=ding_open_doc.document.0.0.33cf2281L0fXsV), copy the corresponding bound template ID from the template list, and fill it into the card template ID field.
-
+
Streaming related:
-
+
**Start LangBot**.
## Add Bot
This article uses DingTalk Windows desktop version as an example, click `Search` at the top, `Features`, then enter the name of the bot you just created, as shown:
-
+
Click on the bot to chat with it.
diff --git a/docs/en/deploy/platforms/discord.md b/en/usage/platforms/discord.mdx
similarity index 61%
rename from docs/en/deploy/platforms/discord.md
rename to en/usage/platforms/discord.mdx
index 4f63f3867..ba843753d 100644
--- a/docs/en/deploy/platforms/discord.md
+++ b/en/usage/platforms/discord.mdx
@@ -1,22 +1,24 @@
-# Connect to Discord Bot
+---
+title: "Connect to Discord Bot"
+---
## Create Bot
Go to the [Discord Developer Portal](https://discord.com/developers/applications), log in, and create an application.
-
+
Modify the basic information, click `Save Changes` to save.
-
+
Click `Bot` on the left, click `Reset Token`, copy the generated Token.
-
+
And check all options in `Privileged Gateway Intents` on this page, click `Save Changes` to save.
-
+
**Finally, click `OAuth2` on the left, copy the `Client ID` on the page.**
@@ -24,13 +26,11 @@ And check all options in `Privileged Gateway Intents` on this page, click `Save
Click to add a new bot, fill in the `Client ID` and `Token` obtained in the previous step into the configuration.
-
+
-:::warning
+
-If you are using this adapter within mainland China, you may need to set up a network proxy.
-
-:::
+
After filling in, start LangBot. If configured successfully, the log will show `[02-02 16:48:15.263] manager.py (68) - [INFO] : Initializing platform adapter 1: discord`, keep LangBot running.
@@ -40,16 +40,16 @@ You need to create a server first, then invite the bot to the server.
Go to the `OAuth2` page, select `URL Generator`, select `bot`, check the permissions as shown in the image.
-
+
-
+
Click `Copy`, paste the generated URL into your browser to open it, and invite the bot to your server.
-
+
## Use Bot
Now you can use the bot normally in groups or private messages.
-
+
diff --git a/en/usage/platforms/kook.mdx b/en/usage/platforms/kook.mdx
new file mode 100644
index 000000000..7cff45542
--- /dev/null
+++ b/en/usage/platforms/kook.mdx
@@ -0,0 +1,65 @@
+---
+title: "Integrating KOOK Bot"
+---
+
+## Create a Bot
+
+Visit the [KOOK Developer Center](https://developer.kookapp.cn/), log in and access the console.
+
+
+
+Click "Create Application" and fill in the application information.
+
+
+
+After the application is created, enter the application details page.
+
+
+
+You can view the basic information of the application on the application overview page.
+
+
+
+## Get Bot Token
+
+In the application page, click the "Bot" tab, copy the Bot Token and save it securely. You will need it later.
+
+
+
+## Configure Bot Permissions
+
+**Important:** In the "Bot" settings, find the "Message Filtering" option and click to configure.
+
+
+
+Enable all message-related event permissions, including channel messages and private message events. Otherwise, the bot will not be able to receive messages.
+
+
+
+## Invite the Bot
+
+In the bot settings page, you can generate an invitation link to invite the bot to your server.
+
+
+
+## Connect to LangBot
+
+Open the LangBot Webui page, and click to create a new bot on the "Bots" page.
+
+
+
+Select the KOOK platform, fill in the bot name and Bot Token.
+
+
+
+After saving, the bot will appear in the list.
+
+
+
+Click the enable button to start the bot. If successfully configured, the bot status will show as running.
+
+
+
+## Using the Bot
+
+Now in the KOOK server, the bot can receive and reply to messages normally. The bot supports both channel messages and private messages.
diff --git a/en/usage/platforms/lark.mdx b/en/usage/platforms/lark.mdx
new file mode 100644
index 000000000..54b9ef750
--- /dev/null
+++ b/en/usage/platforms/lark.mdx
@@ -0,0 +1,90 @@
+---
+title: "Connect to Feishu Bot"
+---
+
+## Create Bot
+
+Go to the [Feishu Open Platform](https://open.feishu.cn/app), log in, and create an enterprise self-built application or store application. [(difference introduction)](https://open.feishu.cn/document/platform-overveiw/overview)
+
+
+
+
+
+Add bot capability to the application:
+
+
+Add the permissions shown in the image in the permission management:
+
+
+
+If card streaming permissions are required, additionally add the following card creation and update permissions as shown in the image:
+
+
+
+
+If you need to change the default card template, you need to modify the card template in the platform adapter's code yourself.
+
+
+## Connect to LangBot
+
+Find `app_id` and `app_secret` on the `Credentials and Basic Information` page.
+
+
+
+
+
+Open LangBot's Webui configuration page, create a new bot
+
+Fill in the relevant information in the form
+
+
+
+Streaming related:
+
+
+After filling in, start LangBot. If configured successfully, the log will show `[01-29 23:42:56.796] manager.py (68) - [INFO] : Initializing platform adapter 1: lark`, keep LangBot running.
+
+
+
+- `enable-webhook`: Set to `true`
+- `encrypt-key`: Set to `Encrypt Key` in the `Encryption Strategy` of the `Events and Callbacks` page
+
+Note that in Webhook mode, LangBot needs to be deployed on a server with a public IP, and ensure that the firewall has opened the port configured above.
+
+
+## Configure Event Subscription
+
+Go to the `Events and Callbacks` page, configure the subscription method as `Long Connection`:
+
+
+
+And add the event: `Receive Messages`
+
+
+
+
+
+
+
+Please start LangBot first, fill in your server address and port here, the path is `/lark/callback`, click `Save`.
+
+
+
+## Publish Bot
+
+Click `Create Version` at the top, fill in the version number and other information, click `Save` below.
+
+
+
+Add the bot to a Feishu group to use it:
+
+
+
+
+
+Private chat can also be used directly
+
+
+
+## Common Issues
+- Store app bots cannot respond to chat messages immediately after creation/saving. Due to the [app_ticket event](https://open.feishu.cn/document/server-docs/application-v6/event/app_ticket-events) delay mechanism, you need to wait about 2 minutes before it can work normally.
diff --git a/docs/en/deploy/platforms/line.md b/en/usage/platforms/line.mdx
similarity index 64%
rename from docs/en/deploy/platforms/line.md
rename to en/usage/platforms/line.mdx
index 45998d07d..80992c516 100644
--- a/docs/en/deploy/platforms/line.md
+++ b/en/usage/platforms/line.mdx
@@ -1,4 +1,6 @@
-# Integrating LINE Bot
+---
+title: "Integrating LINE Bot"
+---
This article explains how to connect LangBot with the LINE platform to implement LINE bot functionality.
@@ -14,29 +16,29 @@ This article explains how to connect LangBot with the LINE platform to implement
> [Developer Console](https://developers.line.biz/console)
1. In the developer console, create a new Provider (if you don't have one)
-
+
2. Under the Provider, click "Create"
-
+
3. Enter a name and click Create
-
+
4. After being redirected, select Create a Message API
-
+
* Continue by clicking Create a Message API
-
+
* After being redirected, fill in the basic information
-
+
- Channel Name
- Channel Description
- Category
- Subcategory
- Email Address
5. After filling in all information, click "Continue" to create
-
+
6. Check the information you entered, and if there are no issues, click Submit
-
+
7. Successfully created, proceed to use
-
+
### Get Configuration Information
@@ -45,67 +47,75 @@ After creation, you will obtain the following important information, please reco
1. Channel Secret
> [Page after clicking use](https://manager.line.biz/account)
* Select Settings
-
+
* Click Message API
-
+
* Enable Message API
-
+
* Select the Provider you just created and click Agree
-
+
* For privacy terms, simply click OK
-
+
* Click OK to complete creation
-
+
* Copy it
-
+
2. Channel Access Token (need to click the "Issue" button to generate)
* Click console or directly visit [Console](https://developers.line.biz/console/)
-
+
* Select the Provider you created and click Message API
-
+
* Click Message API
-
+
* Scroll to the bottom, click Issue
-
+
* Click the icon to copy
-
-
-## Configure Webhook
-
-* Click console or directly visit [Console](https://developers.line.biz/console/)
-
-* Select the Provider you created and click Message API
-
-* Click Message API
-
-* Click Edit to fill in the connection
-
-* Enter the connection (must be an HTTPS connection, which means you need an SSL certificate), click Update
-
-
-* Select Use Webhook
-
-
-5. Click the "Verify" button to test if the connection is successful
-
+
## Connecting to LangBot
Next, open the LangBot configuration page:
1. Click "Bots", then click "Add"
-
+
2. Select "LINE" in "Platform/Adapter Selection"
-
+
3. Fill in the configuration information:
- Channel Secret: The Channel secret you obtained earlier
- Channel Access Token: The Channel access token you obtained earlier
- 
+ 
4. Click "Save" to complete the configuration
- 
+ 
+
+## Configure Webhook
+
+
+We recommend that you first refer to [Configure HTTP Reverse Proxy](/en/workshop/production/proxy-and-ssl) to configure the LangBot callback address.
+
+
+* Get the Webhook callback URL from the LangBot configuration page
+
+
+* Click console or directly visit [Console](https://developers.line.biz/console/)
+
+* Select the Provider you created and click Message API
+
+* Click Message API
+
+* Click Edit to fill in the connection
+
+* Enter the connection (must be an HTTPS connection, which means you need an SSL certificate), click Update
+
+
+* Select Use Webhook
+
+
+5. Click the "Verify" button to test if the connection is successful
+
+
## Feature Configuration
diff --git a/docs/en/deploy/platforms/qq/aiocqhttp/lagrange.md b/en/usage/platforms/qq/aiocqhttp/lagrange.mdx
similarity index 83%
rename from docs/en/deploy/platforms/qq/aiocqhttp/lagrange.md
rename to en/usage/platforms/qq/aiocqhttp/lagrange.mdx
index ee8eacb2e..cb54d4290 100644
--- a/docs/en/deploy/platforms/qq/aiocqhttp/lagrange.md
+++ b/en/usage/platforms/qq/aiocqhttp/lagrange.mdx
@@ -1,12 +1,14 @@
-# Deploy Message Platform Lagrange
+---
+title: "Deploy Message Platform Lagrange"
+---
## Lagrange Introduction
Lagrange is a QQNT protocol reverse engineering framework that is lightweight and relatively stable. Connect through the OneBot 11 protocol, you need to select `OneBot v11` as the adapter.
-::: warning
+
You need to use NT QQ to interact with the bot, old versions of QQ will not work properly
-:::
+
## Deployment Steps
@@ -24,11 +26,11 @@ You need to log in to Github to download. If you don't need certain features, yo
Follow the images to download:
-
+
-
+
-
+
### Final Steps
@@ -46,7 +48,7 @@ If you cannot log in, please check if you have correctly filled in the signature
You need to configure Lagrange to connect to LangBot. Please edit Lagrange's configuration file appsettings.json and ensure that the connection configuration in Implementations matches the content in the image below:
-
+
The Type must be `ReverseWebSocket`;
Host is the IP of the host running LangBot, if on the same host, you can write `127.0.0.1`;
@@ -60,8 +62,8 @@ Click on Bots, then click Add
Select `OneBot v11` for `Platform/Adapter Selection`
-
+
-::: info
+
Note, if you have network connection issues involving multiple docker containers, please refer to [Network Configuration Details](/en/workshop/network-details)
-:::
+
diff --git a/docs/en/deploy/platforms/qq/aiocqhttp/llonebot.md b/en/usage/platforms/qq/aiocqhttp/llonebot.mdx
similarity index 78%
rename from docs/en/deploy/platforms/qq/aiocqhttp/llonebot.md
rename to en/usage/platforms/qq/aiocqhttp/llonebot.mdx
index aadd9fff9..8fa63cb93 100644
--- a/docs/en/deploy/platforms/qq/aiocqhttp/llonebot.md
+++ b/en/usage/platforms/qq/aiocqhttp/llonebot.mdx
@@ -1,4 +1,6 @@
-# Deploy Message Platform LiteLoaderQQNT
+---
+title: "Deploy Message Platform LiteLoaderQQNT"
+---
Connect through the OneBot 11 protocol, you need to select ``OneBot v11`` as the adapter.
@@ -8,7 +10,7 @@ Connect through the OneBot 11 protocol, you need to select ``OneBot v11`` as the
Installation tutorial for LiteLoaderQQNT: https://llonebot.github.io/zh-CN/guide/getting-started
-
+
Make sure the IP address in the address is the address of the host running LangBot (if running on the same network, use 127.0.0.1)
@@ -20,8 +22,8 @@ Click on Bots, then click Add
Select `OneBot v11` for `Platform/Adapter Selection`
-
+
-::: info
+
Note, if you have network connection issues involving multiple docker containers, please refer to [Network Configuration Details](/en/workshop/network-details)
-:::
+
diff --git a/docs/en/deploy/platforms/qq/aiocqhttp/napcat.md b/en/usage/platforms/qq/aiocqhttp/napcat.mdx
similarity index 79%
rename from docs/en/deploy/platforms/qq/aiocqhttp/napcat.md
rename to en/usage/platforms/qq/aiocqhttp/napcat.mdx
index 74669eb95..ffbe02eff 100644
--- a/docs/en/deploy/platforms/qq/aiocqhttp/napcat.md
+++ b/en/usage/platforms/qq/aiocqhttp/napcat.mdx
@@ -1,4 +1,6 @@
-# Deploy Message Platform NapCat
+---
+title: "Deploy Message Platform NapCat"
+---
Connect through the OneBot 11 protocol, you need to select ``OneBot v11`` as the adapter.
@@ -11,12 +13,12 @@ Follow the [NapCat official documentation for installation](https://napcat.napne
Only using webui operation as an example, for other configuration methods, please check the NapCat documentation.
After logging in, you can check the logs in the console or Bash, find `[NapCat] [WebUi] WebUi Publish Panel Url: http://x.x.x.x:6099/webui?token=xxxxx `
-
+
Copy the Url to your browser or on Windows 11, press Ctrl and click the Url. After scanning the QR code to log in, you will enter the network configuration page.
Click Add Network Configuration, select WebSocket Client, click Enable, then fill in `ws://127.0.0.1:2280/ws` in the Url field and save.
-
+
## NapCat Integration
@@ -26,8 +28,8 @@ Click on Bots, then click Add
Select `OneBot v11` for `Platform/Adapter Selection`
-
+
-::: info
+
Note, if you have network connection issues involving multiple docker containers, please refer to [Network Configuration Details](/en/workshop/network-details)
-:::
+
diff --git a/en/usage/platforms/qq/official_webhook.mdx b/en/usage/platforms/qq/official_webhook.mdx
new file mode 100644
index 000000000..5991cfd18
--- /dev/null
+++ b/en/usage/platforms/qq/official_webhook.mdx
@@ -0,0 +1,82 @@
+---
+title: "Using QQ Official Bot API (Using webhook method)"
+---
+
+This article only provides the deployment of test bots. For the official launch of bots, please follow the [release process](https://q.qq.com/qqbot/#/home).
+
+
+QQ Official has issued an announcement prohibiting unauthorized access to AIGC features. Please use with caution.
+
+
+
+
+## Register QQ Bot (Test Bot)
+
+### Configure Basic Bot Information
+
+Go to the [QQ Open Platform](https://q.qq.com/#/), find `Application Management` at the bottom, click Create Bot, fill in the basic information, and then enter the bot page, as shown:
+
+
+
+The `Release Process` in the `Home` option is the step to launch the bot. Since you are deploying a test version bot, you only need to complete the `Information` and `Sandbox Configuration` sections.
+
+First fill in the information, then click on Sandbox Configuration.
+
+#### Configure Sandbox Settings
+
+Click on `Sandbox Configuration`.
+If you want to deploy in a QQ group, follow the requirements under `QQ Group ID` to select a group chat, and add users with private chat permissions in the message list configuration.
+If you want to deploy in a QQ channel, follow the requirements under `Channel ID` to select a channel ID, with bot type 0.
+
+#### Configure Development Management
+
+Click on `Development Management`.
+
+
+
+Record the `AppID`, `Token`, and `AppSecret`, and add the IP address of the server where LangBot is located to the IP whitelist.
+
+## Connect to LangBot
+
+Next, open the LangBot configuration page
+
+Click on Bots, then click Add
+
+Select `QQ Official API` for `Platform/Adapter Selection`
+
+
+
+
+## Configure Callback Address
+
+LangBot must be deployed on a server with a public IP address, and HTTPS must be successfully enabled. Please follow the documentation [Configure HTTP Reverse Proxy and SSL](/en/workshop/production/proxy-and-ssl) for configuration.
+
+
+#### Subsequent Configuration
+
+If Caddy fails to start, please read the [Caddy documentation](https://caddy2.dengxiaolong.com/docs/quick-starts/caddyfile) or join the LangBot community group for help.
+
+Here are some possible issues:
+
+- Port 443 is not open
+- The domain is not resolved to your machine
+- Caddyfile was not saved successfully
+
+### Set Management Portal Callback Address
+
+
+First **start LangBot**.
+
+Click on `Callback Configuration` in the bot management portal, check all events under `Add Event`.
+
+Go to the LangBot configuration page, enable and select the corresponding QQ bot, copy the Webhook callback address from the corresponding bot configuration page, replace the IP address and port with the domain name configured in Caddy, and enter it in the request address.
+
+As shown in the image:
+
+
+
+For example, if the domain is `testlb.com`, then enter `testlb.com/bots/xxxxxx-xxxxxx` in the request address, and click to confirm the configuration. If the callback address is saved successfully, it means the deployment is successful. If you see `Verification Failed`, please carefully check if the above configuration items are filled in correctly.
+
+## Publication Method
+
+Enter the release process in `Home` and follow the process to publish and launch the bot.
diff --git a/en/usage/platforms/readme.mdx b/en/usage/platforms/readme.mdx
new file mode 100644
index 000000000..71f6ff4ca
--- /dev/null
+++ b/en/usage/platforms/readme.mdx
@@ -0,0 +1,24 @@
+---
+title: "Configure Bots (Bots)"
+---
+
+Bots are used to receive message events from messaging platforms and call pipelines to process messages.
+
+
+
+
+| Platform | Status | Notes | Tutorial |
+| ------ | ---- | ---- | ---- |
+| Discord | ✅ | | [Tutorial](/en/usage/platforms/discord) |
+| Telegram | ✅ | | [Tutorial](/en/usage/platforms/telegram) |
+| Slack | ✅ | | [Tutorial](/en/usage/platforms/slack) |
+| LINE | ✅ | | [Tutorial](/en/usage/platforms/line) |
+| KOOK | ✅ | | [Tutorial](/en/usage/platforms/kook) |
+| Lark | ✅ | | [Tutorial](/en/usage/platforms/lark) |
+| DingTalk | ✅ | | [Tutorial](/en/usage/platforms/dingtalk) |
+| WeCom (Enterprise WeChat) | ✅ | Enterprise internal bot | [Tutorial](/en/usage/platforms/wecom/wecom) |
+| WeCom Intelligent Bot | ✅ | wecom intelligent bot | [Tutorial](/en/usage/platforms/wecom/wecombot) |
+| WeCom Customer Service | ✅ | Enterprise external bot | [Tutorial](/en/usage/platforms/wecom/wecomcs) |
+| WeChat Official Account | ✅ | WeChat public platform bot | [Tutorial](/en/usage/platforms/wxoa) |
+| OneBot v11 | ✅ | Uses a personal QQ account as a bot, requires an independent protocol client, supports OneBot v11 | [NapCat](/en/usage/platforms/qq/aiocqhttp/napcat)
[Lagrange](/en/usage/platforms/qq/aiocqhttp/lagrange)
[LiteLoaderQQNT](/en/usage/platforms/qq/aiocqhttp/llonebot) |
+| QQ Official Bot | ✅ | Connects to the QQ Open Platform bot API | [Tutorial](/en/usage/platforms/qq/official_webhook) |
diff --git a/docs/en/deploy/platforms/slack.md b/en/usage/platforms/slack.mdx
similarity index 59%
rename from docs/en/deploy/platforms/slack.md
rename to en/usage/platforms/slack.mdx
index 6a540041a..1b04ff5e6 100644
--- a/docs/en/deploy/platforms/slack.md
+++ b/en/usage/platforms/slack.mdx
@@ -1,10 +1,12 @@
-# Connect to Slack Bot
+---
+title: "Connect to Slack Bot"
+---
## Create Bot
Go to the [Slack App Platform](https://api.slack.com/apps).
-
+
Click `Create New App` in the top right corner, select `from a manifest`, select the workspace where you want to deploy the bot, select next, and choose to create the bot.
@@ -12,15 +14,15 @@ Enter the `Basic Information` option on the left, record the `signing_secret`.
Enter `OAuth & Permissions` on the left, scroll down to `Scopes`, add the following bot permissions:
-
+
-
+
-After adding the above permissions, click `Install to your workspace`, record the token starting with `xoxb-xxxxx`.
+After adding the above permissions, click `Install to your workspace`, record the token starting with `xoxb-xxxxx`.
**Note:**
-**If you didn't add all permissions at once, you'll need to reinstall the App later.**
+**If you didn't add all permissions at once, you'll need to reinstall the App later.**
Enter the `App Home` tab on the left, scroll to the bottom where you'll find `Message Tab`, turn it on and check
`Allow users to send Slash commands and messages from the messages tab`.
@@ -29,25 +31,25 @@ Enter the `App Home` tab on the left, scroll to the bottom where you'll find `Me
Enter `Event Subscriptions` on the left, turn on the switch, click `Subscribe to bot events`,
add the following permissions:
-
+
After completing all the above operations, open the LangBot Webui configuration page, add a new bot
-
+
## Start Bot
+
+Since Slack officially requires https, please configure reverse proxy first according to the documentation [Configure HTTP Reverse Proxy and SSL](/en/workshop/production/proxy-and-ssl).
+
+
After filling in the Slack configuration items, **start LangBot**.
-Then in the `Request URL` of the Event Subscriptions you just configured, fill in the deployment address of your LangBot.
+Enable and open the Slack bot configuration page on the LangBot homepage, copy the WebHook URL from it, then in the `Request URL` of the Event Subscriptions you just configured, fill in the WebHook URL.
-::: info
-Since Slack officially requires https, you can refer to the [Caddy configuration part in the QQ official bot deployment process](/en/deploy/platforms/qq/official_webhook.md#caddy-operation-process), note that the port uses the port configured in the Slack adapter.
-
-:::
After filling in all the above configuration items, click save link. If it shows a green **Verified**, it means the deployment is successful.
Otherwise, check if the above configuration items are filled in correctly.
## Effect Demonstration
-
+
diff --git a/docs/en/deploy/platforms/telegram.md b/en/usage/platforms/telegram.mdx
similarity index 54%
rename from docs/en/deploy/platforms/telegram.md
rename to en/usage/platforms/telegram.mdx
index 715b958d1..093de63ef 100644
--- a/docs/en/deploy/platforms/telegram.md
+++ b/en/usage/platforms/telegram.mdx
@@ -1,22 +1,24 @@
-# Connect to Telegram Bot
+---
+title: "Connect to Telegram Bot"
+---
## Create Bot
Go to the [Telegram Bot Creation Page](https://t.me/botfather), follow the prompts, and create a bot.
-
+
-
+
After creation, BotFather will return an API Token, please keep it safe. Next, turn off `Privacy Mode` to use it in group chats.
-
+
## Connect to LangBot
Open the LangBot Webui page, create a new bot
-
+
After filling in, start LangBot. If configured successfully, the log will show `[02-02 16:48:15.263] manager.py (68) - [INFO] : Initializing platform adapter 1: telegram`, keep LangBot running.
@@ -24,6 +26,6 @@ After filling in, start LangBot. If configured successfully, the log will show `
Now you can use the bot normally in groups or private messages.
-
+
-
+
diff --git a/en/usage/platforms/wecom/wecom.mdx b/en/usage/platforms/wecom/wecom.mdx
new file mode 100644
index 000000000..dbc0e76c8
--- /dev/null
+++ b/en/usage/platforms/wecom/wecom.mdx
@@ -0,0 +1,79 @@
+---
+title: "Deploy WeCom Bot"
+---
+
+Deploy the WeCom (Enterprise WeChat) bot to integrate with LangBot.
+
+
+- The WeCom callback address requires a public IP and domain name. We recommend you first follow [Configure HTTP Reverse Proxy](/en/workshop/production/proxy-and-ssl) to configure the LangBot callback address.
+
+
+## Record Corporate ID
+
+Open the [WeCom Admin Portal](https://work.weixin.qq.com/), click `My Enterprise`, and record the `Corporate ID` at the bottom.
+
+
+
+## Create Bot
+
+Click `App Management`, then `Build Your Own`, and click `Create App`.
+
+
+
+Fill in the basic information for the bot:
+
+
+
+View and record the bot's secret:
+
+
+
+Get it from the WeCom client as prompted.
+
+## Enable Contact Sync Permission
+
+
+- This feature has not been implemented yet as LangBot is still under development.
+- This field can be filled with any random characters, but **cannot be empty**.
+
+
+Click `Security and Management`, then `Management Tools`, `Contact Sync`; configure the trusted IP by adding the IP address of the server where LangBot is deployed.
+
+Click `View Secret` and record it - this is the contacts_secret (Contact Sync Secret).
+
+
+
+## Create Bot on LangBot
+
+On the LangBot bot page, click `Create Bot`, enter a name, select `WeCom`, and fill in the Corporate ID, Bot Secret, and Contact Sync Secret.
+
+
+
+Click submit to enter the bot edit page, then click enable. At this point you'll see the Webhook callback address—copy it:
+
+
+
+## Set Callback Address
+
+Return to the WeCom bot admin page, click `Receive Messages`, `Set API Reception`, and paste LangBot's Webhook callback address into the `URL` field:
+
+
+
+Click to randomly generate the Token and EncodingAESKey, and record them. **Keep this page open.** Go back to the LangBot WeCom bot configuration page, enter the Token and EncodingAESKey, and click Save.
+
+
+
+Return to the **page where you just filled in the Webhook callback address**, and click Save to complete the configuration. If you see **request URL failed**, please carefully double-check your configuration.
+
+## Configure Corporate Trusted IP
+
+Go back to this application's admin page, find `Enterprise Trusted IP` at the bottom, and add the IP address of your LangBot deployment server.
+
+
+
+Click Save.
+
+## FAQ
+
+Q: Can't find the bot chat in WeCom?
+A: Go to the app's detail page in WeCom admin, click `Features` > `Send Message` > `Send Message`, choose your own account, send a message, and you will see the bot in your chat window.
diff --git a/docs/en/deploy/platforms/wecom/wecombot.md b/en/usage/platforms/wecom/wecombot.mdx
similarity index 50%
rename from docs/en/deploy/platforms/wecom/wecombot.md
rename to en/usage/platforms/wecom/wecombot.mdx
index e46f62a16..abe8a4c97 100644
--- a/docs/en/deploy/platforms/wecom/wecombot.md
+++ b/en/usage/platforms/wecom/wecombot.mdx
@@ -1,21 +1,23 @@
-# Deploying WeCom Intelligent Bot
+---
+title: "Deploying WeCom Intelligent Bot"
+---
## Creating a Bot
First, log in to the [WeCom Admin Console](https://work.weixin.qq.com/wework_admin/frame#/).
-
+
Click `Security And Management` in the left sidebar, then click `Intelligent Bot` under `Management Tool`.
As shown:
-
+
-Click `Create Bot`, scroll to the bottom of the page, click `API模式创建`, and enter the page:
+Click `Create Bot`, scroll to the bottom of the page, click `Create via API Mode`, and enter the page:
-
+
Click to randomly generate Token and EncodingAESKey, then fill in the basic bot information above. **Pay attention to setting the visibility scope**.
@@ -27,12 +29,20 @@ Start the LangBot main program, select the adapter `WeCom Intelligent Bot`, and
Among them, the token is Token, the Encoding-AESKey is EncodingAESKey, and the Bot ID can be filled in as xxx (or filled in randomly, it will be changed later). After filling in, click
`Save`, and `Enable` the robot.
-
+
-Return to the WeCom robot configuration page, and fill in the robot callback URL (accepts HTTP) in `URL`, for example: **http://xxx.xxx.xx.xx:2291/callback/command**. If the creation is successful, it will jump to the details page. If the message `Request URL Failed` appears, please double-check whether the above steps have been completed one by one.
+On the LangBot homepage, enable and select the corresponding bot, click to enter the configuration page, copy the Webhook callback address
+
+
+We recommend that you first refer to [Configure HTTP Reverse Proxy](/en/workshop/production/proxy-and-ssl) to configure the LangBot callback address.
+
+
+
+
+Return to the WeCom robot configuration page and fill the copied webhook address into `URL Callback`. If the creation is successful, it will jump to the details page. If the message `Request URL Failed` appears, please double-check whether the above steps have been completed one by one.
Details page after successful creation:
-
+
Copy the `Bot ID` from the WeCom robot details page, return to the LangBot management page, change the Bot ID of the deployed intelligent robot to the copied ID, and restart the robot.
@@ -40,7 +50,7 @@ Copy the `Bot ID` from the WeCom robot details page, return to the LangBot manag
Enter WeCom, click `➕`, as shown:
-
+
Click `Company-Created`, select the created bot, and enter the chat interface.
@@ -48,4 +58,4 @@ Similarly, if you want to invite the bot to a group chat, click the add member b
## Effect Images
-
+
diff --git a/docs/en/deploy/platforms/wecom/wecomcs.md b/en/usage/platforms/wecom/wecomcs.mdx
similarity index 59%
rename from docs/en/deploy/platforms/wecom/wecomcs.md
rename to en/usage/platforms/wecom/wecomcs.mdx
index 8b95cd95a..55a3f3911 100644
--- a/docs/en/deploy/platforms/wecom/wecomcs.md
+++ b/en/usage/platforms/wecom/wecomcs.mdx
@@ -1,22 +1,22 @@
-# Deploy WeCom Customer Service
+---
+title: "Deploy WeCom Customer Service"
+---
-:::info
-
-This article details the process of deploying LangBot to a WeCom customer service account, which allows conversations between the customer service account and regular WeChat. If you only need to use it within WeCom, please refer to [WeCom Internal Application Implementation](wecom.md).
+
**Deploying a WeCom customer service account requires enterprise qualifications**. Please check the [WeCom Customer Service Integration Guide](https://developer.work.weixin.qq.com/document/path/94638) and provide the corresponding enterprise qualification certificates according to this document.
-:::
+
## Effect Demonstration
-
+
## Connect to LangBot
-
+
-The subsequent configuration method and configuration items are the same as [WeCom Internal Application](wecom.md), except that `contacts_secret` is not required.
+The subsequent configuration method and configuration items are the same as [WeCom Internal Application](wecom), except that `contacts_secret` is not required.
## Notes
diff --git a/docs/en/deploy/platforms/wxoa.md b/en/usage/platforms/wxoa.mdx
similarity index 69%
rename from docs/en/deploy/platforms/wxoa.md
rename to en/usage/platforms/wxoa.mdx
index 5564e4405..da31821b3 100644
--- a/docs/en/deploy/platforms/wxoa.md
+++ b/en/usage/platforms/wxoa.mdx
@@ -1,4 +1,6 @@
-# Deploy WeChat Official Account Bot
+---
+title: "Deploy WeChat Official Account Bot"
+---
Deploy WeChat Official Account bot to connect with LangBot.
@@ -20,7 +22,7 @@ For more complex functionality, please contact the **LangBot team** for customiz
Enter the [WeChat Official Account Platform](https://mp.weixin.qq.com/), if you already have an official account, scan the QR code to log in and enter the console.
If you haven't registered an official account before, click Register Now, select `Official Account`, fill in the information in sequence, and enter the console. The console looks like this:
-
+
## Set Callback Address
@@ -28,15 +30,13 @@ If you haven't registered an official account before, click Register Now, select
### Get Configuration Items
Click `Settings and Development`, `Development Interface Management`, and you'll see a page like this:
-
+
Record the `Developer ID (AppID)`, `Developer Password (AppSecret)`, and add the server where LangBot is deployed to the `IP Whitelist`.
-### Set Up Reverse Proxy
+### Set Up Reverse Proxy for LangBot
-Since WeChat Official Accounts only support http (port 80) and https (port 443), this article assumes that port 80 is already occupied and uses port 443 to reverse proxy to LangBot.
-
-The specific reverse proxy configuration tutorial is the same as the [QQ Official Bot Reverse Proxy Configuration](/en/deploy/platforms/qq/official_webhook.md#caddy-operation-process), except that `reverse_proxy 127.0.0.1:2284` is changed to `reverse_proxy 127.0.0.1:2287`.
+Since WeChat Official Accounts only support http (port 80) and https (port 443), please follow the documentation [Configure HTTP Reverse Proxy and SSL](/en/workshop/production/proxy-and-ssl) for configuration.
### Save Callback Address
@@ -44,12 +44,10 @@ Click Set Server Configuration, enter `Token`, `EncodingAESKey`, and change the
At this point, open the LangBot Webui page, create a new bot, and fill in the four configuration items obtained (AppID, AppSecret, token, EncodingAESKey)
-
+
In the configuration items, the `Mode` option is the selected integration mode, where the default is `drop`. `drop` is the traditional message exchange mode, and `passive` is the "send any text to get reply" mode.
The `LoadingMessage` option is the loading message, which can be changed to other content, and is only valid when the mode is `passive`. Set `enable` to `true`.
-After filling in successfully, **start LangBot**.
-
-Fill in the URL as `https://your_domain_name/callback/command`, where `your_domain_name` is the domain name filled in Caddy. Click Save. If it can be saved successfully, it means the deployment is successful. If you see **System error, please try again later**, please recheck whether the above configuration content is filled in correctly.
+After filling in successfully, on the LangBot homepage, enable and select the corresponding bot, click to enter the configuration page, copy the Webhook callback address, return to the WeChat Official Account bot configuration page, and fill it into `URL`. For example, if the URL is filled as `https://your_domain_name/bots/xxxxx`, where `your_domain_name` is the domain name filled in Caddy. Click Save. If it can be saved successfully, it means the deployment is successful. If you see **System error, please try again later**, please recheck whether the above configuration content is filled in correctly.
diff --git a/en/workshop/302ai-integration.mdx b/en/workshop/302ai-integration.mdx
new file mode 100644
index 000000000..747bc1473
--- /dev/null
+++ b/en/workshop/302ai-integration.mdx
@@ -0,0 +1,7 @@
+---
+title: "Integrating Models with 302 AI"
+---
+
+Open the WebUI page, and select [302 AI](https://share.302.ai/SuTG99) when adding a model.
+
+
diff --git a/docs/en/workshop/impl-platform-adapter.md b/en/workshop/impl-platform-adapter.mdx
similarity index 94%
rename from docs/en/workshop/impl-platform-adapter.md
rename to en/workshop/impl-platform-adapter.mdx
index 9983ea85c..601571cf9 100644
--- a/docs/en/workshop/impl-platform-adapter.md
+++ b/en/workshop/impl-platform-adapter.mdx
@@ -1,4 +1,6 @@
-# Implementing a Message Platform Adapter
+---
+title: "Implementing a Message Platform Adapter"
+---
This article will use the `aiocqhttp` adapter as an example to explain how to implement a new message platform adapter for LangBot, in order to integrate new message platform protocols such as WhatsApp and Discord.
@@ -40,7 +42,7 @@ The main work of a message platform adapter is to `receive events from the messa
The following diagram shows the processing patterns for two scenarios: message platform protocol without SDK and with mature SDK. In the first case, we need to implement connection management and network format data conversion to LB message Python objects according to the message platform protocol documentation. In the second case, the message platform has a mature SDK, we only need to create connections according to the SDK documentation, register event listeners, and implement message converters.
-
+
In the `pkg.platform.sources.aiocqhttp` file, we can see not only `AiocqhttpAdapter`, but also `class AiocqhttpMessageConverter(adapter.MessageConverter):` and `class AiocqhttpEventConverter(adapter.EventConverter):`.
diff --git a/docs/en/workshop/mcp-details.md b/en/workshop/mcp-details.mdx
similarity index 83%
rename from docs/en/workshop/mcp-details.md
rename to en/workshop/mcp-details.mdx
index 872085d70..cac1e49bc 100644
--- a/docs/en/workshop/mcp-details.md
+++ b/en/workshop/mcp-details.mdx
@@ -1,4 +1,6 @@
-# MCP Ecosystem Details
+---
+title: "MCP Ecosystem Details"
+---
The [MCP Protocol](https://modelcontextprotocol.io/) is a protocol that describes the interaction between applications and LLMs, and has been adopted by various products. LangBot can act as an MCP Client to connect to MCP Servers, providing extensive tools for LLMs to use during conversations with users.
@@ -10,16 +12,14 @@ There are two types of MCP Servers in the market:
- Executable files implemented in Node or Python, communicating with LangBot through `stdio` (standard input/output)
- Web services based on HTTP protocol, communicating with LangBot through HTTP protocol
-:::info
-
-- You can check existing MCP Servers in the [MCP Server List](https://github.com/punkpeye/awesome-mcp-servers).
+
- For online hosted MCP Servers, you can find them at [Composio MCP](https://mcp.composio.dev/).
- To write your own MCP Server, you can refer to the [MCP Protocol Documentation](https://modelcontextprotocol.io/quickstart/server) and [MCP Server Examples](https://modelcontextprotocol.io/examples).
-:::
+
## Configuring MCP Server
Please refer to the [System Settings Documentation](/en/deploy/settings.html)
-After configuration, you can use the `!func` command in chat to view registered MCP tools. When chatting with models that support Function Calling, LangBot will automatically call MCP tools.
\ No newline at end of file
+After configuration, you can use the `!func` command in chat to view registered MCP tools. When chatting with models that support Function Calling, LangBot will automatically call MCP tools.
diff --git a/docs/en/workshop/network-details.md b/en/workshop/network-details.mdx
similarity index 88%
rename from docs/en/workshop/network-details.md
rename to en/workshop/network-details.mdx
index 790160f92..208865568 100644
--- a/docs/en/workshop/network-details.md
+++ b/en/workshop/network-details.mdx
@@ -1,15 +1,16 @@
-# Network Configuration Details
+---
+title: "Network Configuration Details"
+---
-::: info
-Some messaging platforms (such as personal QQ accounts) require an independent protocol endpoint to process messages. If you are using such messaging platforms, please refer to the following network configuration.
+
At the same time, if your LangBot instance needs to connect to other services running in containers (such as Ollama), you can also refer to the following configuration, replacing `messaging platform` with `the service you want to connect to`.
-:::
+
LangBot and some messaging platforms can both be deployed using Docker. Below are network configuration details for four different scenarios.
-:::info Table of Contents
+
[[toc]]
-:::
+
## Both LangBot and Messaging Platform Running in Docker Containers
@@ -55,8 +56,8 @@ Configure the messaging platform and LangBot settings according to the documenta
## Only Messaging Platform Running in Docker Container (Not Recommended)
-:::warning
+
Only supports Linux, or other systems that support host mode docker networking.
-:::
+
Currently, LangBot's aiocqhttp adapter only supports reverse WebSocket connections. When the messaging platform runs in a Docker container while LangBot runs directly on the host machine, the messaging platform must act as a client connecting to LangBot. In this case, you can only set the messaging platform's network to `host` mode, and then set its WS connection address to 127.0.0.1, with the port corresponding to the port enabled by LangBot's aiocqhttp adapter.
diff --git a/docs/en/workshop/newapi-integration.md b/en/workshop/newapi-integration.mdx
similarity index 90%
rename from docs/en/workshop/newapi-integration.md
rename to en/workshop/newapi-integration.mdx
index 506b68508..f3c5d1595 100644
--- a/docs/en/workshop/newapi-integration.md
+++ b/en/workshop/newapi-integration.mdx
@@ -1,4 +1,6 @@
-# Integrating LangBot with New API
+---
+title: "Integrating LangBot with New API"
+---
New API is a next-generation large model gateway and AI asset management system, designed to address issues such as fragmented access to multiple AI service providers, difficulty in cost control, and insufficient service stability. Its core advantages are focused on three aspects:
@@ -35,10 +37,10 @@ After deployment, open `http://server-IP:3000` to configure New API.
- Request URL: Enter `http://server-IP:3000/v1`
- API Key: Enter the token created in New API
-
+
2. **Select the newly configured model in the pipeline**
-
+
-3. Now you can use the models in New API.
\ No newline at end of file
+3. Now you can use the models in New API.
diff --git a/docs/en/workshop/ppio-integration.md b/en/workshop/ppio-integration.mdx
similarity index 57%
rename from docs/en/workshop/ppio-integration.md
rename to en/workshop/ppio-integration.mdx
index 0f1094732..bc451f632 100644
--- a/docs/en/workshop/ppio-integration.md
+++ b/en/workshop/ppio-integration.mdx
@@ -1,5 +1,7 @@
-# Integrating Models with PPIO Cloud API
+---
+title: "Integrating Models with PPIO Cloud API"
+---
Open the WebUI page, and select [PPIO Cloud](https://ppio.cn/user/register?from=ppinfra&invited_by=QJKFYD&utm_source=github_langbot) when adding a model.
-
\ No newline at end of file
+
diff --git a/en/workshop/production/proxy-and-ssl.mdx b/en/workshop/production/proxy-and-ssl.mdx
new file mode 100644
index 000000000..4fc11f39f
--- /dev/null
+++ b/en/workshop/production/proxy-and-ssl.mdx
@@ -0,0 +1,127 @@
+---
+title: "Configure HTTP Reverse Proxy or Access LangBot Through Gateway"
+---
+
+LangBot does not have built-in SSL support for HTTPS services. If you need to resolve a domain name to a LangBot instance, or need to use HTTPS to access LangBot WebUI and webhook addresses for various bots, please refer to this document to deploy NGINX or Caddy to implement HTTP reverse proxy.
+
+You need to deploy LangBot on a host with a public IP address, purchase a domain name, and resolve the domain name to the host's public IP.
+
+
+If you need to use bots that require Webhook callback addresses such as QQ Official Bot, WeChat Official Account, WeCom, Slack, LINE, etc., you must configure HTTP reverse proxy according to this document.
+
+
+## Caddy
+
+Caddy is a modern HTTP server that supports automatic HTTPS certificate application and renewal, reverse proxy, and automatic DNS resolution configuration.
+
+[Caddy Installation Documentation](https://caddy2.dengxiaolong.com/docs/install). Select the installation steps corresponding to your operating system and proceed with the installation.
+
+### Configure Caddyfile
+
+This document assumes using the Ubuntu system to deploy LangBot. In the system, the default location of Caddyfile is `/etc/caddy/Caddyfile`.
+Use vim or nano to edit Caddyfile, and fill in the Caddyfile as follows:
+
+```json
+your.domain.com {
+ reverse_proxy 127.0.0.1:5300
+}
+```
+
+
+If your Caddy and LangBot are deployed using containers, please check [Container Network Configuration Details](/en/workshop/network-details)
+
+
+Now, you can access LangBot WebUI through your browser at `https://your.domain.com`.
+
+### Set Bot Callback Address Prefix
+
+If you need to use bots that require Webhook callback addresses such as QQ Official Bot, WeChat Official Account, WeCom, Slack, LINE, etc., please set `api.webhook_prefix` in the data/config.yaml file to your domain name. For example: `https://your.domain.com`.
+
+After that, you will see the correctly displayed callback address on the bot management page.
+
+## NGINX
+
+NGINX is also a commonly used HTTP server and reverse proxy tool that can be used to implement HTTPS access to LangBot.
+
+### Install NGINX
+
+On Ubuntu, you can install NGINX with the following commands:
+
+```bash
+sudo apt update
+sudo apt install nginx
+```
+
+### Prepare SSL Certificate
+
+You can use [Let's Encrypt](https://letsencrypt.org/) to apply for a free SSL certificate. It is recommended to use the [Certbot](https://certbot.eff.org/) tool to obtain a certificate:
+
+```bash
+sudo apt install certbot python3-certbot-nginx
+sudo certbot --nginx
+```
+
+Follow the prompts to enter your domain name, and certificate application and NGINX configuration will be completed automatically. Please refer to the following content to complete the NGINX configuration.
+
+### Configure NGINX Reverse Proxy
+
+LangBot's pipeline debugging feature requires using WebSocket connections, so NGINX needs to be configured to support WebSocket.
+
+Edit the NGINX configuration file `/etc/nginx/sites-available/langbot` (you can use vim or nano editor):
+
+```nginx
+# WebSocket connection upgrade mapping (place outside server block)
+map $http_upgrade $connection_upgrade {
+ default upgrade;
+ '' close;
+}
+
+server {
+ listen 80;
+ server_name your.domain.com;
+ # Redirect HTTP traffic to HTTPS
+ return 301 https://$host$request_uri;
+}
+
+server {
+ listen 443 ssl;
+ server_name your.domain.com;
+
+ ssl_certificate /etc/letsencrypt/live/your.domain.com/fullchain.pem;
+ ssl_certificate_key /etc/letsencrypt/live/your.domain.com/privkey.pem;
+
+ ssl_protocols TLSv1.2 TLSv1.3;
+ ssl_ciphers HIGH:!aNULL:!MD5;
+
+ # Reverse proxy to LangBot instance
+ location / {
+ proxy_pass http://127.0.0.1:5300;
+ proxy_set_header Host $host;
+ proxy_set_header X-Real-IP $remote_addr;
+ proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
+ proxy_set_header X-Forwarded-Proto $scheme;
+
+ # WebSocket support
+ proxy_http_version 1.1;
+ proxy_set_header Upgrade $http_upgrade;
+ proxy_set_header Connection $connection_upgrade;
+ proxy_read_timeout 86400;
+ }
+}
+```
+
+Replace `your.domain.com` with your actual domain name.
+
+Enable this configuration and restart NGINX:
+
+```bash
+sudo ln -s /etc/nginx/sites-available/langbot /etc/nginx/sites-enabled/langbot
+sudo nginx -t
+sudo systemctl reload nginx
+```
+
+### Set Bot Callback Address Prefix
+
+Similarly, set `api.webhook_prefix` to `https://your.domain.com` in the `data/config.yaml` configuration file, so that the bot Webhook callback address will be correct.
+
+After completing the above configuration, you can securely access LangBot WebUI and bot Webhook services through `https://your.domain.com`.
diff --git a/docs/public/favicon.ico b/favicon.ico
similarity index 100%
rename from docs/public/favicon.ico
rename to favicon.ico
diff --git a/google7804ffd730579dcd.html b/google7804ffd730579dcd.html
new file mode 100644
index 000000000..30c9062cb
--- /dev/null
+++ b/google7804ffd730579dcd.html
@@ -0,0 +1 @@
+google-site-verification: google7804ffd730579dcd.html
\ No newline at end of file
diff --git a/docs/assets/image/zh/api/copy_api_key.png b/images/zh/api/copy_api_key.png
similarity index 100%
rename from docs/assets/image/zh/api/copy_api_key.png
rename to images/zh/api/copy_api_key.png
diff --git a/docs/assets/image/zh/api/create_api_key.png b/images/zh/api/create_api_key.png
similarity index 100%
rename from docs/assets/image/zh/api/create_api_key.png
rename to images/zh/api/create_api_key.png
diff --git a/docs/assets/image/zh/deploy/bots/arch.png b/images/zh/deploy/bots/arch.png
similarity index 100%
rename from docs/assets/image/zh/deploy/bots/arch.png
rename to images/zh/deploy/bots/arch.png
diff --git a/docs/assets/image/zh/deploy/bots/dingtalk/connect_to_langbot.png b/images/zh/deploy/bots/dingtalk/connect_to_langbot.png
similarity index 100%
rename from docs/assets/image/zh/deploy/bots/dingtalk/connect_to_langbot.png
rename to images/zh/deploy/bots/dingtalk/connect_to_langbot.png
diff --git a/docs/assets/image/zh/deploy/bots/dingtalk/dingtalk1.png b/images/zh/deploy/bots/dingtalk/dingtalk1.png
similarity index 100%
rename from docs/assets/image/zh/deploy/bots/dingtalk/dingtalk1.png
rename to images/zh/deploy/bots/dingtalk/dingtalk1.png
diff --git a/docs/assets/image/zh/deploy/bots/dingtalk/dingtalk10.png b/images/zh/deploy/bots/dingtalk/dingtalk10.png
similarity index 100%
rename from docs/assets/image/zh/deploy/bots/dingtalk/dingtalk10.png
rename to images/zh/deploy/bots/dingtalk/dingtalk10.png
diff --git a/docs/assets/image/zh/deploy/bots/dingtalk/dingtalk11.png b/images/zh/deploy/bots/dingtalk/dingtalk11.png
similarity index 100%
rename from docs/assets/image/zh/deploy/bots/dingtalk/dingtalk11.png
rename to images/zh/deploy/bots/dingtalk/dingtalk11.png
diff --git a/docs/assets/image/zh/deploy/bots/dingtalk/dingtalk12.png b/images/zh/deploy/bots/dingtalk/dingtalk12.png
similarity index 100%
rename from docs/assets/image/zh/deploy/bots/dingtalk/dingtalk12.png
rename to images/zh/deploy/bots/dingtalk/dingtalk12.png
diff --git a/docs/assets/image/zh/deploy/bots/dingtalk/dingtalk13.png b/images/zh/deploy/bots/dingtalk/dingtalk13.png
similarity index 100%
rename from docs/assets/image/zh/deploy/bots/dingtalk/dingtalk13.png
rename to images/zh/deploy/bots/dingtalk/dingtalk13.png
diff --git a/docs/assets/image/zh/deploy/bots/dingtalk/dingtalk14.png b/images/zh/deploy/bots/dingtalk/dingtalk14.png
similarity index 100%
rename from docs/assets/image/zh/deploy/bots/dingtalk/dingtalk14.png
rename to images/zh/deploy/bots/dingtalk/dingtalk14.png
diff --git a/docs/assets/image/zh/deploy/bots/dingtalk/dingtalk15.png b/images/zh/deploy/bots/dingtalk/dingtalk15.png
similarity index 100%
rename from docs/assets/image/zh/deploy/bots/dingtalk/dingtalk15.png
rename to images/zh/deploy/bots/dingtalk/dingtalk15.png
diff --git a/docs/assets/image/zh/deploy/bots/dingtalk/dingtalk2.png b/images/zh/deploy/bots/dingtalk/dingtalk2.png
similarity index 100%
rename from docs/assets/image/zh/deploy/bots/dingtalk/dingtalk2.png
rename to images/zh/deploy/bots/dingtalk/dingtalk2.png
diff --git a/docs/assets/image/zh/deploy/bots/dingtalk/dingtalk3.png b/images/zh/deploy/bots/dingtalk/dingtalk3.png
similarity index 100%
rename from docs/assets/image/zh/deploy/bots/dingtalk/dingtalk3.png
rename to images/zh/deploy/bots/dingtalk/dingtalk3.png
diff --git a/docs/assets/image/zh/deploy/bots/dingtalk/dingtalk4.png b/images/zh/deploy/bots/dingtalk/dingtalk4.png
similarity index 100%
rename from docs/assets/image/zh/deploy/bots/dingtalk/dingtalk4.png
rename to images/zh/deploy/bots/dingtalk/dingtalk4.png
diff --git a/docs/assets/image/zh/deploy/bots/dingtalk/dingtalk5.png b/images/zh/deploy/bots/dingtalk/dingtalk5.png
similarity index 100%
rename from docs/assets/image/zh/deploy/bots/dingtalk/dingtalk5.png
rename to images/zh/deploy/bots/dingtalk/dingtalk5.png
diff --git a/docs/assets/image/zh/deploy/bots/dingtalk/dingtalk6.png b/images/zh/deploy/bots/dingtalk/dingtalk6.png
similarity index 100%
rename from docs/assets/image/zh/deploy/bots/dingtalk/dingtalk6.png
rename to images/zh/deploy/bots/dingtalk/dingtalk6.png
diff --git a/docs/assets/image/zh/deploy/bots/dingtalk/dingtalk7.png b/images/zh/deploy/bots/dingtalk/dingtalk7.png
similarity index 100%
rename from docs/assets/image/zh/deploy/bots/dingtalk/dingtalk7.png
rename to images/zh/deploy/bots/dingtalk/dingtalk7.png
diff --git a/docs/assets/image/zh/deploy/bots/dingtalk/dingtalk8.png b/images/zh/deploy/bots/dingtalk/dingtalk8.png
similarity index 100%
rename from docs/assets/image/zh/deploy/bots/dingtalk/dingtalk8.png
rename to images/zh/deploy/bots/dingtalk/dingtalk8.png
diff --git a/docs/assets/image/zh/deploy/bots/dingtalk/dingtalk9.png b/images/zh/deploy/bots/dingtalk/dingtalk9.png
similarity index 100%
rename from docs/assets/image/zh/deploy/bots/dingtalk/dingtalk9.png
rename to images/zh/deploy/bots/dingtalk/dingtalk9.png
diff --git a/docs/assets/image/zh/deploy/bots/discord/connect_to_langbot.png b/images/zh/deploy/bots/discord/connect_to_langbot.png
similarity index 100%
rename from docs/assets/image/zh/deploy/bots/discord/connect_to_langbot.png
rename to images/zh/deploy/bots/discord/connect_to_langbot.png
diff --git a/docs/assets/image/zh/deploy/bots/discord/discord_01.png b/images/zh/deploy/bots/discord/discord_01.png
similarity index 100%
rename from docs/assets/image/zh/deploy/bots/discord/discord_01.png
rename to images/zh/deploy/bots/discord/discord_01.png
diff --git a/docs/assets/image/zh/deploy/bots/discord/discord_02.png b/images/zh/deploy/bots/discord/discord_02.png
similarity index 100%
rename from docs/assets/image/zh/deploy/bots/discord/discord_02.png
rename to images/zh/deploy/bots/discord/discord_02.png
diff --git a/docs/assets/image/zh/deploy/bots/discord/discord_03.png b/images/zh/deploy/bots/discord/discord_03.png
similarity index 100%
rename from docs/assets/image/zh/deploy/bots/discord/discord_03.png
rename to images/zh/deploy/bots/discord/discord_03.png
diff --git a/docs/assets/image/zh/deploy/bots/discord/discord_04.png b/images/zh/deploy/bots/discord/discord_04.png
similarity index 100%
rename from docs/assets/image/zh/deploy/bots/discord/discord_04.png
rename to images/zh/deploy/bots/discord/discord_04.png
diff --git a/docs/assets/image/zh/deploy/bots/discord/discord_05.png b/images/zh/deploy/bots/discord/discord_05.png
similarity index 100%
rename from docs/assets/image/zh/deploy/bots/discord/discord_05.png
rename to images/zh/deploy/bots/discord/discord_05.png
diff --git a/docs/assets/image/zh/deploy/bots/discord/discord_06.png b/images/zh/deploy/bots/discord/discord_06.png
similarity index 100%
rename from docs/assets/image/zh/deploy/bots/discord/discord_06.png
rename to images/zh/deploy/bots/discord/discord_06.png
diff --git a/docs/assets/image/zh/deploy/bots/discord/discord_07.png b/images/zh/deploy/bots/discord/discord_07.png
similarity index 100%
rename from docs/assets/image/zh/deploy/bots/discord/discord_07.png
rename to images/zh/deploy/bots/discord/discord_07.png
diff --git a/docs/assets/image/zh/deploy/bots/discord/discord_08.png b/images/zh/deploy/bots/discord/discord_08.png
similarity index 100%
rename from docs/assets/image/zh/deploy/bots/discord/discord_08.png
rename to images/zh/deploy/bots/discord/discord_08.png
diff --git a/docs/assets/image/zh/deploy/bots/discord/discord_09.png b/images/zh/deploy/bots/discord/discord_09.png
similarity index 100%
rename from docs/assets/image/zh/deploy/bots/discord/discord_09.png
rename to images/zh/deploy/bots/discord/discord_09.png
diff --git a/docs/assets/image/zh/deploy/bots/gewechat/gewechat_01.png b/images/zh/deploy/bots/gewechat/gewechat_01.png
similarity index 100%
rename from docs/assets/image/zh/deploy/bots/gewechat/gewechat_01.png
rename to images/zh/deploy/bots/gewechat/gewechat_01.png
diff --git a/docs/assets/image/zh/deploy/bots/gewechat/gewechat_02.png b/images/zh/deploy/bots/gewechat/gewechat_02.png
similarity index 100%
rename from docs/assets/image/zh/deploy/bots/gewechat/gewechat_02.png
rename to images/zh/deploy/bots/gewechat/gewechat_02.png
diff --git a/images/zh/deploy/bots/kook/01-dashboard.png b/images/zh/deploy/bots/kook/01-dashboard.png
new file mode 100644
index 000000000..4de3f73f2
Binary files /dev/null and b/images/zh/deploy/bots/kook/01-dashboard.png differ
diff --git a/images/zh/deploy/bots/kook/02-create-app.png b/images/zh/deploy/bots/kook/02-create-app.png
new file mode 100644
index 000000000..42da78ed3
Binary files /dev/null and b/images/zh/deploy/bots/kook/02-create-app.png differ
diff --git a/images/zh/deploy/bots/kook/03-app-created.png b/images/zh/deploy/bots/kook/03-app-created.png
new file mode 100644
index 000000000..f6f7a316a
Binary files /dev/null and b/images/zh/deploy/bots/kook/03-app-created.png differ
diff --git a/images/zh/deploy/bots/kook/04-app-overview.png b/images/zh/deploy/bots/kook/04-app-overview.png
new file mode 100644
index 000000000..49e205ecd
Binary files /dev/null and b/images/zh/deploy/bots/kook/04-app-overview.png differ
diff --git a/images/zh/deploy/bots/kook/05-bot-token.png b/images/zh/deploy/bots/kook/05-bot-token.png
new file mode 100644
index 000000000..de4cc124c
Binary files /dev/null and b/images/zh/deploy/bots/kook/05-bot-token.png differ
diff --git a/images/zh/deploy/bots/kook/06-invite-link.png b/images/zh/deploy/bots/kook/06-invite-link.png
new file mode 100644
index 000000000..dd85a364e
Binary files /dev/null and b/images/zh/deploy/bots/kook/06-invite-link.png differ
diff --git a/images/zh/deploy/bots/kook/07-message-filters.png b/images/zh/deploy/bots/kook/07-message-filters.png
new file mode 100644
index 000000000..db25aadae
Binary files /dev/null and b/images/zh/deploy/bots/kook/07-message-filters.png differ
diff --git a/images/zh/deploy/bots/kook/08-permissions-enabled.png b/images/zh/deploy/bots/kook/08-permissions-enabled.png
new file mode 100644
index 000000000..eb1691b80
Binary files /dev/null and b/images/zh/deploy/bots/kook/08-permissions-enabled.png differ
diff --git a/images/zh/deploy/bots/kook/09-langbot-bots.png b/images/zh/deploy/bots/kook/09-langbot-bots.png
new file mode 100644
index 000000000..c6d033acb
Binary files /dev/null and b/images/zh/deploy/bots/kook/09-langbot-bots.png differ
diff --git a/images/zh/deploy/bots/kook/10-bot-config.png b/images/zh/deploy/bots/kook/10-bot-config.png
new file mode 100644
index 000000000..324d7711a
Binary files /dev/null and b/images/zh/deploy/bots/kook/10-bot-config.png differ
diff --git a/images/zh/deploy/bots/kook/11-bot-created.png b/images/zh/deploy/bots/kook/11-bot-created.png
new file mode 100644
index 000000000..ce826cdd9
Binary files /dev/null and b/images/zh/deploy/bots/kook/11-bot-created.png differ
diff --git a/images/zh/deploy/bots/kook/12-bot-enabled.png b/images/zh/deploy/bots/kook/12-bot-enabled.png
new file mode 100644
index 000000000..084e8a968
Binary files /dev/null and b/images/zh/deploy/bots/kook/12-bot-enabled.png differ
diff --git a/docs/assets/image/zh/deploy/bots/lark/connect_to_langbot.png b/images/zh/deploy/bots/lark/connect_to_langbot.png
similarity index 100%
rename from docs/assets/image/zh/deploy/bots/lark/connect_to_langbot.png
rename to images/zh/deploy/bots/lark/connect_to_langbot.png
diff --git a/docs/assets/image/zh/deploy/bots/lark/connect_to_langbot01.png b/images/zh/deploy/bots/lark/connect_to_langbot01.png
similarity index 100%
rename from docs/assets/image/zh/deploy/bots/lark/connect_to_langbot01.png
rename to images/zh/deploy/bots/lark/connect_to_langbot01.png
diff --git a/docs/assets/image/zh/deploy/bots/lark/lark_01.png b/images/zh/deploy/bots/lark/lark_01.png
similarity index 100%
rename from docs/assets/image/zh/deploy/bots/lark/lark_01.png
rename to images/zh/deploy/bots/lark/lark_01.png
diff --git a/docs/assets/image/zh/deploy/bots/lark/lark_02.png b/images/zh/deploy/bots/lark/lark_02.png
similarity index 100%
rename from docs/assets/image/zh/deploy/bots/lark/lark_02.png
rename to images/zh/deploy/bots/lark/lark_02.png
diff --git a/docs/assets/image/zh/deploy/bots/lark/lark_03.png b/images/zh/deploy/bots/lark/lark_03.png
similarity index 100%
rename from docs/assets/image/zh/deploy/bots/lark/lark_03.png
rename to images/zh/deploy/bots/lark/lark_03.png
diff --git a/images/zh/deploy/bots/lark/lark_04.png b/images/zh/deploy/bots/lark/lark_04.png
new file mode 100644
index 000000000..766797310
Binary files /dev/null and b/images/zh/deploy/bots/lark/lark_04.png differ
diff --git a/docs/assets/image/zh/deploy/bots/lark/lark_05.png b/images/zh/deploy/bots/lark/lark_05.png
similarity index 100%
rename from docs/assets/image/zh/deploy/bots/lark/lark_05.png
rename to images/zh/deploy/bots/lark/lark_05.png
diff --git a/docs/assets/image/zh/deploy/bots/lark/lark_06.png b/images/zh/deploy/bots/lark/lark_06.png
similarity index 100%
rename from docs/assets/image/zh/deploy/bots/lark/lark_06.png
rename to images/zh/deploy/bots/lark/lark_06.png
diff --git a/docs/assets/image/zh/deploy/bots/lark/lark_07.png b/images/zh/deploy/bots/lark/lark_07.png
similarity index 100%
rename from docs/assets/image/zh/deploy/bots/lark/lark_07.png
rename to images/zh/deploy/bots/lark/lark_07.png
diff --git a/docs/assets/image/zh/deploy/bots/lark/lark_08.png b/images/zh/deploy/bots/lark/lark_08.png
similarity index 100%
rename from docs/assets/image/zh/deploy/bots/lark/lark_08.png
rename to images/zh/deploy/bots/lark/lark_08.png
diff --git a/docs/assets/image/zh/deploy/bots/lark/lark_09.png b/images/zh/deploy/bots/lark/lark_09.png
similarity index 100%
rename from docs/assets/image/zh/deploy/bots/lark/lark_09.png
rename to images/zh/deploy/bots/lark/lark_09.png
diff --git a/docs/assets/image/zh/deploy/bots/lark/lark_10.png b/images/zh/deploy/bots/lark/lark_10.png
similarity index 100%
rename from docs/assets/image/zh/deploy/bots/lark/lark_10.png
rename to images/zh/deploy/bots/lark/lark_10.png
diff --git a/docs/assets/image/zh/deploy/bots/lark/lark_11.png b/images/zh/deploy/bots/lark/lark_11.png
similarity index 100%
rename from docs/assets/image/zh/deploy/bots/lark/lark_11.png
rename to images/zh/deploy/bots/lark/lark_11.png
diff --git a/docs/assets/image/zh/deploy/bots/lark/lark_12.png b/images/zh/deploy/bots/lark/lark_12.png
similarity index 100%
rename from docs/assets/image/zh/deploy/bots/lark/lark_12.png
rename to images/zh/deploy/bots/lark/lark_12.png
diff --git a/docs/assets/image/zh/deploy/bots/lark/lark_13.png b/images/zh/deploy/bots/lark/lark_13.png
similarity index 100%
rename from docs/assets/image/zh/deploy/bots/lark/lark_13.png
rename to images/zh/deploy/bots/lark/lark_13.png
diff --git a/images/zh/deploy/bots/lark/lark_14.png b/images/zh/deploy/bots/lark/lark_14.png
new file mode 100644
index 000000000..04beca4ad
Binary files /dev/null and b/images/zh/deploy/bots/lark/lark_14.png differ
diff --git a/docs/assets/image/zh/deploy/bots/lark/lark_15.png b/images/zh/deploy/bots/lark/lark_15.png
similarity index 100%
rename from docs/assets/image/zh/deploy/bots/lark/lark_15.png
rename to images/zh/deploy/bots/lark/lark_15.png
diff --git a/docs/assets/image/zh/deploy/bots/line/line01.png b/images/zh/deploy/bots/line/line01.png
similarity index 100%
rename from docs/assets/image/zh/deploy/bots/line/line01.png
rename to images/zh/deploy/bots/line/line01.png
diff --git a/docs/assets/image/zh/deploy/bots/line/line02.png b/images/zh/deploy/bots/line/line02.png
similarity index 100%
rename from docs/assets/image/zh/deploy/bots/line/line02.png
rename to images/zh/deploy/bots/line/line02.png
diff --git a/docs/assets/image/zh/deploy/bots/line/line03.png b/images/zh/deploy/bots/line/line03.png
similarity index 100%
rename from docs/assets/image/zh/deploy/bots/line/line03.png
rename to images/zh/deploy/bots/line/line03.png
diff --git a/docs/assets/image/zh/deploy/bots/line/line04.png b/images/zh/deploy/bots/line/line04.png
similarity index 100%
rename from docs/assets/image/zh/deploy/bots/line/line04.png
rename to images/zh/deploy/bots/line/line04.png
diff --git a/docs/assets/image/zh/deploy/bots/line/line05.png b/images/zh/deploy/bots/line/line05.png
similarity index 100%
rename from docs/assets/image/zh/deploy/bots/line/line05.png
rename to images/zh/deploy/bots/line/line05.png
diff --git a/docs/assets/image/zh/deploy/bots/line/line06.png b/images/zh/deploy/bots/line/line06.png
similarity index 100%
rename from docs/assets/image/zh/deploy/bots/line/line06.png
rename to images/zh/deploy/bots/line/line06.png
diff --git a/docs/assets/image/zh/deploy/bots/line/line07.png b/images/zh/deploy/bots/line/line07.png
similarity index 100%
rename from docs/assets/image/zh/deploy/bots/line/line07.png
rename to images/zh/deploy/bots/line/line07.png
diff --git a/docs/assets/image/zh/deploy/bots/line/line08.png b/images/zh/deploy/bots/line/line08.png
similarity index 100%
rename from docs/assets/image/zh/deploy/bots/line/line08.png
rename to images/zh/deploy/bots/line/line08.png
diff --git a/docs/assets/image/zh/deploy/bots/line/line09.png b/images/zh/deploy/bots/line/line09.png
similarity index 100%
rename from docs/assets/image/zh/deploy/bots/line/line09.png
rename to images/zh/deploy/bots/line/line09.png
diff --git a/docs/assets/image/zh/deploy/bots/line/line10.png b/images/zh/deploy/bots/line/line10.png
similarity index 100%
rename from docs/assets/image/zh/deploy/bots/line/line10.png
rename to images/zh/deploy/bots/line/line10.png
diff --git a/docs/assets/image/zh/deploy/bots/line/line11.png b/images/zh/deploy/bots/line/line11.png
similarity index 100%
rename from docs/assets/image/zh/deploy/bots/line/line11.png
rename to images/zh/deploy/bots/line/line11.png
diff --git a/docs/assets/image/zh/deploy/bots/line/line12.png b/images/zh/deploy/bots/line/line12.png
similarity index 100%
rename from docs/assets/image/zh/deploy/bots/line/line12.png
rename to images/zh/deploy/bots/line/line12.png
diff --git a/docs/assets/image/zh/deploy/bots/line/line13.png b/images/zh/deploy/bots/line/line13.png
similarity index 100%
rename from docs/assets/image/zh/deploy/bots/line/line13.png
rename to images/zh/deploy/bots/line/line13.png
diff --git a/docs/assets/image/zh/deploy/bots/line/line14.png b/images/zh/deploy/bots/line/line14.png
similarity index 100%
rename from docs/assets/image/zh/deploy/bots/line/line14.png
rename to images/zh/deploy/bots/line/line14.png
diff --git a/docs/assets/image/zh/deploy/bots/line/line15.png b/images/zh/deploy/bots/line/line15.png
similarity index 100%
rename from docs/assets/image/zh/deploy/bots/line/line15.png
rename to images/zh/deploy/bots/line/line15.png
diff --git a/docs/assets/image/zh/deploy/bots/line/line16.png b/images/zh/deploy/bots/line/line16.png
similarity index 100%
rename from docs/assets/image/zh/deploy/bots/line/line16.png
rename to images/zh/deploy/bots/line/line16.png
diff --git a/docs/assets/image/zh/deploy/bots/line/line17.png b/images/zh/deploy/bots/line/line17.png
similarity index 100%
rename from docs/assets/image/zh/deploy/bots/line/line17.png
rename to images/zh/deploy/bots/line/line17.png
diff --git a/docs/assets/image/zh/deploy/bots/line/line18.png b/images/zh/deploy/bots/line/line18.png
similarity index 100%
rename from docs/assets/image/zh/deploy/bots/line/line18.png
rename to images/zh/deploy/bots/line/line18.png
diff --git a/docs/assets/image/zh/deploy/bots/line/line19.png b/images/zh/deploy/bots/line/line19.png
similarity index 100%
rename from docs/assets/image/zh/deploy/bots/line/line19.png
rename to images/zh/deploy/bots/line/line19.png
diff --git a/docs/assets/image/zh/deploy/bots/line/line20.png b/images/zh/deploy/bots/line/line20.png
similarity index 100%
rename from docs/assets/image/zh/deploy/bots/line/line20.png
rename to images/zh/deploy/bots/line/line20.png
diff --git a/docs/assets/image/zh/deploy/bots/line/line21.png b/images/zh/deploy/bots/line/line21.png
similarity index 100%
rename from docs/assets/image/zh/deploy/bots/line/line21.png
rename to images/zh/deploy/bots/line/line21.png
diff --git a/docs/assets/image/zh/deploy/bots/line/line22.png b/images/zh/deploy/bots/line/line22.png
similarity index 100%
rename from docs/assets/image/zh/deploy/bots/line/line22.png
rename to images/zh/deploy/bots/line/line22.png
diff --git a/docs/assets/image/zh/deploy/bots/line/line23.png b/images/zh/deploy/bots/line/line23.png
similarity index 100%
rename from docs/assets/image/zh/deploy/bots/line/line23.png
rename to images/zh/deploy/bots/line/line23.png
diff --git a/docs/assets/image/zh/deploy/bots/line/line24.png b/images/zh/deploy/bots/line/line24.png
similarity index 100%
rename from docs/assets/image/zh/deploy/bots/line/line24.png
rename to images/zh/deploy/bots/line/line24.png
diff --git a/docs/assets/image/zh/deploy/bots/line/line25.png b/images/zh/deploy/bots/line/line25.png
similarity index 100%
rename from docs/assets/image/zh/deploy/bots/line/line25.png
rename to images/zh/deploy/bots/line/line25.png
diff --git a/docs/assets/image/zh/deploy/bots/line/line26.png b/images/zh/deploy/bots/line/line26.png
similarity index 100%
rename from docs/assets/image/zh/deploy/bots/line/line26.png
rename to images/zh/deploy/bots/line/line26.png
diff --git a/docs/assets/image/zh/deploy/bots/line/line27.png b/images/zh/deploy/bots/line/line27.png
similarity index 100%
rename from docs/assets/image/zh/deploy/bots/line/line27.png
rename to images/zh/deploy/bots/line/line27.png
diff --git a/docs/assets/image/zh/deploy/bots/line/line28.png b/images/zh/deploy/bots/line/line28.png
similarity index 100%
rename from docs/assets/image/zh/deploy/bots/line/line28.png
rename to images/zh/deploy/bots/line/line28.png
diff --git a/docs/assets/image/zh/deploy/bots/line/line29.png b/images/zh/deploy/bots/line/line29.png
similarity index 100%
rename from docs/assets/image/zh/deploy/bots/line/line29.png
rename to images/zh/deploy/bots/line/line29.png
diff --git a/images/zh/deploy/bots/line/line30.png b/images/zh/deploy/bots/line/line30.png
new file mode 100644
index 000000000..920da6176
Binary files /dev/null and b/images/zh/deploy/bots/line/line30.png differ
diff --git a/docs/assets/image/zh/deploy/bots/qq/official/qqofficial1.png b/images/zh/deploy/bots/qq/official/qqofficial1.png
similarity index 100%
rename from docs/assets/image/zh/deploy/bots/qq/official/qqofficial1.png
rename to images/zh/deploy/bots/qq/official/qqofficial1.png
diff --git a/docs/assets/image/zh/deploy/bots/qq/official/qqofficial2.png b/images/zh/deploy/bots/qq/official/qqofficial2.png
similarity index 100%
rename from docs/assets/image/zh/deploy/bots/qq/official/qqofficial2.png
rename to images/zh/deploy/bots/qq/official/qqofficial2.png
diff --git a/images/zh/deploy/bots/qq/official/qqofficial3.png b/images/zh/deploy/bots/qq/official/qqofficial3.png
new file mode 100644
index 000000000..e67fc4d94
Binary files /dev/null and b/images/zh/deploy/bots/qq/official/qqofficial3.png differ
diff --git a/images/zh/deploy/bots/qq/official/qqofficial4.png b/images/zh/deploy/bots/qq/official/qqofficial4.png
new file mode 100644
index 000000000..95192fad9
Binary files /dev/null and b/images/zh/deploy/bots/qq/official/qqofficial4.png differ
diff --git a/docs/assets/image/zh/deploy/bots/qq/onebot/lagrange/config_lgr.png b/images/zh/deploy/bots/qq/onebot/lagrange/config_lgr.png
similarity index 100%
rename from docs/assets/image/zh/deploy/bots/qq/onebot/lagrange/config_lgr.png
rename to images/zh/deploy/bots/qq/onebot/lagrange/config_lgr.png
diff --git a/docs/assets/image/zh/deploy/bots/qq/onebot/lagrange/dl_lgr_1.png b/images/zh/deploy/bots/qq/onebot/lagrange/dl_lgr_1.png
similarity index 100%
rename from docs/assets/image/zh/deploy/bots/qq/onebot/lagrange/dl_lgr_1.png
rename to images/zh/deploy/bots/qq/onebot/lagrange/dl_lgr_1.png
diff --git a/docs/assets/image/zh/deploy/bots/qq/onebot/lagrange/dl_lgr_2.png b/images/zh/deploy/bots/qq/onebot/lagrange/dl_lgr_2.png
similarity index 100%
rename from docs/assets/image/zh/deploy/bots/qq/onebot/lagrange/dl_lgr_2.png
rename to images/zh/deploy/bots/qq/onebot/lagrange/dl_lgr_2.png
diff --git a/docs/assets/image/zh/deploy/bots/qq/onebot/lagrange/dl_lgr_3.png b/images/zh/deploy/bots/qq/onebot/lagrange/dl_lgr_3.png
similarity index 100%
rename from docs/assets/image/zh/deploy/bots/qq/onebot/lagrange/dl_lgr_3.png
rename to images/zh/deploy/bots/qq/onebot/lagrange/dl_lgr_3.png
diff --git a/docs/assets/image/zh/deploy/bots/qq/onebot/llonebot/llob_cfg.png b/images/zh/deploy/bots/qq/onebot/llonebot/llob_cfg.png
similarity index 100%
rename from docs/assets/image/zh/deploy/bots/qq/onebot/llonebot/llob_cfg.png
rename to images/zh/deploy/bots/qq/onebot/llonebot/llob_cfg.png
diff --git a/docs/assets/image/zh/deploy/bots/qq/onebot/napcat/napcat_webui_01.png b/images/zh/deploy/bots/qq/onebot/napcat/napcat_webui_01.png
similarity index 100%
rename from docs/assets/image/zh/deploy/bots/qq/onebot/napcat/napcat_webui_01.png
rename to images/zh/deploy/bots/qq/onebot/napcat/napcat_webui_01.png
diff --git a/docs/assets/image/zh/deploy/bots/qq/onebot/napcat/napcat_webui_02.png b/images/zh/deploy/bots/qq/onebot/napcat/napcat_webui_02.png
similarity index 100%
rename from docs/assets/image/zh/deploy/bots/qq/onebot/napcat/napcat_webui_02.png
rename to images/zh/deploy/bots/qq/onebot/napcat/napcat_webui_02.png
diff --git a/docs/assets/image/zh/deploy/bots/qq/onebot/napcat/napcat_webui_03.png b/images/zh/deploy/bots/qq/onebot/napcat/napcat_webui_03.png
similarity index 100%
rename from docs/assets/image/zh/deploy/bots/qq/onebot/napcat/napcat_webui_03.png
rename to images/zh/deploy/bots/qq/onebot/napcat/napcat_webui_03.png
diff --git a/images/zh/deploy/bots/slack/connect_to_langbot.png b/images/zh/deploy/bots/slack/connect_to_langbot.png
new file mode 100644
index 000000000..65710353a
Binary files /dev/null and b/images/zh/deploy/bots/slack/connect_to_langbot.png differ
diff --git a/docs/assets/image/zh/deploy/bots/slack/slack_01.jpg b/images/zh/deploy/bots/slack/slack_01.jpg
similarity index 100%
rename from docs/assets/image/zh/deploy/bots/slack/slack_01.jpg
rename to images/zh/deploy/bots/slack/slack_01.jpg
diff --git a/docs/assets/image/zh/deploy/bots/slack/slack_02.jpg b/images/zh/deploy/bots/slack/slack_02.jpg
similarity index 100%
rename from docs/assets/image/zh/deploy/bots/slack/slack_02.jpg
rename to images/zh/deploy/bots/slack/slack_02.jpg
diff --git a/docs/assets/image/zh/deploy/bots/slack/slack_03.jpg b/images/zh/deploy/bots/slack/slack_03.jpg
similarity index 100%
rename from docs/assets/image/zh/deploy/bots/slack/slack_03.jpg
rename to images/zh/deploy/bots/slack/slack_03.jpg
diff --git a/docs/assets/image/zh/deploy/bots/slack/slack_04.jpg b/images/zh/deploy/bots/slack/slack_04.jpg
similarity index 100%
rename from docs/assets/image/zh/deploy/bots/slack/slack_04.jpg
rename to images/zh/deploy/bots/slack/slack_04.jpg
diff --git a/docs/assets/image/zh/deploy/bots/slack/slack_05.jpg b/images/zh/deploy/bots/slack/slack_05.jpg
similarity index 100%
rename from docs/assets/image/zh/deploy/bots/slack/slack_05.jpg
rename to images/zh/deploy/bots/slack/slack_05.jpg
diff --git a/docs/assets/image/zh/deploy/bots/telegram/connect_to_langbot.png b/images/zh/deploy/bots/telegram/connect_to_langbot.png
similarity index 100%
rename from docs/assets/image/zh/deploy/bots/telegram/connect_to_langbot.png
rename to images/zh/deploy/bots/telegram/connect_to_langbot.png
diff --git a/docs/assets/image/zh/deploy/bots/telegram/telegram_01.png b/images/zh/deploy/bots/telegram/telegram_01.png
similarity index 100%
rename from docs/assets/image/zh/deploy/bots/telegram/telegram_01.png
rename to images/zh/deploy/bots/telegram/telegram_01.png
diff --git a/docs/assets/image/zh/deploy/bots/telegram/telegram_02.png b/images/zh/deploy/bots/telegram/telegram_02.png
similarity index 100%
rename from docs/assets/image/zh/deploy/bots/telegram/telegram_02.png
rename to images/zh/deploy/bots/telegram/telegram_02.png
diff --git a/docs/assets/image/zh/deploy/bots/telegram/telegram_03.png b/images/zh/deploy/bots/telegram/telegram_03.png
similarity index 100%
rename from docs/assets/image/zh/deploy/bots/telegram/telegram_03.png
rename to images/zh/deploy/bots/telegram/telegram_03.png
diff --git a/docs/assets/image/zh/deploy/bots/telegram/telegram_04.png b/images/zh/deploy/bots/telegram/telegram_04.png
similarity index 100%
rename from docs/assets/image/zh/deploy/bots/telegram/telegram_04.png
rename to images/zh/deploy/bots/telegram/telegram_04.png
diff --git a/docs/assets/image/zh/deploy/bots/telegram/telegram_05.png b/images/zh/deploy/bots/telegram/telegram_05.png
similarity index 100%
rename from docs/assets/image/zh/deploy/bots/telegram/telegram_05.png
rename to images/zh/deploy/bots/telegram/telegram_05.png
diff --git a/images/zh/deploy/bots/wecom/wecom/01-wecom-apps.png b/images/zh/deploy/bots/wecom/wecom/01-wecom-apps.png
new file mode 100644
index 000000000..fca8c42ee
Binary files /dev/null and b/images/zh/deploy/bots/wecom/wecom/01-wecom-apps.png differ
diff --git a/images/zh/deploy/bots/wecom/wecom/02-create-app.png b/images/zh/deploy/bots/wecom/wecom/02-create-app.png
new file mode 100644
index 000000000..030bef138
Binary files /dev/null and b/images/zh/deploy/bots/wecom/wecom/02-create-app.png differ
diff --git a/images/zh/deploy/bots/wecom/wecom/03-corp-id.png b/images/zh/deploy/bots/wecom/wecom/03-corp-id.png
new file mode 100644
index 000000000..38c65fe67
Binary files /dev/null and b/images/zh/deploy/bots/wecom/wecom/03-corp-id.png differ
diff --git a/images/zh/deploy/bots/wecom/wecom/04-bot-secret.png b/images/zh/deploy/bots/wecom/wecom/04-bot-secret.png
new file mode 100644
index 000000000..4fa37cb6c
Binary files /dev/null and b/images/zh/deploy/bots/wecom/wecom/04-bot-secret.png differ
diff --git a/images/zh/deploy/bots/wecom/wecom/05-fill-in-corpid-secret.png b/images/zh/deploy/bots/wecom/wecom/05-fill-in-corpid-secret.png
new file mode 100644
index 000000000..02922a3c9
Binary files /dev/null and b/images/zh/deploy/bots/wecom/wecom/05-fill-in-corpid-secret.png differ
diff --git a/images/zh/deploy/bots/wecom/wecom/06-webhook-callback-address.png b/images/zh/deploy/bots/wecom/wecom/06-webhook-callback-address.png
new file mode 100644
index 000000000..d02cc501c
Binary files /dev/null and b/images/zh/deploy/bots/wecom/wecom/06-webhook-callback-address.png differ
diff --git a/images/zh/deploy/bots/wecom/wecom/07-set-api-receiver.png b/images/zh/deploy/bots/wecom/wecom/07-set-api-receiver.png
new file mode 100644
index 000000000..b1ab58458
Binary files /dev/null and b/images/zh/deploy/bots/wecom/wecom/07-set-api-receiver.png differ
diff --git a/images/zh/deploy/bots/wecom/wecom/08-contact-secret.png b/images/zh/deploy/bots/wecom/wecom/08-contact-secret.png
new file mode 100644
index 000000000..79b33aa1f
Binary files /dev/null and b/images/zh/deploy/bots/wecom/wecom/08-contact-secret.png differ
diff --git a/images/zh/deploy/bots/wecom/wecom/09-save-wecom-bot.png b/images/zh/deploy/bots/wecom/wecom/09-save-wecom-bot.png
new file mode 100644
index 000000000..0fc74cd1f
Binary files /dev/null and b/images/zh/deploy/bots/wecom/wecom/09-save-wecom-bot.png differ
diff --git a/images/zh/deploy/bots/wecom/wecom/10-corp-trusted-ip.png b/images/zh/deploy/bots/wecom/wecom/10-corp-trusted-ip.png
new file mode 100644
index 000000000..54ed638a5
Binary files /dev/null and b/images/zh/deploy/bots/wecom/wecom/10-corp-trusted-ip.png differ
diff --git a/docs/assets/image/zh/deploy/bots/wecom/wecombot/wecombot_1.png b/images/zh/deploy/bots/wecom/wecombot/wecombot_1.png
similarity index 100%
rename from docs/assets/image/zh/deploy/bots/wecom/wecombot/wecombot_1.png
rename to images/zh/deploy/bots/wecom/wecombot/wecombot_1.png
diff --git a/docs/assets/image/zh/deploy/bots/wecom/wecombot/wecombot_2.png b/images/zh/deploy/bots/wecom/wecombot/wecombot_2.png
similarity index 100%
rename from docs/assets/image/zh/deploy/bots/wecom/wecombot/wecombot_2.png
rename to images/zh/deploy/bots/wecom/wecombot/wecombot_2.png
diff --git a/docs/assets/image/zh/deploy/bots/wecom/wecombot/wecombot_3.png b/images/zh/deploy/bots/wecom/wecombot/wecombot_3.png
similarity index 100%
rename from docs/assets/image/zh/deploy/bots/wecom/wecombot/wecombot_3.png
rename to images/zh/deploy/bots/wecom/wecombot/wecombot_3.png
diff --git a/docs/assets/image/zh/deploy/bots/wecom/wecombot/wecombot_4.png b/images/zh/deploy/bots/wecom/wecombot/wecombot_4.png
similarity index 100%
rename from docs/assets/image/zh/deploy/bots/wecom/wecombot/wecombot_4.png
rename to images/zh/deploy/bots/wecom/wecombot/wecombot_4.png
diff --git a/docs/assets/image/zh/deploy/bots/wecom/wecombot/wecombot_5.png b/images/zh/deploy/bots/wecom/wecombot/wecombot_5.png
similarity index 100%
rename from docs/assets/image/zh/deploy/bots/wecom/wecombot/wecombot_5.png
rename to images/zh/deploy/bots/wecom/wecombot/wecombot_5.png
diff --git a/docs/assets/image/zh/deploy/bots/wecom/wecombot/wecombot_6.png b/images/zh/deploy/bots/wecom/wecombot/wecombot_6.png
similarity index 100%
rename from docs/assets/image/zh/deploy/bots/wecom/wecombot/wecombot_6.png
rename to images/zh/deploy/bots/wecom/wecombot/wecombot_6.png
diff --git a/docs/assets/image/zh/deploy/bots/wecom/wecombot/wecombot_7.png b/images/zh/deploy/bots/wecom/wecombot/wecombot_7.png
similarity index 100%
rename from docs/assets/image/zh/deploy/bots/wecom/wecombot/wecombot_7.png
rename to images/zh/deploy/bots/wecom/wecombot/wecombot_7.png
diff --git a/images/zh/deploy/bots/wecom/wecombot/wecombot_8.png b/images/zh/deploy/bots/wecom/wecombot/wecombot_8.png
new file mode 100644
index 000000000..aadb0a7d2
Binary files /dev/null and b/images/zh/deploy/bots/wecom/wecombot/wecombot_8.png differ
diff --git a/images/zh/deploy/bots/wecom/wecomcs/connect_to_langbot.png b/images/zh/deploy/bots/wecom/wecomcs/connect_to_langbot.png
new file mode 100644
index 000000000..885171c4f
Binary files /dev/null and b/images/zh/deploy/bots/wecom/wecomcs/connect_to_langbot.png differ
diff --git a/docs/assets/image/zh/deploy/bots/wecom/wecomcs/wecomcs_01.jpg b/images/zh/deploy/bots/wecom/wecomcs/wecomcs_01.jpg
similarity index 100%
rename from docs/assets/image/zh/deploy/bots/wecom/wecomcs/wecomcs_01.jpg
rename to images/zh/deploy/bots/wecom/wecomcs/wecomcs_01.jpg
diff --git a/images/zh/deploy/bots/wecom/wecomcs/wecomcs_02.png b/images/zh/deploy/bots/wecom/wecomcs/wecomcs_02.png
new file mode 100644
index 000000000..d1aeb32c0
Binary files /dev/null and b/images/zh/deploy/bots/wecom/wecomcs/wecomcs_02.png differ
diff --git a/images/zh/deploy/bots/wxoa/connect_to_langbot.png b/images/zh/deploy/bots/wxoa/connect_to_langbot.png
new file mode 100644
index 000000000..485894af8
Binary files /dev/null and b/images/zh/deploy/bots/wxoa/connect_to_langbot.png differ
diff --git a/docs/assets/image/zh/deploy/bots/wxoa/wxoa1.png b/images/zh/deploy/bots/wxoa/wxoa1.png
similarity index 100%
rename from docs/assets/image/zh/deploy/bots/wxoa/wxoa1.png
rename to images/zh/deploy/bots/wxoa/wxoa1.png
diff --git a/docs/assets/image/zh/deploy/bots/wxoa/wxoa2.png b/images/zh/deploy/bots/wxoa/wxoa2.png
similarity index 100%
rename from docs/assets/image/zh/deploy/bots/wxoa/wxoa2.png
rename to images/zh/deploy/bots/wxoa/wxoa2.png
diff --git a/docs/assets/image/zh/deploy/knowledge/upload_docs.png b/images/zh/deploy/knowledge/upload_docs.png
similarity index 100%
rename from docs/assets/image/zh/deploy/knowledge/upload_docs.png
rename to images/zh/deploy/knowledge/upload_docs.png
diff --git a/docs/assets/image/zh/deploy/knowledge/use_kb.png b/images/zh/deploy/knowledge/use_kb.png
similarity index 100%
rename from docs/assets/image/zh/deploy/knowledge/use_kb.png
rename to images/zh/deploy/knowledge/use_kb.png
diff --git a/docs/assets/image/zh/deploy/knowledge/use_kb_in_chat.png b/images/zh/deploy/knowledge/use_kb_in_chat.png
similarity index 100%
rename from docs/assets/image/zh/deploy/knowledge/use_kb_in_chat.png
rename to images/zh/deploy/knowledge/use_kb_in_chat.png
diff --git a/docs/assets/image/zh/deploy/knowledge/use_local_agent.png b/images/zh/deploy/knowledge/use_local_agent.png
similarity index 100%
rename from docs/assets/image/zh/deploy/knowledge/use_local_agent.png
rename to images/zh/deploy/knowledge/use_local_agent.png
diff --git a/docs/assets/image/zh/deploy/langbot/manual/dl_release.png b/images/zh/deploy/langbot/manual/dl_release.png
similarity index 100%
rename from docs/assets/image/zh/deploy/langbot/manual/dl_release.png
rename to images/zh/deploy/langbot/manual/dl_release.png
diff --git a/docs/assets/image/zh/deploy/langbot/one-click/1p_install_01.png b/images/zh/deploy/langbot/one-click/1p_install_01.png
similarity index 100%
rename from docs/assets/image/zh/deploy/langbot/one-click/1p_install_01.png
rename to images/zh/deploy/langbot/one-click/1p_install_01.png
diff --git a/docs/assets/image/zh/deploy/langbot/one-click/1p_langbot_01.png b/images/zh/deploy/langbot/one-click/1p_langbot_01.png
similarity index 100%
rename from docs/assets/image/zh/deploy/langbot/one-click/1p_langbot_01.png
rename to images/zh/deploy/langbot/one-click/1p_langbot_01.png
diff --git a/docs/assets/image/zh/deploy/langbot/one-click/1p_langbot_02.png b/images/zh/deploy/langbot/one-click/1p_langbot_02.png
similarity index 100%
rename from docs/assets/image/zh/deploy/langbot/one-click/1p_langbot_02.png
rename to images/zh/deploy/langbot/one-click/1p_langbot_02.png
diff --git a/docs/assets/image/zh/deploy/langbot/one-click/1p_langbot_03.png b/images/zh/deploy/langbot/one-click/1p_langbot_03.png
similarity index 100%
rename from docs/assets/image/zh/deploy/langbot/one-click/1p_langbot_03.png
rename to images/zh/deploy/langbot/one-click/1p_langbot_03.png
diff --git a/docs/assets/image/zh/deploy/langbot/one-click/bt_install_01.png b/images/zh/deploy/langbot/one-click/bt_install_01.png
similarity index 100%
rename from docs/assets/image/zh/deploy/langbot/one-click/bt_install_01.png
rename to images/zh/deploy/langbot/one-click/bt_install_01.png
diff --git a/docs/assets/image/zh/deploy/langbot/one-click/bt_install_02.png b/images/zh/deploy/langbot/one-click/bt_install_02.png
similarity index 100%
rename from docs/assets/image/zh/deploy/langbot/one-click/bt_install_02.png
rename to images/zh/deploy/langbot/one-click/bt_install_02.png
diff --git a/docs/assets/image/zh/deploy/langbot/one-click/bt_langbot_01.png b/images/zh/deploy/langbot/one-click/bt_langbot_01.png
similarity index 100%
rename from docs/assets/image/zh/deploy/langbot/one-click/bt_langbot_01.png
rename to images/zh/deploy/langbot/one-click/bt_langbot_01.png
diff --git a/docs/assets/image/zh/deploy/langbot/one-click/bt_langbot_02.png b/images/zh/deploy/langbot/one-click/bt_langbot_02.png
similarity index 100%
rename from docs/assets/image/zh/deploy/langbot/one-click/bt_langbot_02.png
rename to images/zh/deploy/langbot/one-click/bt_langbot_02.png
diff --git a/docs/assets/image/zh/deploy/mcp/mcp02.png b/images/zh/deploy/mcp/mcp02.png
similarity index 100%
rename from docs/assets/image/zh/deploy/mcp/mcp02.png
rename to images/zh/deploy/mcp/mcp02.png
diff --git a/docs/assets/image/zh/deploy/mcp/mcp03.png b/images/zh/deploy/mcp/mcp03.png
similarity index 100%
rename from docs/assets/image/zh/deploy/mcp/mcp03.png
rename to images/zh/deploy/mcp/mcp03.png
diff --git a/docs/assets/image/zh/deploy/mcp/mcp04.png b/images/zh/deploy/mcp/mcp04.png
similarity index 100%
rename from docs/assets/image/zh/deploy/mcp/mcp04.png
rename to images/zh/deploy/mcp/mcp04.png
diff --git a/docs/assets/image/zh/deploy/mcp/mcp05.png b/images/zh/deploy/mcp/mcp05.png
similarity index 100%
rename from docs/assets/image/zh/deploy/mcp/mcp05.png
rename to images/zh/deploy/mcp/mcp05.png
diff --git a/docs/assets/image/zh/deploy/mcp/mcp_01.png b/images/zh/deploy/mcp/mcp_01.png
similarity index 100%
rename from docs/assets/image/zh/deploy/mcp/mcp_01.png
rename to images/zh/deploy/mcp/mcp_01.png
diff --git a/docs/assets/image/zh/deploy/models/arch.png b/images/zh/deploy/models/arch.png
similarity index 100%
rename from docs/assets/image/zh/deploy/models/arch.png
rename to images/zh/deploy/models/arch.png
diff --git a/docs/assets/image/zh/deploy/models/create_model.png b/images/zh/deploy/models/create_model.png
similarity index 100%
rename from docs/assets/image/zh/deploy/models/create_model.png
rename to images/zh/deploy/models/create_model.png
diff --git a/docs/assets/image/zh/deploy/models/embedding_model.png b/images/zh/deploy/models/embedding_model.png
similarity index 100%
rename from docs/assets/image/zh/deploy/models/embedding_model.png
rename to images/zh/deploy/models/embedding_model.png
diff --git a/images/zh/deploy/models/langbot_models.png b/images/zh/deploy/models/langbot_models.png
new file mode 100644
index 000000000..0109189c0
Binary files /dev/null and b/images/zh/deploy/models/langbot_models.png differ
diff --git a/docs/assets/image/zh/deploy/models/model_config.png b/images/zh/deploy/models/model_config.png
similarity index 100%
rename from docs/assets/image/zh/deploy/models/model_config.png
rename to images/zh/deploy/models/model_config.png
diff --git a/docs/assets/image/zh/deploy/models/other_provider.png b/images/zh/deploy/models/other_provider.png
similarity index 100%
rename from docs/assets/image/zh/deploy/models/other_provider.png
rename to images/zh/deploy/models/other_provider.png
diff --git a/docs/assets/image/zh/deploy/pipelines/arch.png b/images/zh/deploy/pipelines/arch.png
similarity index 100%
rename from docs/assets/image/zh/deploy/pipelines/arch.png
rename to images/zh/deploy/pipelines/arch.png
diff --git a/docs/assets/image/zh/deploy/pipelines/coze/coze00.png b/images/zh/deploy/pipelines/coze/coze00.png
similarity index 100%
rename from docs/assets/image/zh/deploy/pipelines/coze/coze00.png
rename to images/zh/deploy/pipelines/coze/coze00.png
diff --git a/docs/assets/image/zh/deploy/pipelines/coze/coze01.png b/images/zh/deploy/pipelines/coze/coze01.png
similarity index 100%
rename from docs/assets/image/zh/deploy/pipelines/coze/coze01.png
rename to images/zh/deploy/pipelines/coze/coze01.png
diff --git a/docs/assets/image/zh/deploy/pipelines/coze/coze02.png b/images/zh/deploy/pipelines/coze/coze02.png
similarity index 100%
rename from docs/assets/image/zh/deploy/pipelines/coze/coze02.png
rename to images/zh/deploy/pipelines/coze/coze02.png
diff --git a/docs/assets/image/zh/deploy/pipelines/coze/coze03.png b/images/zh/deploy/pipelines/coze/coze03.png
similarity index 100%
rename from docs/assets/image/zh/deploy/pipelines/coze/coze03.png
rename to images/zh/deploy/pipelines/coze/coze03.png
diff --git a/docs/assets/image/zh/deploy/pipelines/coze/coze04.png b/images/zh/deploy/pipelines/coze/coze04.png
similarity index 100%
rename from docs/assets/image/zh/deploy/pipelines/coze/coze04.png
rename to images/zh/deploy/pipelines/coze/coze04.png
diff --git a/docs/assets/image/zh/deploy/pipelines/coze/coze05.png b/images/zh/deploy/pipelines/coze/coze05.png
similarity index 100%
rename from docs/assets/image/zh/deploy/pipelines/coze/coze05.png
rename to images/zh/deploy/pipelines/coze/coze05.png
diff --git a/docs/assets/image/zh/deploy/pipelines/coze/coze06.png b/images/zh/deploy/pipelines/coze/coze06.png
similarity index 100%
rename from docs/assets/image/zh/deploy/pipelines/coze/coze06.png
rename to images/zh/deploy/pipelines/coze/coze06.png
diff --git a/docs/assets/image/zh/deploy/pipelines/coze/coze07.png b/images/zh/deploy/pipelines/coze/coze07.png
similarity index 100%
rename from docs/assets/image/zh/deploy/pipelines/coze/coze07.png
rename to images/zh/deploy/pipelines/coze/coze07.png
diff --git a/docs/assets/image/zh/deploy/pipelines/coze/coze08.png b/images/zh/deploy/pipelines/coze/coze08.png
similarity index 100%
rename from docs/assets/image/zh/deploy/pipelines/coze/coze08.png
rename to images/zh/deploy/pipelines/coze/coze08.png
diff --git a/docs/assets/image/zh/deploy/pipelines/dify/dify_sv_api_01.png b/images/zh/deploy/pipelines/dify/dify_sv_api_01.png
similarity index 100%
rename from docs/assets/image/zh/deploy/pipelines/dify/dify_sv_api_01.png
rename to images/zh/deploy/pipelines/dify/dify_sv_api_01.png
diff --git a/docs/assets/image/zh/deploy/pipelines/dify/dify_sv_api_02.png b/images/zh/deploy/pipelines/dify/dify_sv_api_02.png
similarity index 100%
rename from docs/assets/image/zh/deploy/pipelines/dify/dify_sv_api_02.png
rename to images/zh/deploy/pipelines/dify/dify_sv_api_02.png
diff --git a/docs/assets/image/zh/deploy/pipelines/dify/dify_workflow_output_key.png b/images/zh/deploy/pipelines/dify/dify_workflow_output_key.png
similarity index 100%
rename from docs/assets/image/zh/deploy/pipelines/dify/dify_workflow_output_key.png
rename to images/zh/deploy/pipelines/dify/dify_workflow_output_key.png
diff --git a/docs/assets/image/zh/deploy/pipelines/edit_pipeline_ai.png b/images/zh/deploy/pipelines/edit_pipeline_ai.png
similarity index 100%
rename from docs/assets/image/zh/deploy/pipelines/edit_pipeline_ai.png
rename to images/zh/deploy/pipelines/edit_pipeline_ai.png
diff --git a/docs/assets/image/zh/deploy/pipelines/langflow/create_flow.png b/images/zh/deploy/pipelines/langflow/create_flow.png
similarity index 100%
rename from docs/assets/image/zh/deploy/pipelines/langflow/create_flow.png
rename to images/zh/deploy/pipelines/langflow/create_flow.png
diff --git a/docs/assets/image/zh/deploy/pipelines/langflow/edit_flow.png b/images/zh/deploy/pipelines/langflow/edit_flow.png
similarity index 100%
rename from docs/assets/image/zh/deploy/pipelines/langflow/edit_flow.png
rename to images/zh/deploy/pipelines/langflow/edit_flow.png
diff --git a/docs/assets/image/zh/deploy/pipelines/langflow/get_api_key.png b/images/zh/deploy/pipelines/langflow/get_api_key.png
similarity index 100%
rename from docs/assets/image/zh/deploy/pipelines/langflow/get_api_key.png
rename to images/zh/deploy/pipelines/langflow/get_api_key.png
diff --git a/docs/assets/image/zh/deploy/pipelines/langflow/get_flow_id.png b/images/zh/deploy/pipelines/langflow/get_flow_id.png
similarity index 100%
rename from docs/assets/image/zh/deploy/pipelines/langflow/get_flow_id.png
rename to images/zh/deploy/pipelines/langflow/get_flow_id.png
diff --git a/docs/assets/image/zh/deploy/pipelines/langflow/set_langflow_runner.png b/images/zh/deploy/pipelines/langflow/set_langflow_runner.png
similarity index 100%
rename from docs/assets/image/zh/deploy/pipelines/langflow/set_langflow_runner.png
rename to images/zh/deploy/pipelines/langflow/set_langflow_runner.png
diff --git a/docs/assets/image/zh/deploy/pipelines/more_runner.png b/images/zh/deploy/pipelines/more_runner.png
similarity index 100%
rename from docs/assets/image/zh/deploy/pipelines/more_runner.png
rename to images/zh/deploy/pipelines/more_runner.png
diff --git a/docs/assets/image/zh/deploy/pipelines/n8n/config_auth.png b/images/zh/deploy/pipelines/n8n/config_auth.png
similarity index 100%
rename from docs/assets/image/zh/deploy/pipelines/n8n/config_auth.png
rename to images/zh/deploy/pipelines/n8n/config_auth.png
diff --git a/docs/assets/image/zh/deploy/pipelines/n8n/config_call_ai.png b/images/zh/deploy/pipelines/n8n/config_call_ai.png
similarity index 100%
rename from docs/assets/image/zh/deploy/pipelines/n8n/config_call_ai.png
rename to images/zh/deploy/pipelines/n8n/config_call_ai.png
diff --git a/docs/assets/image/zh/deploy/pipelines/n8n/config_n8n_onchatmessage.png b/images/zh/deploy/pipelines/n8n/config_n8n_onchatmessage.png
similarity index 100%
rename from docs/assets/image/zh/deploy/pipelines/n8n/config_n8n_onchatmessage.png
rename to images/zh/deploy/pipelines/n8n/config_n8n_onchatmessage.png
diff --git a/docs/assets/image/zh/deploy/pipelines/n8n/config_respond.png b/images/zh/deploy/pipelines/n8n/config_respond.png
similarity index 100%
rename from docs/assets/image/zh/deploy/pipelines/n8n/config_respond.png
rename to images/zh/deploy/pipelines/n8n/config_respond.png
diff --git a/docs/assets/image/zh/deploy/pipelines/n8n/config_response_model.png b/images/zh/deploy/pipelines/n8n/config_response_model.png
similarity index 100%
rename from docs/assets/image/zh/deploy/pipelines/n8n/config_response_model.png
rename to images/zh/deploy/pipelines/n8n/config_response_model.png
diff --git a/docs/assets/image/zh/deploy/pipelines/n8n/config_runner.png b/images/zh/deploy/pipelines/n8n/config_runner.png
similarity index 100%
rename from docs/assets/image/zh/deploy/pipelines/n8n/config_runner.png
rename to images/zh/deploy/pipelines/n8n/config_runner.png
diff --git a/docs/assets/image/zh/deploy/pipelines/n8n/config_webhook.png b/images/zh/deploy/pipelines/n8n/config_webhook.png
similarity index 100%
rename from docs/assets/image/zh/deploy/pipelines/n8n/config_webhook.png
rename to images/zh/deploy/pipelines/n8n/config_webhook.png
diff --git a/docs/assets/image/zh/deploy/pipelines/n8n/create_wf.png b/images/zh/deploy/pipelines/n8n/create_wf.png
similarity index 100%
rename from docs/assets/image/zh/deploy/pipelines/n8n/create_wf.png
rename to images/zh/deploy/pipelines/n8n/create_wf.png
diff --git a/docs/assets/image/zh/deploy/pipelines/n8n/create_wf01.png b/images/zh/deploy/pipelines/n8n/create_wf01.png
similarity index 100%
rename from docs/assets/image/zh/deploy/pipelines/n8n/create_wf01.png
rename to images/zh/deploy/pipelines/n8n/create_wf01.png
diff --git a/docs/assets/image/zh/deploy/pipelines/tbox/create_api_key.png b/images/zh/deploy/pipelines/tbox/create_api_key.png
similarity index 100%
rename from docs/assets/image/zh/deploy/pipelines/tbox/create_api_key.png
rename to images/zh/deploy/pipelines/tbox/create_api_key.png
diff --git a/docs/assets/image/zh/deploy/pipelines/tbox/find_appid.png b/images/zh/deploy/pipelines/tbox/find_appid.png
similarity index 100%
rename from docs/assets/image/zh/deploy/pipelines/tbox/find_appid.png
rename to images/zh/deploy/pipelines/tbox/find_appid.png
diff --git a/docs/assets/image/zh/deploy/pipelines/tbox/tbox_runner.png b/images/zh/deploy/pipelines/tbox/tbox_runner.png
similarity index 100%
rename from docs/assets/image/zh/deploy/pipelines/tbox/tbox_runner.png
rename to images/zh/deploy/pipelines/tbox/tbox_runner.png
diff --git a/docs/assets/image/zh/deploy/platforms/wechat/Snipaste_2025-06-09_22-30-49.png b/images/zh/deploy/platforms/wechat/Snipaste_2025-06-09_22-30-49.png
similarity index 100%
rename from docs/assets/image/zh/deploy/platforms/wechat/Snipaste_2025-06-09_22-30-49.png
rename to images/zh/deploy/platforms/wechat/Snipaste_2025-06-09_22-30-49.png
diff --git a/docs/assets/image/zh/deploy/platforms/wechat/Snipaste_2025-06-09_22-33-18.png b/images/zh/deploy/platforms/wechat/Snipaste_2025-06-09_22-33-18.png
similarity index 100%
rename from docs/assets/image/zh/deploy/platforms/wechat/Snipaste_2025-06-09_22-33-18.png
rename to images/zh/deploy/platforms/wechat/Snipaste_2025-06-09_22-33-18.png
diff --git a/docs/assets/image/zh/deploy/platforms/wechat/Snipaste_2025-06-09_22-33-45.png b/images/zh/deploy/platforms/wechat/Snipaste_2025-06-09_22-33-45.png
similarity index 100%
rename from docs/assets/image/zh/deploy/platforms/wechat/Snipaste_2025-06-09_22-33-45.png
rename to images/zh/deploy/platforms/wechat/Snipaste_2025-06-09_22-33-45.png
diff --git a/docs/assets/image/zh/deploy/platforms/wechat/Snipaste_2025-06-09_22-36-41.png b/images/zh/deploy/platforms/wechat/Snipaste_2025-06-09_22-36-41.png
similarity index 100%
rename from docs/assets/image/zh/deploy/platforms/wechat/Snipaste_2025-06-09_22-36-41.png
rename to images/zh/deploy/platforms/wechat/Snipaste_2025-06-09_22-36-41.png
diff --git a/docs/assets/image/zh/deploy/platforms/wechat/Snipaste_2025-06-09_22-37-40.png b/images/zh/deploy/platforms/wechat/Snipaste_2025-06-09_22-37-40.png
similarity index 100%
rename from docs/assets/image/zh/deploy/platforms/wechat/Snipaste_2025-06-09_22-37-40.png
rename to images/zh/deploy/platforms/wechat/Snipaste_2025-06-09_22-37-40.png
diff --git a/docs/assets/image/zh/deploy/platforms/wechat/Snipaste_2025-06-09_22-38-10.png b/images/zh/deploy/platforms/wechat/Snipaste_2025-06-09_22-38-10.png
similarity index 100%
rename from docs/assets/image/zh/deploy/platforms/wechat/Snipaste_2025-06-09_22-38-10.png
rename to images/zh/deploy/platforms/wechat/Snipaste_2025-06-09_22-38-10.png
diff --git a/docs/assets/image/zh/deploy/platforms/wechat/Snipaste_2025-06-09_22-41-05.png b/images/zh/deploy/platforms/wechat/Snipaste_2025-06-09_22-41-05.png
similarity index 100%
rename from docs/assets/image/zh/deploy/platforms/wechat/Snipaste_2025-06-09_22-41-05.png
rename to images/zh/deploy/platforms/wechat/Snipaste_2025-06-09_22-41-05.png
diff --git a/docs/assets/image/zh/deploy/platforms/wechat/gettoken.png b/images/zh/deploy/platforms/wechat/gettoken.png
similarity index 100%
rename from docs/assets/image/zh/deploy/platforms/wechat/gettoken.png
rename to images/zh/deploy/platforms/wechat/gettoken.png
diff --git a/docs/assets/image/zh/deploy/platforms/wechat/ipadlogin.jpg b/images/zh/deploy/platforms/wechat/ipadlogin.jpg
similarity index 100%
rename from docs/assets/image/zh/deploy/platforms/wechat/ipadlogin.jpg
rename to images/zh/deploy/platforms/wechat/ipadlogin.jpg
diff --git a/docs/assets/image/zh/deploy/platforms/wechat/langbotset.png b/images/zh/deploy/platforms/wechat/langbotset.png
similarity index 100%
rename from docs/assets/image/zh/deploy/platforms/wechat/langbotset.png
rename to images/zh/deploy/platforms/wechat/langbotset.png
diff --git a/docs/assets/image/zh/deploy/platforms/wechat/login1.png b/images/zh/deploy/platforms/wechat/login1.png
similarity index 100%
rename from docs/assets/image/zh/deploy/platforms/wechat/login1.png
rename to images/zh/deploy/platforms/wechat/login1.png
diff --git a/docs/assets/image/zh/deploy/platforms/wechat/login2.png b/images/zh/deploy/platforms/wechat/login2.png
similarity index 100%
rename from docs/assets/image/zh/deploy/platforms/wechat/login2.png
rename to images/zh/deploy/platforms/wechat/login2.png
diff --git a/docs/assets/image/zh/deploy/platforms/wechat/login3.png b/images/zh/deploy/platforms/wechat/login3.png
similarity index 100%
rename from docs/assets/image/zh/deploy/platforms/wechat/login3.png
rename to images/zh/deploy/platforms/wechat/login3.png
diff --git a/docs/assets/image/zh/deploy/platforms/wechat/page1.png b/images/zh/deploy/platforms/wechat/page1.png
similarity index 100%
rename from docs/assets/image/zh/deploy/platforms/wechat/page1.png
rename to images/zh/deploy/platforms/wechat/page1.png
diff --git a/docs/assets/image/zh/deploy/platforms/wechat/sendtoken.png b/images/zh/deploy/platforms/wechat/sendtoken.png
similarity index 100%
rename from docs/assets/image/zh/deploy/platforms/wechat/sendtoken.png
rename to images/zh/deploy/platforms/wechat/sendtoken.png
diff --git a/docs/assets/image/zh/develop/comp_arch/develop_comp_arch_1.png b/images/zh/develop/comp_arch/develop_comp_arch_1.png
similarity index 100%
rename from docs/assets/image/zh/develop/comp_arch/develop_comp_arch_1.png
rename to images/zh/develop/comp_arch/develop_comp_arch_1.png
diff --git a/docs/assets/image/zh/develop/confirm_venv.png b/images/zh/develop/confirm_venv.png
similarity index 100%
rename from docs/assets/image/zh/develop/confirm_venv.png
rename to images/zh/develop/confirm_venv.png
diff --git a/docs/assets/image/zh/insight/features/bot-page.png b/images/zh/insight/features/bot-page.png
similarity index 100%
rename from docs/assets/image/zh/insight/features/bot-page.png
rename to images/zh/insight/features/bot-page.png
diff --git a/docs/assets/image/zh/insight/features/create-model.png b/images/zh/insight/features/create-model.png
similarity index 100%
rename from docs/assets/image/zh/insight/features/create-model.png
rename to images/zh/insight/features/create-model.png
diff --git a/docs/assets/image/zh/insight/features/edit-pipeline.png b/images/zh/insight/features/edit-pipeline.png
similarity index 100%
rename from docs/assets/image/zh/insight/features/edit-pipeline.png
rename to images/zh/insight/features/edit-pipeline.png
diff --git a/docs/assets/image/zh/insight/features/plugin-market.png b/images/zh/insight/features/plugin-market.png
similarity index 100%
rename from docs/assets/image/zh/insight/features/plugin-market.png
rename to images/zh/insight/features/plugin-market.png
diff --git a/docs/assets/image/zh/insight/group_chat.png b/images/zh/insight/group_chat.png
similarity index 100%
rename from docs/assets/image/zh/insight/group_chat.png
rename to images/zh/insight/group_chat.png
diff --git a/docs/assets/image/zh/insight/private_chat.png b/images/zh/insight/private_chat.png
similarity index 100%
rename from docs/assets/image/zh/insight/private_chat.png
rename to images/zh/insight/private_chat.png
diff --git a/docs/assets/image/zh/plugin/dev/apis/plugin_dev_messages_01.png b/images/zh/plugin/dev/apis/plugin_dev_messages_01.png
similarity index 100%
rename from docs/assets/image/zh/plugin/dev/apis/plugin_dev_messages_01.png
rename to images/zh/plugin/dev/apis/plugin_dev_messages_01.png
diff --git a/docs/assets/image/zh/plugin/dev/components/command_use.png b/images/zh/plugin/dev/components/command_use.png
similarity index 100%
rename from docs/assets/image/zh/plugin/dev/components/command_use.png
rename to images/zh/plugin/dev/components/command_use.png
diff --git a/docs/assets/image/zh/plugin/dev/components/info_command_demo.png b/images/zh/plugin/dev/components/info_command_demo.png
similarity index 100%
rename from docs/assets/image/zh/plugin/dev/components/info_command_demo.png
rename to images/zh/plugin/dev/components/info_command_demo.png
diff --git a/images/zh/plugin/dev/components/knowledge_retriever_config.png b/images/zh/plugin/dev/components/knowledge_retriever_config.png
new file mode 100644
index 000000000..672537ec3
Binary files /dev/null and b/images/zh/plugin/dev/components/knowledge_retriever_config.png differ
diff --git a/images/zh/plugin/dev/components/knowledge_retriever_use.png b/images/zh/plugin/dev/components/knowledge_retriever_use.png
new file mode 100644
index 000000000..623d4bcb5
Binary files /dev/null and b/images/zh/plugin/dev/components/knowledge_retriever_use.png differ
diff --git a/docs/assets/image/zh/plugin/dev/components/tool_use_in_chat.png b/images/zh/plugin/dev/components/tool_use_in_chat.png
similarity index 100%
rename from docs/assets/image/zh/plugin/dev/components/tool_use_in_chat.png
rename to images/zh/plugin/dev/components/tool_use_in_chat.png
diff --git a/docs/assets/image/zh/plugin/dev/create_plugin.png b/images/zh/plugin/dev/create_plugin.png
similarity index 100%
rename from docs/assets/image/zh/plugin/dev/create_plugin.png
rename to images/zh/plugin/dev/create_plugin.png
diff --git a/docs/assets/image/zh/plugin/dev/debug_plugin_loaded.png b/images/zh/plugin/dev/debug_plugin_loaded.png
similarity index 100%
rename from docs/assets/image/zh/plugin/dev/debug_plugin_loaded.png
rename to images/zh/plugin/dev/debug_plugin_loaded.png
diff --git a/docs/assets/image/zh/plugin/dev/dist/github_release.png b/images/zh/plugin/dev/dist/github_release.png
similarity index 100%
rename from docs/assets/image/zh/plugin/dev/dist/github_release.png
rename to images/zh/plugin/dev/dist/github_release.png
diff --git a/docs/assets/image/zh/plugin/dev/launch_debug_plugin.png b/images/zh/plugin/dev/launch_debug_plugin.png
similarity index 100%
rename from docs/assets/image/zh/plugin/dev/launch_debug_plugin.png
rename to images/zh/plugin/dev/launch_debug_plugin.png
diff --git a/docs/assets/image/zh/plugin/dev/login_space.png b/images/zh/plugin/dev/login_space.png
similarity index 100%
rename from docs/assets/image/zh/plugin/dev/login_space.png
rename to images/zh/plugin/dev/login_space.png
diff --git a/docs/assets/image/zh/plugin/dev/plugin_submission.png b/images/zh/plugin/dev/plugin_submission.png
similarity index 100%
rename from docs/assets/image/zh/plugin/dev/plugin_submission.png
rename to images/zh/plugin/dev/plugin_submission.png
diff --git a/docs/assets/image/zh/plugin/dev/plugin_system_arch.png b/images/zh/plugin/dev/plugin_system_arch.png
similarity index 100%
rename from docs/assets/image/zh/plugin/dev/plugin_system_arch.png
rename to images/zh/plugin/dev/plugin_system_arch.png
diff --git a/docs/assets/image/zh/plugin/dev/space_device_flow.png b/images/zh/plugin/dev/space_device_flow.png
similarity index 100%
rename from docs/assets/image/zh/plugin/dev/space_device_flow.png
rename to images/zh/plugin/dev/space_device_flow.png
diff --git a/docs/assets/image/zh/plugin/install_from_marketplace.png b/images/zh/plugin/install_from_marketplace.png
similarity index 100%
rename from docs/assets/image/zh/plugin/install_from_marketplace.png
rename to images/zh/plugin/install_from_marketplace.png
diff --git a/docs/assets/image/zh/plugin/install_method.png b/images/zh/plugin/install_method.png
similarity index 100%
rename from docs/assets/image/zh/plugin/install_method.png
rename to images/zh/plugin/install_method.png
diff --git a/docs/assets/image/zh/plugin/pipeline_extensions.png b/images/zh/plugin/pipeline_extensions.png
similarity index 100%
rename from docs/assets/image/zh/plugin/pipeline_extensions.png
rename to images/zh/plugin/pipeline_extensions.png
diff --git a/docs/assets/image/zh/plugin/plugin_config.png b/images/zh/plugin/plugin_config.png
similarity index 100%
rename from docs/assets/image/zh/plugin/plugin_config.png
rename to images/zh/plugin/plugin_config.png
diff --git a/docs/assets/image/zh/plugin/update_plugin.png b/images/zh/plugin/update_plugin.png
similarity index 100%
rename from docs/assets/image/zh/plugin/update_plugin.png
rename to images/zh/plugin/update_plugin.png
diff --git a/docs/assets/image/zh/workshop/302ai-integration/model.png b/images/zh/workshop/302ai-integration/model.png
similarity index 100%
rename from docs/assets/image/zh/workshop/302ai-integration/model.png
rename to images/zh/workshop/302ai-integration/model.png
diff --git a/docs/assets/image/zh/workshop/dify-service-api/dify_01.png b/images/zh/workshop/dify-service-api/dify_01.png
similarity index 100%
rename from docs/assets/image/zh/workshop/dify-service-api/dify_01.png
rename to images/zh/workshop/dify-service-api/dify_01.png
diff --git a/docs/assets/image/zh/workshop/dify-service-api/dify_02.png b/images/zh/workshop/dify-service-api/dify_02.png
similarity index 100%
rename from docs/assets/image/zh/workshop/dify-service-api/dify_02.png
rename to images/zh/workshop/dify-service-api/dify_02.png
diff --git a/docs/assets/image/zh/workshop/dify-service-api/dify_03.png b/images/zh/workshop/dify-service-api/dify_03.png
similarity index 100%
rename from docs/assets/image/zh/workshop/dify-service-api/dify_03.png
rename to images/zh/workshop/dify-service-api/dify_03.png
diff --git a/docs/assets/image/zh/workshop/dify-service-api/dify_04.png b/images/zh/workshop/dify-service-api/dify_04.png
similarity index 100%
rename from docs/assets/image/zh/workshop/dify-service-api/dify_04.png
rename to images/zh/workshop/dify-service-api/dify_04.png
diff --git a/docs/assets/image/zh/workshop/dify-service-api/dify_05.png b/images/zh/workshop/dify-service-api/dify_05.png
similarity index 100%
rename from docs/assets/image/zh/workshop/dify-service-api/dify_05.png
rename to images/zh/workshop/dify-service-api/dify_05.png
diff --git a/docs/assets/image/zh/workshop/dify-service-api/dify_06.png b/images/zh/workshop/dify-service-api/dify_06.png
similarity index 100%
rename from docs/assets/image/zh/workshop/dify-service-api/dify_06.png
rename to images/zh/workshop/dify-service-api/dify_06.png
diff --git a/docs/assets/image/zh/workshop/dify-service-api/dify_07.png b/images/zh/workshop/dify-service-api/dify_07.png
similarity index 100%
rename from docs/assets/image/zh/workshop/dify-service-api/dify_07.png
rename to images/zh/workshop/dify-service-api/dify_07.png
diff --git a/docs/assets/image/zh/workshop/dify-service-api/dify_08.png b/images/zh/workshop/dify-service-api/dify_08.png
similarity index 100%
rename from docs/assets/image/zh/workshop/dify-service-api/dify_08.png
rename to images/zh/workshop/dify-service-api/dify_08.png
diff --git a/docs/assets/image/zh/workshop/dify-service-api/dify_09.png b/images/zh/workshop/dify-service-api/dify_09.png
similarity index 100%
rename from docs/assets/image/zh/workshop/dify-service-api/dify_09.png
rename to images/zh/workshop/dify-service-api/dify_09.png
diff --git a/docs/assets/image/zh/workshop/dify-service-api/dify_10.png b/images/zh/workshop/dify-service-api/dify_10.png
similarity index 100%
rename from docs/assets/image/zh/workshop/dify-service-api/dify_10.png
rename to images/zh/workshop/dify-service-api/dify_10.png
diff --git a/docs/assets/image/zh/workshop/dify-service-api/dify_11.png b/images/zh/workshop/dify-service-api/dify_11.png
similarity index 100%
rename from docs/assets/image/zh/workshop/dify-service-api/dify_11.png
rename to images/zh/workshop/dify-service-api/dify_11.png
diff --git a/docs/assets/image/zh/workshop/dify-service-api/dify_12.png b/images/zh/workshop/dify-service-api/dify_12.png
similarity index 100%
rename from docs/assets/image/zh/workshop/dify-service-api/dify_12.png
rename to images/zh/workshop/dify-service-api/dify_12.png
diff --git a/docs/assets/image/zh/workshop/dify-service-api/dify_13.png b/images/zh/workshop/dify-service-api/dify_13.png
similarity index 100%
rename from docs/assets/image/zh/workshop/dify-service-api/dify_13.png
rename to images/zh/workshop/dify-service-api/dify_13.png
diff --git a/docs/assets/image/zh/workshop/dify-service-api/dify_14.png b/images/zh/workshop/dify-service-api/dify_14.png
similarity index 100%
rename from docs/assets/image/zh/workshop/dify-service-api/dify_14.png
rename to images/zh/workshop/dify-service-api/dify_14.png
diff --git a/docs/assets/image/zh/workshop/dify-service-api/dify_workflow_var.png b/images/zh/workshop/dify-service-api/dify_workflow_var.png
similarity index 100%
rename from docs/assets/image/zh/workshop/dify-service-api/dify_workflow_var.png
rename to images/zh/workshop/dify-service-api/dify_workflow_var.png
diff --git a/docs/assets/image/zh/workshop/impl-platform-adapter/workshop_impl_platform_adapter_01.png b/images/zh/workshop/impl-platform-adapter/workshop_impl_platform_adapter_01.png
similarity index 100%
rename from docs/assets/image/zh/workshop/impl-platform-adapter/workshop_impl_platform_adapter_01.png
rename to images/zh/workshop/impl-platform-adapter/workshop_impl_platform_adapter_01.png
diff --git a/docs/assets/image/zh/workshop/newapi-integration/model.png b/images/zh/workshop/newapi-integration/model.png
similarity index 100%
rename from docs/assets/image/zh/workshop/newapi-integration/model.png
rename to images/zh/workshop/newapi-integration/model.png
diff --git a/docs/assets/image/zh/workshop/newapi-integration/model2.png b/images/zh/workshop/newapi-integration/model2.png
similarity index 100%
rename from docs/assets/image/zh/workshop/newapi-integration/model2.png
rename to images/zh/workshop/newapi-integration/model2.png
diff --git a/docs/assets/image/zh/workshop/ppio-integration/model.png b/images/zh/workshop/ppio-integration/model.png
similarity index 100%
rename from docs/assets/image/zh/workshop/ppio-integration/model.png
rename to images/zh/workshop/ppio-integration/model.png
diff --git a/docs/assets/image/zh/workshop/shengsuanyun-integration/add-llm-model.png b/images/zh/workshop/shengsuanyun-integration/add-llm-model.png
similarity index 100%
rename from docs/assets/image/zh/workshop/shengsuanyun-integration/add-llm-model.png
rename to images/zh/workshop/shengsuanyun-integration/add-llm-model.png
diff --git a/docs/assets/image/zh/workshop/shengsuanyun-integration/llm-models.png b/images/zh/workshop/shengsuanyun-integration/llm-models.png
similarity index 100%
rename from docs/assets/image/zh/workshop/shengsuanyun-integration/llm-models.png
rename to images/zh/workshop/shengsuanyun-integration/llm-models.png
diff --git a/docs/assets/image/zh/workshop/tokenpony-integration/access-api-key-page.png b/images/zh/workshop/tokenpony-integration/access-api-key-page.png
similarity index 100%
rename from docs/assets/image/zh/workshop/tokenpony-integration/access-api-key-page.png
rename to images/zh/workshop/tokenpony-integration/access-api-key-page.png
diff --git a/docs/assets/image/zh/workshop/tokenpony-integration/add-model.png b/images/zh/workshop/tokenpony-integration/add-model.png
similarity index 100%
rename from docs/assets/image/zh/workshop/tokenpony-integration/add-model.png
rename to images/zh/workshop/tokenpony-integration/add-model.png
diff --git a/docs/assets/image/zh/workshop/tokenpony-integration/get-api-key.png b/images/zh/workshop/tokenpony-integration/get-api-key.png
similarity index 100%
rename from docs/assets/image/zh/workshop/tokenpony-integration/get-api-key.png
rename to images/zh/workshop/tokenpony-integration/get-api-key.png
diff --git a/docs/assets/image/zh/workshop/tokenpony-integration/tokenpony-mainpage.png b/images/zh/workshop/tokenpony-integration/tokenpony-mainpage.png
similarity index 100%
rename from docs/assets/image/zh/workshop/tokenpony-integration/tokenpony-mainpage.png
rename to images/zh/workshop/tokenpony-integration/tokenpony-mainpage.png
diff --git a/ja/deploy/command.mdx b/ja/deploy/command.mdx
new file mode 100644
index 000000000..a6a541e84
--- /dev/null
+++ b/ja/deploy/command.mdx
@@ -0,0 +1,7 @@
+---
+title: "コマンド"
+---
+
+LangBotは`!`で始まるメッセージをコマンドとして認識します。公式では[`EssentialCommands`プラグイン](https://space.langbot.app/market?author=langbot-team&plugin=EssentialCommands)を提供しており、よく使用されるコマンドが含まれています。
+
+独自のコマンドプラグインを開発することもできます。詳細は[コマンドプラグイン開発](/en/plugin/dev/components/command)を参照してください。
diff --git a/ja/deploy/langbot/docker.mdx b/ja/deploy/langbot/docker.mdx
new file mode 100644
index 000000000..bac1e1563
--- /dev/null
+++ b/ja/deploy/langbot/docker.mdx
@@ -0,0 +1,34 @@
+---
+title: "Dockerデプロイ"
+---
+
+
+
+ - `Docker`と`Docker Compose`の使用方法
+ - Dockerコンテナネットワーク通信の設定方法
+
+
+
+- Git、Docker、Docker Composeがインストールされていることを確認してください
+
+
+プロジェクトをクローンします:
+
+```bash
+git clone https://github.com/langbot-app/LangBot
+cd LangBot/docker
+```
+
+コンテナを起動します:
+
+```bash
+docker compose up
+```
+
+コンテナはWebUIアクセス用にポート`5300`をマッピングします。`http://127.0.0.1:5300`にアクセスしてWebUIを表示できます。
+また、メッセージプラットフォームアダプター用に予約されたポート`2280-2290`もマッピングします。
+
+LangBotのデプロイ完了後、引き続き以下をお読みください:
+
+- [ボット設定ドキュメント](/en/deploy/platforms/readme)
+- [モデル設定ドキュメント](/en/deploy/models/readme)
diff --git a/ja/deploy/langbot/manual.mdx b/ja/deploy/langbot/manual.mdx
new file mode 100644
index 000000000..52dba83c7
--- /dev/null
+++ b/ja/deploy/langbot/manual.mdx
@@ -0,0 +1,43 @@
+---
+title: "手動デプロイ"
+---
+
+## メインプログラムのインストール
+
+1. [リリース](https://github.com/langbot-app/LangBot/releases)ページにアクセスし、最新バージョンのzipパッケージ(推奨)`langbot-xxx-all.zip`をダウンロードします(Source Codeはダウンロードしないでください。WebUIが含まれていません)。展開して、展開されたディレクトリでコマンドライン(ターミナル)を開きます。
+
+
+
+2. 依存関係のインストール
+
+依存関係の管理には[uv](https://docs.astral.sh/uv/)を使用します。
+
+```bash
+pip install uv
+uv sync
+```
+
+3. メインプログラムを一度実行して設定ファイルを生成します
+
+```bash
+uv run main.py
+```
+
+以下のメッセージが表示されます:
+
+```
+ _ ___ _
+| | __ _ _ _ __ _| _ ) ___| |_
+| |__/ _` | ' \/ _` | _ \/ _ \ _|
+|____\__,_|_||_\__, |___/\___/\__|
+ |___/
+
+⭐️オープンソース: https://github.com/langbot-app/LangBot
+📖ドキュメント: https://docs.langbot.app
+
+以下のファイルが存在しないため、自動的に生成されました。必要に応じて設定ファイルを変更して再起動してください:
+- data/config.yaml
+...
+```
+
+Ctrl+Cでプログラムを終了し、[ボットのデプロイ](/en/deploy/platforms/readme)ページに進んでください。
\ No newline at end of file
diff --git a/ja/deploy/langbot/one-click/1panel.mdx b/ja/deploy/langbot/one-click/1panel.mdx
new file mode 100644
index 000000000..09c965b48
--- /dev/null
+++ b/ja/deploy/langbot/one-click/1panel.mdx
@@ -0,0 +1,45 @@
+---
+title: "1Panelデプロイ"
+---
+
+[1Panel](https://www.bt.cn/new/download.html?r=dk_LangBot)を使用してLangBotをワンクリックでデプロイします。
+
+## 1Panelのインストール
+
+> 推奨サーバーシステム(1Panelより): Debian 12、Ubuntu 22など
+
+この記事では、サーバーにデフォルトでパブリックIPv4アドレスがあることを前提としています。パブリックIPのないホームマシンを使用している場合は、以下で説明する内部ネットワーク経由で関連ページにアクセスできます。
+
+[1Panel](https://www.bt.cn/new/download.html?r=dk_LangBot)にアクセスし、1Panelが公式に提供するLinuxパネルインストールスクリプトを使用します。お使いのオペレーティングシステムに応じて対応するスクリプトを選択してください。
+
+
+
+対応するスクリプトをコピーし、サーバーに貼り付けて実行します。
+
+しばらく待つと、1Panelのインストールが完了します。
+
+次に`外部アドレス`をコピーしてブラウザで開きます。
+
+## LangBotのインストール
+
+`アプリストア`を開き、`AI`カテゴリを選択し、LangBotをクリックしてインストールします。
+
+
+
+`外部ポートアクセス`のチェックボックスをオンにして、確認をクリックします。
+
+
+
+しばらく待つと、インストールが完了します。
+
+左側の`コンテナ`をクリックし、`コンテナ`カテゴリを選択すると、LangBotコンテナバーが表示されます。
+
+
+
+サーバーのパブリックIPアドレスをコピーします。例: `http://xxx.xxx.xxx.xxx:5300`(xxx.xxx.xxx.xxxは1Panelが配置されているサーバーのIPアドレス、5300はポート番号)。
+
+アドレスを開き、管理者のメールアドレスとパスワードを入力して、初期化をクリックします。
+
+その後、ビジュアルインターフェースでLangBotを設定できます。
+
+次に、[メッセージプラットフォームのデプロイ](/en/deploy/platforms/readme)ページを引き続きお読みください。
\ No newline at end of file
diff --git a/ja/deploy/langbot/one-click/bt.mdx b/ja/deploy/langbot/one-click/bt.mdx
new file mode 100644
index 000000000..0ee8c1f04
--- /dev/null
+++ b/ja/deploy/langbot/one-click/bt.mdx
@@ -0,0 +1,54 @@
+---
+title: "aaPanelデプロイ"
+---
+
+[aaPanel](https://www.bt.cn/new/download.html?r=dk_LangBot)を使用してLangBotをワンクリックでデプロイします。
+
+
+- 既にaaPanelがインストールされている場合は、バージョン**9.2.0**以上に更新してください
+
+
+
+## aaPanelのインストール
+
+> 推奨サーバーシステム(aaPanelより): Debian 12、Ubuntu 22など
+>
+> このドキュメントでは、パブリックIPv4アドレスを持つサーバーがあることを前提としています。パブリックIPのないホームマシンを使用している場合は、以下で言及する内部ネットワーク経由で関連ページにアクセスできます。
+
+[aaPanel](https://www.bt.cn/new/download.html?r=dk_LangBot)を開き、aaPanel公式が提供するLinuxパネルインストールスクリプトを使用し、お使いのシステムに基づいて対応するスクリプトを選択します。
+
+
+
+対応するスクリプトをコピーしてサーバーに貼り付けて実行します。
+
+## LangBotのインストール
+
+しばらく待つと、aaPanelのインストールが完了します。
+
+このようなメッセージが表示されますので、外部パネルアドレスをコピーしてブラウザで開きます。
+
+
+
+初めて開くと、`推奨インストールスイート`のポップアップが表示されます。閉じてスキップできます。
+
+次にサイドバーの`docker`をクリックします。初めての場合、DockerとDocker Composeサービスのインストールを求められます。プロンプトが表示されたら「今すぐインストール」をクリックするか、既にインストールされている場合は無視してください。
+
+次に`Docker -> アプリストア`に移動し、`LangBot`を検索し(大文字小文字に注意)、`インストール`をクリックし、デフォルト設定を使用します。
+
+少し待つと、`langbot_XXXX`という名前のコンテナが`実行中`として表示されます。
+
+
+
+上の画像の赤い円をクリックして実行ログを表示します。
+
+
+
+WebUI設定ページ(ビジュアル設定ページ)の外部および内部アクセスパスが表示されます。パブリックアドレスをコピーします。例: `http://xxx.xxx.xxx.xxx:5300`(xxx.xxx.xxx.xxxはaaPanelのIP、5300はポート番号で、画像に示されているように異なる場合があります)。
+
+開いた後、管理者のメールアドレスとパスワードを入力し、初期化をクリックします。
+
+その後、ビジュアルインターフェースで設定を進めることができます。
+
+JSON設定ファイルを直接変更したい場合は、上の画像に示されているローカルマッピングディレクトリを参照できます。インストールディレクトリに移動すると、`data`フォルダは設定ファイルの保存に使用され、`plugins`フォルダはプラグイン関連ファイルに使用されます。
+
+次に、[メッセージプラットフォームのデプロイ](/en/deploy/platforms/readme)ページを引き続きお読みください。
diff --git a/ja/deploy/langbot/package.mdx b/ja/deploy/langbot/package.mdx
new file mode 100644
index 000000000..df7a6d766
--- /dev/null
+++ b/ja/deploy/langbot/package.mdx
@@ -0,0 +1,15 @@
+---
+title: "パッケージマネージャーでのデプロイ"
+---
+
+
+Windows、Linux、Mac OSなどをサポート。テスト環境および個人使用シナリオに推奨。本番レベルの環境では[Dockerデプロイ](/en/deploy/langbot/docker.html)を使用してください。
+
+
+LangBotはパッケージ化されてPyPIにリリースされています。[uv](https://docs.astral.sh/uv/getting-started/installation/)をインストールしてから、空のディレクトリで以下のコマンドを実行してください:
+
+```bash
+uvx langbot@latest
+```
+
+これにより現在のディレクトリが作業ディレクトリとして設定され、`http://localhost:5300`にアクセスして使用を開始できます。
diff --git a/ja/deploy/settings.mdx b/ja/deploy/settings.mdx
new file mode 100644
index 000000000..3c727b56f
--- /dev/null
+++ b/ja/deploy/settings.mdx
@@ -0,0 +1,172 @@
+---
+title: "システム環境設定"
+---
+
+システム動作のための環境情報を設定します。`data/config.yaml`ファイルに配置されています。
+通常、変更は必要ありません。
+
+```yaml
+# 管理者セッションリスト、コマンド処理時のみ有効
+# 形式はセッションID(person_xxxxまたはgroup_xxxx)
+# セッションIDはメッセージ送信時のコンソールログで確認できます
+# 例:
+# admins:
+# - person_1234567890
+# - group_1234567890
+admins: []
+
+# APIポート
+api:
+ port: 5300
+ # LangBotはWebhookリスニングを必要とするすべてのボットアドレスを一元管理します
+ # これはWebhook接続を必要とするボットページに表示されるWebhookアドレスプレフィックスです
+ # ネットワーク環境に応じて変更できます
+ webhook_prefix: 'http://127.0.0.1:5300'
+
+# コマンド設定
+command:
+ # コマンドプレフィックス、これらのプレフィックスを持つメッセージはコマンドとして認識されます
+ prefix:
+ - '!'
+ - !
+
+ # コマンド権限設定、キーはコマンドプレフィックス、値は権限タイプ
+ privilege: {}
+
+# 同時実行設定
+concurrency:
+ # 単一パイプライン同時実行
+ pipeline: 20
+ # 単一セッション同時実行
+ session: 1
+
+# データベース設定
+database:
+ # 使用するデータベース
+ # サポートされているデータベース:
+ # - sqlite (ローカルSQLiteデータベース、デフォルト)
+ # - postgresql (PostgreSQLデータベース、以下で設定してください)
+ use: sqlite
+ # SQLite設定
+ sqlite:
+ path: 'data/langbot.db'
+ # PostgreSQL設定
+ postgresql:
+ host: '127.0.0.1'
+ port: 5432
+ database: 'postgres'
+ user: 'postgres'
+ password: 'postgres'
+
+# プラグインシステム設定
+plugin:
+ # プラグインシステムを有効にするか
+ enable: true
+ # プラグインランタイムWebSocketアドレス
+ # Docker環境のデフォルト値
+ # スタンドアロンのPlugin Runtimeを使用する場合は、https://docs.langbot.app/en/develop/plugin-runtime.htmlを参照してください
+ runtime_ws_url: 'ws://langbot_plugin_runtime:5400/control/ws'
+ # プラグインマーケットプレイスを有効にするか
+ enable_marketplace: true
+ # プラグインマーケットプレイスURL
+ cloud_service_url: 'https://space.langbot.app'
+
+# プロキシ設定
+proxy:
+ # HTTPプロキシアドレス
+ # プロキシが既に環境変数に設定されている場合、設定は不要です
+ # 例:
+ # proxy:
+ # http: 'http://127.0.0.1:7890'
+ # https: 'http://127.0.0.1:7890'
+ http: ''
+ https: ''
+
+# オブジェクトストレージ設定
+storage:
+ # 使用するオブジェクトストレージ
+ # サポートされているオブジェクトストレージ:
+ # - local (ローカルストレージ、デフォルト)
+ # - s3 (S3プロトコルオブジェクトストレージ、R2、MinIOなどをサポート。以下で設定してください)
+ use: local
+ # S3設定
+ s3:
+ endpoint_url: ''
+ access_key_id: ''
+ secret_access_key: ''
+ region: 'us-east-1'
+ bucket: 'langbot-storage'
+
+# システム設定
+system:
+ # JWT設定
+ jwt:
+ # JWT有効期限(秒)
+ expire: 604800
+ # JWTシークレットキー、最初の起動時に自動生成されます
+ secret: 'xxxx'
+ # パスワード変更を許可するか
+ allow_change_password: true
+ # 復旧キー
+ recovery_key: 'xxxx'
+
+# ベクトルデータベース設定
+vdb:
+ # 使用するベクトルデータベース
+ # サポートされているベクトルデータベース:
+ # - chroma (デフォルト、組み込みベクトルデータベース)
+ # - qdrant (外部ベクトルデータベース、以下で設定してください)
+ # - milvus (スケーラブルベクトルデータベース、以下で設定してください)
+ # - pgvector (PostgreSQL拡張、以下で設定してください)
+ # - seekdb (組み込み埋め込みモデルを提供するデータベース、以下で設定してください)
+ use: chroma
+ # Qdrant設定
+ qdrant:
+ # Qdrant URL
+ url: ''
+ # Qdrant Host
+ host: localhost
+ # Qdrant Port
+ port: 6333
+ # Qdrant API Key
+ api_key: ''
+ # Milvus設定
+ milvus:
+ uri: 'http://127.0.0.1:19530'
+ token: ''
+ # pgvector設定
+ pgvector:
+ host: '127.0.0.1'
+ port: 5433
+ database: 'langbot'
+ user: 'postgres'
+ password: 'postgres'
+ seekdb:
+ # 動作モード('embedded' または 'server')
+ mode: embedded
+ # 組み込みモード設定:
+ path: './data/seekdb'
+ database: 'langbot'
+ # サーバーモード設定(mode='server'の場合に有効):
+ host: 'localhost'
+ port: 2881
+ user: 'root'
+ password: ''
+ # OceanBaseマルチテナントシナリオ用、オプション
+ tenant: ''
+```
+
+## 環境変数による設定
+
+`config.yaml`の設定は環境変数を介して設定できます。環境変数名は大文字で、二重アンダースコアで接続されます。例: `API__PORT`は`api.port`を表します。
+
+- `API__PORT`は`api.port`を表します
+- `CONCURRENCY__PIPELINE`は`concurrency.pipeline`を表します
+- `CONCURRENCY__SESSION`は`concurrency.session`を表します
+- `DATABASE__POSTGRESQL__DATABASE`は`database.postgresql.database`を表します
+- `DATABASE__POSTGRESQL__HOST`は`database.postgresql.host`を表します
+- `DATABASE__SQLITE__PATH`は`database.sqlite.path`を表します
+
+...
+
+起動時、LangBotはすべての環境変数を読み取り、対応する設定を`config.yaml`に適用して`data/config.yaml`ファイルに書き込みます。
diff --git a/ja/deploy/update.mdx b/ja/deploy/update.mdx
new file mode 100644
index 000000000..57b4f44ea
--- /dev/null
+++ b/ja/deploy/update.mdx
@@ -0,0 +1,37 @@
+---
+title: "LangBotの更新"
+---
+
+## パッケージマネージャーを使用
+
+LangBotをデプロイしたディレクトリで再度実行してください:
+
+```bash
+uvx langbot@latest
+```
+
+このコマンドは最新バージョンのLangBotをダウンロードして起動します。
+
+## Dockerを使用(またはDockerベースのワンクリックデプロイ)
+
+LangBotをクローンしたディレクトリで実行してください:
+
+```bash
+git pull
+```
+
+`docker/`ディレクトリで実行してください:
+
+```bash
+docker compose up --force-recreate --pull always -d
+```
+
+このコマンドは最新のLangBotイメージをプルしてコンテナを再構築します。
+
+
+4.3.0バージョンでは`docker-compose.yaml`ファイルの内容と場所が変更されました。以前のバージョンから更新した場合は、[ドキュメントに従って再デプロイ](/en/deploy/langbot/docker)してください。
+
+
+## 手動デプロイ
+
+[リリース](https://github.com/langbot-app/LangBot/releases)ページのAssetsセクションから最新リリースの`langbot--all.zip`をダウンロードし、元のデプロイディレクトリに展開して再起動してください。
diff --git a/ja/develop/comp-arch.mdx b/ja/develop/comp-arch.mdx
new file mode 100644
index 000000000..b5c71ce8c
--- /dev/null
+++ b/ja/develop/comp-arch.mdx
@@ -0,0 +1,5 @@
+---
+title: "コンポーネントアーキテクチャ"
+---
+
+
diff --git a/ja/develop/dev-config.mdx b/ja/develop/dev-config.mdx
new file mode 100644
index 000000000..d3d84c51a
--- /dev/null
+++ b/ja/develop/dev-config.mdx
@@ -0,0 +1,72 @@
+---
+title: "開発設定"
+---
+
+LangBotはフロントエンドとバックエンドに分かれています。フロントエンドはNext.js + shadcnを使用して開発され、バックエンドはQuart(Flaskの非同期版)を使用して開発されています。
+
+## バックエンド
+
+コードは`pkg`ディレクトリにあり、ルートディレクトリの`main.py`ファイルによって起動されます。
+
+依存関係をインストールします。依存関係の管理にはuvを使用します。
+
+```bash
+pip install uv
+uv sync --dev
+```
+
+バックエンドを起動します
+
+```bash
+uv run main.py
+```
+
+この時点で、設定ファイルは`data/config.yaml`ファイルに自動的に生成されます。
+
+## フロントエンド
+
+コードは`web`ディレクトリにあり、Node.jsと[pnpm](https://pnpm.io/installation)が必要です。
+
+`.env.example`を`.env`にコピーして、値を入力します。
+
+- Linuxおよびその他の環境での使用
+
+```bash
+cp .env.example .env
+```
+
+- Windows環境での使用
+
+```bash
+copy .env.example .env
+```
+
+依存関係をインストールしてフロントエンドを起動します
+
+```bash
+pnpm install
+pnpm dev
+
+# pnpmがインストールされていない場合は、npmを使用して依存関係を解決して起動することもできます
+npm install
+npm run dev
+```
+
+その後、出力情報に従って、`http://127.0.0.1:3000`にアクセスして、スタンドアロンフロントエンドページを表示します。
+
+
+
+本番環境では、フロントエンドは静的ファイルにプリコンパイルされ、バックエンドによって提供され、フロントエンドは同じドメインのバックエンドアドレスに自動的にアクセスします。
+
+
+## コードフォーマット
+
+リポジトリにはlintとformatのチェックワークフローが含まれており、コードをプッシュすると自動的にチェックされます。pre-commitを設定して、コードをローカルで事前にチェックしてください。
+
+```bash
+uv run pre-commit install
+```
+
+## APIドキュメント
+
+各インターフェースを開発する前に、APIFoxでAPIドキュメントを作成します。[APIドキュメント(中国語)](https://ok52vhsenr.apifox.cn/)を参照してください。
diff --git a/ja/develop/plugin-runtime.mdx b/ja/develop/plugin-runtime.mdx
new file mode 100644
index 000000000..c60903242
--- /dev/null
+++ b/ja/develop/plugin-runtime.mdx
@@ -0,0 +1,71 @@
+---
+title: "プラグインランタイム、CLI、SDKのデバッグ"
+---
+
+
+ プラグインランタイム、CLI、SDKはこちらでオープンソース化されています: https://github.com/langbot-app/langbot-plugin-sdk
+
+
+プラグインランタイムのソースコードをクローンします:
+
+```bash
+git clone https://github.com/langbot-app/langbot-plugin-sdk
+```
+
+プラグインランタイムディレクトリに移動し、依存関係をインストールします:
+
+```bash
+cd langbot-plugin-sdk
+uv sync --dev
+```
+
+この時点で、uvは自動的に仮想環境(.venv)を作成します。エディターがこの仮想環境を使用するかどうかを尋ねる場合は、`Yes`を選択してください。
+
+または、この仮想環境を手動でアクティブ化できます:
+
+```bash
+source .venv/bin/activate
+```
+
+## プラグインランタイムの起動
+
+```bash
+lbp rt
+```
+
+`lbp`コマンドがこのディレクトリの仮想環境の`lbp`実行可能ファイルであることを確認するか、`python -m langbot_plugin.cli.__init__ rt`で起動してください。
+
+プラグインランタイムは以下のパラメーターを受け入れます:
+
+- `--debug-only`: `data/plugins`ディレクトリのプラグインを起動せず、デバッグ接続を通じたプラグインの読み込みのみを許可します。
+- `--ws-debug-port`: リッスンするデバッグポート、デフォルトは`5401`です。
+- `--ws-control-port`: リッスンする制御ポート(LangBotメインプログラム接続用)、デフォルトは`5400`です。
+- `-s`: `stdio`を使用して制御接続を受け入れます。**本番環境でのみ使用してください**。
+- `--skip-deps-check`: すべてのプラグイン依存関係がインストールされていることを確認するため、ランタイムは起動時に毎回すべてのインストール済みプラグインの依存関係をチェックしてインストールします。このパラメーターを使用してこのチェックを無効にします。
+
+### LangBotをこのランタイムに接続する
+
+LangBotの`data/config.yaml`で`plugin.runtime_ws_url`を`ws://localhost:5400/control/ws`に設定します。
+
+```yaml
+plugin:
+ runtime_ws_url: ws://localhost:5400/control/ws
+```
+
+そして、LangBotメインプログラムの起動時に起動パラメーター`--standalone-runtime`を追加します(例: `uv run main.py --standalone-runtime`)。 LangBotを再起動すると、WebSocketを使用してこのランタイムに接続されます。
+
+## langbot-plugin-sdkアーキテクチャ
+
+このコードベースには以下が含まれています:
+
+- `langbot_plugin.api`: プラグイン関連のエンティティとAPI定義。
+- `langbot_plugin.assets`: プラグインテンプレート。
+- `langbot_plugin.cli`: プラグイン開発CLIツール。
+- `langbot_plugin.entities`: APIで定義されていないプラグインシステム関連のエンティティ。
+- `langbot_plugin.runtime`: プラグインランタイムと基礎通信(stdioおよびwebsocket)の実装。
+
+## `lbp` CLIツール
+
+CLIツールは、ランタイムの起動、プラグインの初期化、プラグインコンポーネント管理、Marketplaceとのインタラクションなどの機能を提供します。
+
+詳細なプログラムエントリポイントについては、[`langbot_plugin.cli.__init__`](https://github.com/langbot-app/langbot-plugin-sdk/blob/main/src/langbot_plugin/cli/__init__.py)を参照してください。
\ No newline at end of file
diff --git a/ja/insight/community.mdx b/ja/insight/community.mdx
new file mode 100644
index 000000000..f022d1be8
--- /dev/null
+++ b/ja/insight/community.mdx
@@ -0,0 +1,13 @@
+---
+title: "コミュニティリソース"
+---
+
+
+## 簡易チュートリアル
+> 簡易チュートリアル:ビデオチュートリアル、より簡単なテキストチュートリアルなど、初心者に適しています
+
+こちらで収集されています: https://blog.thelazy.top/tags/langbot
+
+## 🥰 コミュニティ
+
+Discordコミュニティに参加してください: [](https://discord.gg/wdNEHETs87)
diff --git a/ja/insight/features.mdx b/ja/insight/features.mdx
new file mode 100644
index 000000000..c95a1598e
--- /dev/null
+++ b/ja/insight/features.mdx
@@ -0,0 +1,84 @@
+---
+title: "機能"
+---
+
+LangBotは、オープンソースのLLMネイティブインスタントメッセージングロボット開発プラットフォームであり、すぐに使えるIMロボット開発体験を提供することを目的としています。Agent、RAG、MCPなどのLLMアプリケーション機能を備え、グローバルなインスタントメッセージングプラットフォームをサポートし、豊富なAPIインターフェースを提供し、カスタム開発をサポートします。
+
+## インスタントメッセージングプラットフォームのサポート
+
+| プラットフォーム | ステータス | 備考 |
+| --- | --- | --- |
+| QQ個人アカウント | ✅ | OneBot11プロトコルをサポートするサードパーティアプリケーションによりサポート、QQ個人プライベートチャットとグループチャットをサポート |
+| QQ公式ボット | ✅ | QQ公式ボット、チャンネル、プライベートチャット、グループチャットをサポート |
+| 企業微信 | ✅ | |
+| 企業微信インテリジェントボット | ✅ | ストリーミング出力をサポート |
+| 企業微信カスタマーサービス | ✅ | |
+| WeChat公式アカウント | ✅ | |
+| Lark | ✅ | ストリーミング出力をサポート |
+| DingTalk | ✅ | ストリーミング出力をサポート |
+| Discord | ✅ | |
+| Telegram | ✅ | ストリーミング出力をサポート |
+| Slack | ✅ | |
+| LINE | ✅ | |
+| KOOK | ✅ | |
+| WhatsApp | 🚧 | |
+
+🚧: 開発中
+
+各インスタントメッセージングプラットフォームの機能サポートについては、[こちらのドキュメント](/ja/insight/platform-features)をご覧ください。
+
+## モデルとLLMOpsプラットフォームのサポート
+
+| プロバイダー/サービス | ステータス | 備考 |
+| --- | --- | --- |
+| [OpenAI](https://platform.openai.com/) | ✅ | 任意のOpenAIインターフェース形式のモデルに利用可能 |
+| [DeepSeek](https://www.deepseek.com/) | ✅ | |
+| [Moonshot](https://www.moonshot.cn/) | ✅ | |
+| [Anthropic](https://www.anthropic.com/) | ✅ | |
+| [xAI](https://x.ai/) | ✅ | |
+| [Zhipu AI](https://open.bigmodel.cn/) | ✅ | |
+| [ShengSuanYun](https://www.shengsuanyun.com/?from=CH_KYIPP758) | ✅ | グローバルLLM集約プラットフォーム(推奨) |
+| [CompShare](https://www.compshare.cn/?ytag=GPU_YY-gh_langbot) | ✅ | LLMおよびGPUリソースプラットフォーム |
+| [PPIO](https://ppio.com/user/register?invited_by=QJKFYD&utm_source=github_langbot) | ✅ | LLMおよびGPUリソースプラットフォーム |
+| [302.AI](https://share.302.ai/SuTG99) | ✅ | LLMゲートウェイ(MaaS) |
+| [Google Gemini](https://aistudio.google.com/prompts/new_chat) | ✅ | |
+| [Dify](https://dify.ai) | ✅ | LLMOpsプラットフォーム |
+| [n8n](https://n8n.io/) | ✅ | LLMOpsプラットフォーム |
+| [Langflow](https://langflow.org/) | ✅ | LLMOpsプラットフォーム |
+| [Ollama](https://ollama.com/) | ✅ | ローカルLLM実行プラットフォーム |
+| [LMStudio](https://lmstudio.ai/) | ✅ | ローカルLLM実行プラットフォーム |
+| [GiteeAI](https://ai.gitee.com/) | ✅ | LLMインターフェースゲートウェイ(MaaS) |
+| [SiliconFlow](https://siliconflow.cn/) | ✅ | LLMゲートウェイ(MaaS) |
+| [Aliyun Bailian](https://bailian.console.aliyun.com/) | ✅ | LLMゲートウェイ(MaaS)、LLMOpsプラットフォーム |
+| [Volc Engine Ark](https://console.volcengine.com/ark/region:ark+cn-beijing/model?vendor=Bytedance&view=LIST_VIEW) | ✅ | LLMゲートウェイ(MaaS)、LLMOpsプラットフォーム |
+| [ModelScope](https://modelscope.cn/docs/model-service/API-Inference/intro) | ✅ | LLMゲートウェイ(MaaS) |
+| [TBox(蚂蚁百宝箱)](https://tbox.cn/) | ✅ | LLMOpsプラットフォーム |
+| [Coze](https://coze.cn) | ✅ | LLMOpsプラットフォーム |
+
+## LLMアプリケーションパラダイムの実装
+
+| アプリケーションパラダイム | ステータス | 備考 |
+| --- | --- | --- |
+| Agent | ✅ | |
+| RAG | ✅ | ベクトルデータベースとしてChromaを使用 |
+| MCP | ✅ | StdioおよびHTTPプロトコルをサポート |
+
+## システムの拡張性
+
+- HTTP Service API: APIキー認証を使用して、HTTP APIインターフェースを通じてLangBotのさまざまなエンティティにアクセスすることをサポートします。
+- Outgoing Webhook: Webhookを通じてLangBotの内部イベントを外部システムに送信することをサポートします。
+- プロダクショングレードのプラグインシステム: クロスプロセス通信技術と非同期技術に基づいたプロダクショングレードのプラグインシステムで、さまざまなコンポーネント拡張をサポートします。
+
+## ケーススクリーンショット
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/ja/insight/guide.mdx b/ja/insight/guide.mdx
new file mode 100644
index 000000000..ffff6d017
--- /dev/null
+++ b/ja/insight/guide.mdx
@@ -0,0 +1,41 @@
+---
+title: "LangBotドキュメントへようこそ"
+---
+
+LangBotは、オープンソースの大規模言語モデル(LLM)ネイティブインスタントメッセージングボットプラットフォームで、複数のメッセージングプラットフォームとモデルプロバイダーをサポートしています。DifyなどのLLMOpsプラットフォームのサポートを提供します。また、ユーザーが迅速にデプロイして使用できるWebUIを提供します。
+
+## ドキュメント構成
+
+ドキュメントは以下のセクションに分かれています:
+
+- デプロイと使用(必読): LangBotのデプロイと使用に関する詳細な手順
+- プラグイン: プラグインの使用と開発に関する情報
+- 実践: LangBotの多くの優れたユースケース
+- 開発: LangBot開発への参加に関する情報
+
+## クイックスタートガイド
+
+> すぐに始める2つの方法:
+>
+> - コミュニティリソースの簡易チュートリアルを使用する(左サイドバーを参照)
+> - ドキュメントを読んで自分でデプロイする(以下の方法を参照)
+
+### 1. LangBotをデプロイする
+
+左側の**LangBotのデプロイ**セクションを読み、LangBotをデプロイする方法を選択してください
+
+デプロイ後、`http://127.0.0.1:5300`または`http://your-server-public-ip:5300`を開きます
+
+メールアドレスとパスワードを入力して初期化を完了し、必ず保存してください
+
+### 2. ボットを設定する
+
+左サイドバーの[ボットの設定](/en/deploy/platforms/readme)を確認してください
+
+### 3. モデルを設定する
+
+左サイドバーの[対話モデルの設定](/en/deploy/models/readme)を確認してください
+
+
+
+上記の2つのステップを完了すると、LangBotの使用を開始できます。さらに多くの機能を設定する必要がある場合は、[Pipeline](/en/deploy/pipelines/readme)セクションで設定できます
diff --git a/ja/insight/platform-features.mdx b/ja/insight/platform-features.mdx
new file mode 100644
index 000000000..e862c3ec2
--- /dev/null
+++ b/ja/insight/platform-features.mdx
@@ -0,0 +1,231 @@
+---
+title: "各メッセージプラットフォームの機能サポート"
+---
+
+以下は各プラットフォームで実装およびテスト済みの機能リストです。予期しない動作が発生した場合は、[GitHub Issues](https://github.com/langbot-app/LangBot/issues)に報告するか、Pull Requestを直接提出して修正にご協力ください。
+
+## OneBot v11
+
+### 受信
+
+| 機能 | ステータス | 備考 |
+| --- | --- | --- |
+| プライベートメッセージの受信 | ✅ | |
+| グループメンションメッセージの受信 | ✅ | |
+| グループ通常メッセージの受信 | ✅ | |
+| 画像メッセージの受信 | ✅ | |
+| 音声メッセージの受信 | ✅ | |
+| ファイルメッセージの受信 | ✅ | |
+| リッチテキストメッセージの受信 | ✅ | テキストと画像の組み合わせ |
+| プライベートメッセージイベントのユーザー名取得 | ✅ | |
+| グループメッセージイベントのグループ名取得 | ✅ | |
+| グループメッセージイベントの送信者名取得 | ✅ | |
+
+### 送信
+
+| 機能 | ステータス | 備考 |
+| --- | --- | --- |
+| プライベートメッセージへの返信 | ✅ | |
+| グループメッセージへの返信 | ✅ | |
+| 画像メッセージでの返信 | ✅ | |
+| 音声メッセージでの返信 | ✅ | |
+| ファイルメッセージでの返信 | ✅ | |
+| リッチテキストメッセージでの返信 | ✅ | テキストと画像の組み合わせ |
+| 能動的メッセージの送信 | ✅ | |
+| ストリーミングレスポンスの送信 | ❌ | |
+
+## QQ公式ボット
+
+## 企業微信(内部アプリケーション)
+
+### 受信
+
+| 機能 | ステータス | 備考 |
+| --- | --- | --- |
+| プライベートメッセージの受信 | ✅ | |
+| グループメンションメッセージの受信 | ❌ | 企業微信内部アプリケーションはグループ追加をサポートしていません |
+| グループ通常メッセージの受信 | ❌ | |
+| 画像メッセージの受信 | ✅ | |
+| 音声メッセージの受信 | ✅ | |
+| ファイルメッセージの受信 | ✅ | |
+| リッチテキストメッセージの受信 | ❌ | |
+| プライベートメッセージイベントのユーザー名取得 | ✅ | |
+| グループメッセージイベントのグループ名取得 | ❌ | |
+| グループメッセージイベントの送信者名取得 | ❌ | |
+
+### 送信
+
+| 機能 | ステータス | 備考 |
+| --- | --- | --- |
+| プライベートメッセージへの返信 | ✅ | |
+| グループメッセージへの返信 | ❌ | |
+| 画像メッセージでの返信 | ✅ | |
+| 音声メッセージでの返信 | ✅ | |
+| ファイルメッセージでの返信 | ✅ | |
+| リッチテキストメッセージでの返信 | ❌ | |
+| 能動的メッセージの送信 | ✅ | |
+| ストリーミングレスポンスの送信 | ❌ | |
+
+## 企業微信(カスタマーサービス)
+
+## 企業微信インテリジェントボット
+
+## WeChat公式アカウント
+
+## Lark
+
+### 受信
+
+| 機能 | ステータス | 備考 |
+| --- | --- | --- |
+| プライベートメッセージの受信 | ✅ | |
+| グループメンションメッセージの受信 | ✅ | |
+| グループ通常メッセージの受信 | ❌ | Larkはボットをメンションしたメッセージのみ受信可能 |
+| 画像メッセージの受信 | ✅ | |
+| 音声メッセージの受信 | ❌ | Larkには音声メッセージがありません |
+| ファイルメッセージの受信 | ✅ | |
+| リッチテキストメッセージの受信 | ✅ | テキストと画像の組み合わせ |
+| プライベートメッセージイベントのユーザー名取得 | ❌ | Larkはユーザー名の取得をサポートしていません |
+| グループメッセージイベントのグループ名取得 | ❌ | Larkはグループ名の取得をサポートしていません |
+| グループメッセージイベントの送信者名取得 | ❌ | Larkは送信者名の取得をサポートしていません |
+
+### 送信
+
+| 機能 | ステータス | 備考 |
+| --- | --- | --- |
+| プライベートメッセージへの返信 | ✅ | |
+| グループメッセージへの返信 | ✅ | |
+| 画像メッセージでの返信 | ✅ | |
+| 音声メッセージでの返信 | ❌ | |
+| ファイルメッセージでの返信 | ❌ | |
+| リッチテキストメッセージでの返信 | ❌ | |
+| 能動的メッセージの送信 | ✅ | |
+| ストリーミングレスポンスの送信 | ✅ | |
+
+## DingTalk
+
+### 受信
+
+| 機能 | ステータス | 備考 |
+| --- | --- | --- |
+| プライベートメッセージの受信 | ✅ | |
+| グループメンションメッセージの受信 | ✅ | |
+| グループ通常メッセージの受信 | ❌ | DingTalkはボットをメンションしたメッセージのみ受信可能 |
+| 画像メッセージの受信 | ✅ | |
+| 音声メッセージの受信 | ✅ | |
+| ファイルメッセージの受信 | ✅ | |
+| リッチテキストメッセージの受信 | ✅ | テキストと画像の組み合わせ |
+| プライベートメッセージイベントのユーザー名取得 | ✅ | |
+| グループメッセージイベントのグループ名取得 | ✅ | |
+| グループメッセージイベントの送信者名取得 | ✅ | |
+
+### 送信
+
+| 機能 | ステータス | 備考 |
+| --- | --- | --- |
+| プライベートメッセージへの返信 | ✅ | |
+| グループメッセージへの返信 | ✅ | |
+| 画像メッセージでの返信 | ✅ | |
+| 音声メッセージでの返信 | ❌ | |
+| ファイルメッセージでの返信 | ❌ | |
+| リッチテキストメッセージでの返信 | ✅ | テキストと画像の組み合わせ |
+| 能動的メッセージの送信 | ✅ | |
+| ストリーミングレスポンスの送信 | ✅ | |
+
+## KOOK
+
+P.S. 音声とファイルの送信にエラーがあり、未修正
+
+### 受信
+
+| 機能 | ステータス | 備考 |
+| --- | --- | --- |
+| プライベートメッセージの受信 | ✅ | |
+| グループメンションメッセージの受信 | ✅ | |
+| グループ通常メッセージの受信 | ✅ | |
+| 画像メッセージの受信 | ✅ | |
+| 音声メッセージの受信 | ✅ | |
+| ファイルメッセージの受信 | ✅ | |
+| リッチテキストメッセージの受信 | ✅ | テキストと画像の組み合わせ |
+| プライベートメッセージイベントのユーザー名取得 | ✅ | |
+| グループメッセージイベントのグループ名取得 | ✅ | |
+| グループメッセージイベントの送信者名取得 | ✅ | |
+
+### 送信
+
+| 機能 | ステータス | 備考 |
+| --- | --- | --- |
+| プライベートメッセージへの返信 | ✅ | |
+| グループメッセージへの返信 | ✅ | |
+| 画像メッセージでの返信 | ✅ | |
+| 音声メッセージでの返信 | ❌ | KOOKは音声メッセージでの返信をサポートしていません |
+| ファイルメッセージでの返信 | ❌ | |
+| リッチテキストメッセージでの返信 | ✅ | テキストと画像の組み合わせ |
+| 能動的メッセージの送信 | ✅ | |
+| ストリーミングレスポンスの送信 | ❌ | |
+
+## Discord
+
+### 受信
+
+| 機能 | ステータス | 備考 |
+| --- | --- | --- |
+| プライベートメッセージの受信 | ✅ | |
+| グループメンションメッセージの受信 | ✅ | |
+| グループ通常メッセージの受信 | ✅ | |
+| 画像メッセージの受信 | ✅ | |
+| 音声メッセージの受信 | ❌ | |
+| ファイルメッセージの受信 | ✅ | |
+| リッチテキストメッセージの受信 | ✅ | テキストと画像の組み合わせ |
+| プライベートメッセージイベントのユーザー名取得 | ✅ | |
+| グループメッセージイベントのグループ名取得 | ✅ | |
+| グループメッセージイベントの送信者名取得 | ✅ | |
+
+### 送信
+
+| 機能 | ステータス | 備考 |
+| --- | --- | --- |
+| プライベートメッセージへの返信 | ✅ | |
+| グループメッセージへの返信 | ✅ | |
+| 画像メッセージでの返信 | ✅ | ファイル添付として送信 |
+| 音声メッセージでの返信 | ✅ | ファイル添付として送信 |
+| ファイルメッセージでの返信 | ✅ | |
+| リッチテキストメッセージでの返信 | ✅ | テキストとファイルの組み合わせ |
+| 能動的メッセージの送信 | ✅ | |
+| ストリーミングレスポンスの送信 | ❌ | |
+
+## Telegram
+
+P.S. 未テスト
+
+### 受信
+
+| 機能 | ステータス | 備考 |
+| --- | --- | --- |
+| プライベートメッセージの受信 | ✅ | |
+| グループメンションメッセージの受信 | ✅ | |
+| グループ通常メッセージの受信 | ✅ | |
+| 画像メッセージの受信 | ✅ | |
+| 音声メッセージの受信 | ❌ | |
+| ファイルメッセージの受信 | ✅ | |
+| リッチテキストメッセージの受信 | ✅ | |
+| プライベートメッセージイベントのユーザー名取得 | ✅ | |
+| グループメッセージイベントのグループ名取得 | ✅ | |
+| グループメッセージイベントの送信者名取得 | ✅ | |
+
+### 送信
+
+| 機能 | ステータス | 備考 |
+| --- | --- | --- |
+| プライベートメッセージへの返信 | ✅ | |
+| グループメッセージへの返信 | ✅ | |
+| 画像メッセージでの返信 | ✅ | |
+| 音声メッセージでの返信 | ✅ | |
+| ファイルメッセージでの返信 | ✅ | |
+| リッチテキストメッセージでの返信 | ✅ | |
+| 能動的メッセージの送信 | ✅ | |
+| ストリーミングレスポンスの送信 | ❌ | |
+
+## Slack
+
+## LINE
diff --git a/ja/plugin/compatibility.mdx b/ja/plugin/compatibility.mdx
new file mode 100644
index 000000000..50b60b7dc
--- /dev/null
+++ b/ja/plugin/compatibility.mdx
@@ -0,0 +1,17 @@
+---
+title: "システム互換性"
+---
+
+LangBotのプラグインシステムは、`Asyncio`や`Subprocess`などのメカニズムを利用しています。これらはUnix系システム(LinuxやmacOSなど)では正常に動作しますが、Windowsではいくつかの問題があり、プラグインが正常に動作しない場合があります。
+
+PythonのWindowsでの非同期イベントループはデフォルトで`ProactorEventLoop`を使用しますが、このイベントループはStdioのサポートが不足しています。一方、LangBotは非Docker環境においてStdioを使用してPlugin Runtimeと通信し、Plugin Runtimeもプラグインとの通信にStdioを使用します。
+
+`SelectorEventLoop`に切り替えた場合、`SelectorEventLoop`は`Subprocess`をサポートしていないため、Plugin Runtimeとプラグインが正常に起動できなくなります。
+
+これらの問題の詳細については、次を参照してください: [Python公式ドキュメント](https://docs.python.org/3.13/library/asyncio-platforms.html)
+
+## 解決策
+
+Unix系システムにおけるサブプロセス管理とStdio通信の密結合とは異なり、LangBotとPlugin RuntimeはWindows上で自動的にハイブリッドなサブプロセス + WebSocket通信戦略に切り替わります。LangBotは引き続きサブプロセスを介してPlugin Runtimeを起動しますが、WebSocketで通信します。同様に、Plugin Runtimeは各インストール済みプラグインをサブプロセスで起動しながら、WebSocketを通じて通信します。
+
+この動作はOSに基づいて自動的に選択されるため、手動での設定は不要です。
diff --git a/ja/plugin/dev/apis/common.mdx b/ja/plugin/dev/apis/common.mdx
new file mode 100644
index 000000000..e93d48404
--- /dev/null
+++ b/ja/plugin/dev/apis/common.mdx
@@ -0,0 +1,310 @@
+---
+title: "プラグイン共通API"
+---
+
+LangBotは、プラグインがさまざまなLangBotモジュールを操作し、メッセージコンテキストを制御するための一連のAPIを提供します。
+
+## リクエストAPI
+
+現在処理中のユーザーリクエスト(メッセージ)に対する操作です。`EventListener`と`Command`コンポーネントでのみ使用可能です。アクセス方法:
+
+- `EventListener`のイベントハンドラメソッド内: `event_context: context.EventContext`オブジェクトの内部メソッド
+- `Command`のサブコマンドハンドラメソッド内: `context: ExecuteContext`オブジェクトの内部メソッド
+
+### 直接返信メッセージ
+
+現在のリクエストが存在するセッションにメッセージチェーンで直接返信します。
+
+メッセージチェーンの構築方法については、[メッセージプラットフォームエンティティ](/en/plugin/dev/apis/messages)を参照してください。
+
+```python
+async def reply(
+ self, message_chain: platform_message.MessageChain, quote_origin: bool = False
+):
+ """メッセージリクエストに返信する
+
+ Args:
+ message_chain (platform.types.MessageChain): LangBotメッセージチェーン
+ quote_origin (bool): 元のメッセージを引用するかどうか
+ """
+
+# 使用例
+await event_context.reply(
+ platform_message.MessageChain([
+ platform_message.Plain(text="Hello, world!"),
+ ]),
+)
+```
+
+### Bot UUIDの取得
+
+現在のリクエストを発行したBotのUUIDを取得します。
+
+```python
+async def get_bot_uuid(self) -> str:
+ """Bot UUIDを取得する"""
+
+# 使用例
+bot_uuid = await event_context.get_bot_uuid()
+```
+
+### リクエスト変数の設定
+
+単一のリクエスト内の一部の情報は、リクエスト変数に保存されます。Difyなどの外部LLMOpsプラットフォームを使用する場合、[これらの変数はLLMOpsプラットフォームに明示的に渡されます](/en/deploy/pipelines/readme.html#request-variables)。
+
+```python
+async def set_query_var(self, key: str, value: Any):
+ """クエリ変数を設定する"""
+
+# 使用例
+await event_context.set_query_var("key", "value")
+```
+
+### リクエスト変数の取得
+
+単一のリクエスト変数を取得します。
+
+```python
+async def get_query_var(self, key: str) -> Any:
+ """クエリ変数を取得する"""
+
+# 使用例
+query_var = await event_context.get_query_var("key")
+```
+
+### すべてのリクエスト変数の取得
+
+```python
+async def get_query_vars(self) -> dict[str, Any]:
+ """すべてのクエリ変数を取得する"""
+
+# 使用例
+query_vars = await event_context.get_query_vars()
+```
+
+## LangBot API
+
+これらのAPIは、任意のプラグインコンポーネントで呼び出すことができます。アクセス方法:
+
+- プラグインルートディレクトリの`main.py`内: `self`オブジェクトの内部メソッド。これらのAPIはすべて、プラグインクラスの親クラス`BasePlugin`によって提供されます。
+- 任意のプラグインコンポーネントクラス内: `self.plugin`オブジェクトの内部メソッド。
+
+### プラグイン設定の取得
+
+プラグイン設定フォーマットは`manifest.yaml`に記述でき、ユーザーはLangBotのプラグイン管理でプラグイン設定フォーマットに従って入力する必要があります。プラグインコードはこのAPIを呼び出してプラグイン設定情報を取得できます。
+
+```python
+def get_config(self) -> dict[str, typing.Any]:
+ """プラグインの設定を取得する。"""
+
+# 使用例
+config = self.plugin.get_config()
+```
+
+### LangBotバージョンの取得
+
+LangBotのバージョン番号を取得します。`v..`形式の文字列として返されます。
+
+```python
+async def get_langbot_version(self) -> str:
+ """LangBotバージョンを取得する"""
+
+# 使用例
+langbot_version = await self.plugin.get_langbot_version()
+```
+
+### 設定済みBotリストの取得
+
+すべてのBot UUIDのリストを返します。
+
+```python
+async def get_bots(self) -> list[str]:
+ """すべてのBotを取得する"""
+
+# 使用例
+bots = await self.plugin.get_bots()
+```
+
+### Bot情報の取得
+
+Bot情報を取得します。
+
+```python
+async def get_bot_info(self, bot_uuid: str) -> dict[str, Any]:
+ """Bot情報を取得する"""
+
+# 使用例
+bot_info = await self.plugin.get_bot_info("de639861-be05-4018-859b-c2e2d3e0d603")
+
+# 返り値の例
+{
+ "uuid": "de639861-be05-4018-859b-c2e2d3e0d603",
+ "name": "aiocqhttp",
+ "description": "Migrated from LangBot v3",
+ "adapter": "aiocqhttp",
+ "enable": true,
+ "use_pipeline_name": "ChatPipeline",
+ "use_pipeline_uuid": "c30a1dca-e91c-452b-83ec-84d635a30028",
+ "created_at": "2025-05-10T13:53:08",
+ "updated_at": "2025-08-12T11:27:30",
+ "adapter_runtime_values": { # Botが現在実行中の場合に存在
+ "bot_account_id": 960164003 # BotアカウントID
+ }
+}
+```
+
+### プロアクティブメッセージの送信
+
+Bot UUIDとターゲットセッションIDを通じてプロアクティブメッセージを送信します。
+
+メッセージチェーンの構築方法については、[メッセージプラットフォームエンティティ](/en/plugin/dev/apis/messages)を参照してください。
+
+```python
+async def send_message(
+ self,
+ bot_uuid: str,
+ target_type: str,
+ target_id: str,
+ message_chain: platform_message.MessageChain,
+) -> None:
+ """セッションにメッセージを送信する"""
+
+# 使用例
+await self.plugin.send_message(
+ bot_uuid="de639861-be05-4018-859b-c2e2d3e0d603",
+ target_type="person",
+ target_id="1010553892",
+ message_chain=platform_message.MessageChain([platform_message.Plain(text="Hello, world!")]),
+)
+```
+
+### 設定済みLLMモデルリストの取得
+
+設定されたすべてのLLMモデルのUUIDのリストを返します。
+
+```python
+async def get_llm_models(self) -> list[str]:
+ """すべてのLLMモデルを取得する"""
+
+# 使用例
+llm_models = await self.plugin.get_llm_models()
+```
+
+### LLMモデルの呼び出し
+
+LLMモデルを呼び出し、LLMメッセージを返します。非ストリーミング。
+
+```python
+async def invoke_llm(
+ self,
+ llm_model_uuid: str,
+ messages: list[provider_message.Message],
+ funcs: list[resource_tool.LLMTool] = [],
+ extra_args: dict[str, Any] = {},
+) -> provider_message.Message:
+ """LLMモデルを呼び出す"""
+
+# 使用例
+llm_message = await self.plugin.invoke_llm(
+ llm_model_uuid="llm_model_uuid",
+ messages=[provider_message.Message(role="user", content="Hello, world!")],
+ funcs=[],
+ extra_args={},
+)
+```
+
+### プラグイン永続データの設定
+
+プラグインデータを永続的に保存します。このインターフェースを通じて保存されたデータは、このプラグインのみがアクセスできます。値は手動でbytesに変換する必要があります。
+
+```python
+async def set_plugin_storage(self, key: str, value: bytes) -> None:
+ """プラグインストレージ値を設定する"""
+
+# 使用例
+await self.plugin.set_plugin_storage("key", b"value")
+```
+
+### プラグイン永続データの取得
+
+```python
+async def get_plugin_storage(self, key: str) -> bytes:
+ """プラグインストレージ値を取得する"""
+
+# 使用例
+plugin_storage = await self.plugin.get_plugin_storage("key")
+```
+
+### すべてのプラグイン永続データキーの取得
+
+```python
+async def get_plugin_storage_keys(self) -> list[str]:
+ """すべてのプラグインストレージキーを取得する"""
+
+# 使用例
+plugin_storage_keys = await self.plugin.get_plugin_storage_keys()
+```
+
+### プラグイン永続データの削除
+
+```python
+async def delete_plugin_storage(self, key: str) -> None:
+ """プラグインストレージ値を削除する"""
+
+# 使用例
+await self.plugin.delete_plugin_storage("key")
+```
+
+### ワークスペース永続データの取得
+
+このインターフェースを通じて保存されたデータは、すべてのプラグインがアクセスできます。値は手動でbytesに変換する必要があります。
+
+```python
+async def set_workspace_storage(self, key: str, value: bytes) -> None:
+ """ワークスペースストレージ値を設定する"""
+
+# 使用例
+await self.plugin.set_workspace_storage("key", b"value")
+```
+
+### ワークスペース永続データの取得
+
+```python
+async def get_workspace_storage(self, key: str) -> bytes:
+ """ワークスペースストレージ値を取得する"""
+
+# 使用例
+workspace_storage = await self.plugin.get_workspace_storage("key")
+```
+
+### すべてのワークスペース永続データキーの取得
+
+```python
+async def get_workspace_storage_keys(self) -> list[str]:
+ """すべてのワークスペースストレージキーを取得する"""
+
+# 使用例
+workspace_storage_keys = await self.plugin.get_workspace_storage_keys()
+```
+
+### ワークスペース永続データの削除
+
+```python
+async def delete_workspace_storage(self, key: str) -> None:
+ """ワークスペースストレージ値を削除する"""
+
+# 使用例
+await self.plugin.delete_workspace_storage("key")
+```
+
+### プラグインファイル型設定フィールドデータの取得
+
+```python
+async def get_config_file(self, file_key: str) -> bytes:
+ """設定ファイル値を取得する"""
+
+# 使用例
+file_bytes = await self.plugin.get_config_file("key")
+```
+
+これは[``fileまたはarray[file``](/en/plugin/dev/basic-info.html#type-file)型の設定フィールドと組み合わせて使用します。
\ No newline at end of file
diff --git a/ja/plugin/dev/apis/messages.mdx b/ja/plugin/dev/apis/messages.mdx
new file mode 100644
index 000000000..130ca772d
--- /dev/null
+++ b/ja/plugin/dev/apis/messages.mdx
@@ -0,0 +1,91 @@
+---
+title: "メッセージプラットフォームエンティティ"
+---
+
+LangBotは複数のメッセージングプラットフォームをサポートしており、各プラットフォームには異なる`メッセージエンティティ`フォーマットがあります。これらの違いを抽象化するために、統一された標準を実装しました。プラグイン開発者は、プラグイン内でこのページに記載されているメッセージエンティティを習得して使用するだけで、LangBotの内部メッセージ処理ロジックがメッセージの解析と変換を自動的に処理します。
+
+## メッセージチェーン
+
+メッセージングプラットフォーム上の`メッセージ`は、AI対話に使用されるメッセージとは異なります。メッセージングプラットフォーム上のメッセージは、`メッセージチェーン`の形式で記述されます。QQに表示される各独立したメッセージはメッセージチェーンであり、`テキスト`、`画像`、`@メンション`などのさまざまな`メッセージチェーンコンポーネント`を含むことができます。例えば:
+
+
+
+これは、1つのPlainコンポーネント(Hello World)と1つのImageコンポーネント(Usagi)を含むメッセージチェーンです。
+
+メッセージチェーンとメッセージチェーンコンポーネントの定義は、`langbot_plugin.api.entities.builtin.platform.message`にあります。
+
+### メッセージチェーンの構築
+
+まず、`langbot_plugin.api.entities.builtin.platform.message`パッケージをインポートして、その中のメッセージコンポーネントを使用してください。
+
+```python
+from langbot_plugin.api.entities.builtin.platform.message import *
+
+# テキスト「Hello LangBot」と画像(URLから)を含むメッセージを構築
+msg_chain = MessageChain([
+ Plain(text="Hello LangBot"),
+ Image(url='https://qchatgpt.rockchin.top/langbot-logo.png')
+])
+
+# @全員とテキスト「Hello LangBot」を含むメッセージを構築
+msg_chain = MessageChain([
+ AtAll(),
+ Plain(text="Hello LangBot")
+])
+
+# @特定のメンバーとテキスト「Hello LangBot」を含むメッセージを構築
+msg_chain = MessageChain([
+ At(target=123456),
+ Plain(text="Hello LangBot")
+])
+```
+
+現在サポートされているメッセージチェーンコンポーネント:
+
+- `Source` - ソースメッセージチェーン情報。メッセージングプラットフォームから受信したメッセージには、メッセージ情報を記録するためにメッセージチェーンの先頭にこのコンポーネントが含まれます
+- `Plain` - プレーンテキストメッセージ
+- `Quote` - 引用メッセージ
+- `Image` - 画像メッセージ
+- `AtAll` - @全員メッセージ
+- `At` - @特定のメンバーメッセージ
+- `Voice` - 音声メッセージ
+ - メッセージングプラットフォームのサポートを確認する必要があります
+- `Forward` - 転送メッセージ
+ - 多くのプラットフォームでサポートされていないため、推奨されません
+- `File` - ファイルメッセージ
+
+コンポーネントを作成する際は、名前付きパラメータを使用する必要があります。具体的な使用方法については、ソースコード`langbot_plugin.api.entities.builtin.platform.message`の定義を確認してください。
+
+## その他のエンティティ
+
+上記のエンティティに加えて、`Friend`や`Group`などのエンティティもあります。これらのエンティティは`langbot_plugin.api.entities.platform.entities`で定義されています。
+
+## 基盤プラットフォームAPIへのアクセス
+
+
+ 4.xには適用されません。
+
+
+プラットフォームの違いを抽象化するために、LangBotはメッセージングプラットフォームAPIの上に抽象化レイヤーを提供しています。これには、上記で説明した内容と、`pkg/platform/sources`ディレクトリ内のさまざまなプラットフォームアダプターが含まれます。 ただし、プラットフォームの違いが大きいため、抽象化レイヤーのエンティティとAPIのカプセル化は完全ではありません。プラグインがプラットフォーム固有の機能にアクセスする必要がある場合は、次の手順に従って基盤APIにアクセスできます。
+
+
+ ```python
+ # 例えばプラグイン内で
+ @handler(GroupMessageReceived)
+ async def _(self, ctx: EventContext):
+ # アダプターオブジェクトを取得
+ adapter = ctx.query.adapter
+ ```
+
+
+| プラットフォーム | アダプター | アクセス方法 | 説明 |
+| ------------- | --------------- | ------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
+| OneBot v11 | aiocqhttp | adapter.bot | botオブジェクトは[aiocqhttp](https://github.com/nonebot/aiocqhttp) CQHttpオブジェクトに対応します。詳細な使用方法についてはaiocqhttpドキュメントを参照してください |
+| QQ公式API | qqofficial | adapter.bot | botオブジェクトはlibs/qq_official_api以下のSDKオブジェクトです。詳細な使用方法については、libs/qq_official_api/api.pyの`QQOfficialClient`内の`send_group_text_msg`メソッドを参照してHTTPリクエストメソッドを確認し、具体的なインターフェースドキュメントについてはQQ公式APIドキュメントを参照してください |
+| WeCom(企業微信) | wecom | adapter.bot | libs/wecom_api/api.pyの`WecomClient`内の`send_image`メソッドを参照してHTTPリクエストメソッドを確認し、具体的なインターフェースドキュメントについてはWeCom APIドキュメントを参照してください |
+| WeChat公式アカウント | officialaccount | - | インターフェースドキュメントについてはWeChat公式アカウントAPIドキュメントを参照してください。認証情報はadapter.botから取得できます |
+| Lark | lark | adapter.api_client | Lark SDKのAPI Clientオブジェクトです。詳細については[oapi-sdk-python](https://github.com/larksuite/oapi-sdk-python)を参照してください |
+| DingTalk | dingtalk | - | DingTalk APIドキュメントを参照してください。認証情報はadapter.botから取得できます |
+| Discord | discord | adapter.bot | botオブジェクトは[Rapptz/discord.py](https://github.com/Rapptz/discord.py) Discordオブジェクトです。詳細な使用方法についてはドキュメントを参照してください |
+| Telegram | telegram | adapter.bot | botオブジェクトは[python-telegram-bot](https://github.com/python-telegram-bot/python-telegram-bot) Telegramオブジェクトです。詳細な使用方法についてはドキュメントを参照してください |
+| Slack | slack | adapter.bot | botオブジェクトはlibs/slack_api/api.py内にあります。詳細な使用方法についてはそのコードとSlack SDKを参照してください |
\ No newline at end of file
diff --git a/ja/plugin/dev/apis/pipeline-events.mdx b/ja/plugin/dev/apis/pipeline-events.mdx
new file mode 100644
index 000000000..50d81cf52
--- /dev/null
+++ b/ja/plugin/dev/apis/pipeline-events.mdx
@@ -0,0 +1,308 @@
+---
+title: "パイプラインイベントとAPI"
+---
+
+LangBotプラグインはパイプラインイベントを登録して処理できます。使用方法については、[コンポーネント: イベントリスナー](/ja/plugin/dev/components/event-listener)を参照してください。
+
+## イベント一覧
+
+一部のイベントには`設定可能な属性`があり、プラグインコードで変更して、その後のLangBot処理で使用できます。
+
+### \*MessageReceived
+
+グループチャットまたはプライベートチャットでメッセージを受信したときにトリガーされます。
+
+```python
+class PersonMessageReceived(BaseEventModel):
+ """プライベートチャットメッセージを受信したとき"""
+
+ event_name: str = "PersonMessageReceived"
+
+ launcher_type: str
+ """起動元オブジェクトタイプ(person)"""
+
+ launcher_id: typing.Union[int, str]
+ """送信者ID"""
+
+ sender_id: typing.Union[int, str]
+ """送信者ID、プライベートチャットの場合はlauncher_idと同じ"""
+
+ message_event: platform_events.PersonMessage
+ """元のメッセージイベントオブジェクト。送信者情報を含みます。"""
+
+ message_chain: platform_message.MessageChain = pydantic.Field(
+ serialization_alias="message_chain"
+ )
+ """メッセージチェーン"""
+
+
+class GroupMessageReceived(BaseEventModel):
+ """グループチャットメッセージを受信したとき"""
+
+ event_name: str = "GroupMessageReceived"
+
+ launcher_type: str
+ """起動元オブジェクトタイプ(group)"""
+
+ launcher_id: typing.Union[int, str]
+ """グループID"""
+
+ sender_id: typing.Union[int, str]
+ """送信者ID"""
+
+ message_event: platform_events.GroupMessage
+ """元のメッセージイベントオブジェクト。グループと送信者情報を含みます。"""
+
+ message_chain: platform_message.MessageChain = pydantic.Field(
+ serialization_alias="message_chain"
+ )
+ """メッセージチェーン"""
+```
+
+### \*NormalMessageReceived
+
+グループチャットまたはプライベートチャットメッセージを受信し、LLMで処理する必要があるメッセージ(コマンドでないメッセージ)であると判定されたときにトリガーされます。
+
+```python
+class PersonNormalMessageReceived(BaseEventModel):
+ """処理すべきプライベートチャット通常メッセージが判定されたときにトリガーされる"""
+
+ event_name: str = "PersonNormalMessageReceived"
+
+ launcher_type: str
+ """起動元オブジェクトタイプ(person)"""
+
+ launcher_id: typing.Union[int, str]
+ """起動元オブジェクトID"""
+
+ sender_id: typing.Union[int, str]
+ """送信者ID、プライベートチャットの場合はlauncher_idと同じ"""
+
+ text_message: str
+ """メッセージテキスト"""
+
+ message_event: platform_events.PersonMessage
+ """元のメッセージイベントオブジェクト。送信者情報を含みます。"""
+
+ message_chain: platform_message.MessageChain = pydantic.Field(
+ serialization_alias="message_chain"
+ )
+ """メッセージチェーン"""
+
+ # ========== 設定可能な属性 ==========
+
+ user_message_alter: typing.Optional[provider_message.ContentElement] = None
+ """変更されたメッセージテキスト、langbot_plugin.api.entities.builtin.provider.message.ContentElement型"""
+
+ reply_message_chain: typing.Optional[platform_message.MessageChain] = None
+ """直接返信メッセージチェーン、デフォルト動作を防止した場合のみ有効"""
+
+
+class GroupNormalMessageReceived(BaseEventModel):
+ """処理すべきグループチャット通常メッセージが判定されたときにトリガーされる"""
+
+ event_name: str = "GroupNormalMessageReceived"
+
+ launcher_type: str
+ """起動元オブジェクトタイプ(group)"""
+
+ launcher_id: typing.Union[int, str]
+ """グループID"""
+
+ sender_id: typing.Union[int, str]
+ """送信者ID"""
+
+ text_message: str
+ """メッセージテキスト"""
+
+ message_event: platform_events.GroupMessage
+ """元のメッセージイベントオブジェクト。グループと送信者情報を含みます。"""
+
+ message_chain: platform_message.MessageChain = pydantic.Field(
+ serialization_alias="message_chain"
+ )
+ """メッセージチェーン"""
+
+ # ========== 設定可能な属性 ==========
+
+ user_message_alter: typing.Optional[provider_message.ContentElement] = None
+ """変更されたメッセージテキスト、langbot_plugin.api.entities.builtin.provider.message.ContentElement型"""
+
+ reply_message_chain: typing.Optional[platform_message.MessageChain] = None
+ """直接返信メッセージチェーン、デフォルト動作を防止した場合のみ有効"""
+```
+
+### \*CommandSent
+
+
+ 使用は推奨されなくなりました。代わりに[コンポーネント: Command](/ja/plugin/dev/components/command)を使用してください。
+
+
+グループチャットまたはプライベートチャットでコマンドを受信したときにトリガーされます。
+
+```python
+class PersonCommandSent(BaseEventModel):
+ """処理すべきプライベートチャットコマンドが判定されたときにトリガーされる"""
+
+ event_name: str = "PersonCommandSent"
+
+ launcher_type: str
+
+ launcher_id: typing.Union[int, str]
+
+ sender_id: typing.Union[int, str]
+
+ command: str
+ """コマンドテキスト"""
+
+ params: list[str]
+ """コマンドパラメータ"""
+
+ text_message: str
+ """メッセージテキスト"""
+
+ is_admin: bool
+ """管理者かどうか"""
+
+
+class GroupCommandSent(BaseEventModel):
+ """処理すべきグループチャットコマンドが判定されたときにトリガーされる"""
+
+ event_name: str = "GroupCommandSent"
+
+ launcher_type: str
+
+ launcher_id: typing.Union[int, str]
+
+ sender_id: typing.Union[int, str]
+
+ command: str
+ """コマンドテキスト"""
+
+ params: list[str]
+ """コマンドパラメータ"""
+
+ text_message: str
+ """メッセージテキスト"""
+
+ is_admin: bool
+ """管理者かどうか"""
+```
+
+### NormalMessageResponded
+
+メッセージがLLMレスポンスを受信したときにトリガーされます。
+
+```python
+class NormalMessageResponded(BaseEventModel):
+ """通常メッセージに返信するときにトリガーされる"""
+
+ event_name: str = "NormalMessageResponded"
+
+ launcher_type: str
+
+ launcher_id: typing.Union[int, str]
+
+ sender_id: typing.Union[int, str]
+
+ session: provider_session.Session
+ """セッションオブジェクト"""
+
+ prefix: str
+ """返信メッセージプレフィックス"""
+
+ response_text: str
+ """返信メッセージテキスト"""
+
+ finish_reason: str
+ """レスポンス終了理由"""
+
+ funcs_called: list[str]
+ """呼び出された関数のリスト"""
+
+ # ========== 設定可能な属性 ==========
+
+ reply_message_chain: typing.Optional[platform_message.MessageChain] = None
+ """返信メッセージコンポーネントリスト、デフォルト動作を防止した場合のみ有効"""
+```
+
+### PromptPreProcessing
+
+LLMレスポンスコンテキスト(プロンプト)を構築するときにトリガーされます。
+
+```python
+class PromptPreProcessing(BaseEventModel):
+ """セッション内のプロンプトを前処理するときにトリガーされる"""
+
+ event_name: str = "PromptPreProcessing"
+
+ session_name: str
+ """セッション名、形式は person_1234567890 または group_1234567890"""
+
+ # ========== 設定可能な属性 ==========
+
+ default_prompt: list[typing.Union[provider_message.Message, provider_message.MessageChunk]]
+ """この会話のシナリオプリセット(システムプロンプト)、変更可能、langbot_plugin.api.entities.builtin.provider.message.Messageまたはlangbot_plugin.api.entities.builtin.provider.message.MessageChunk型"""
+
+ prompt: list[typing.Union[provider_message.Message, provider_message.MessageChunk]]
+ """この会話の既存メッセージレコード、変更可能、langbot_plugin.api.entities.builtin.provider.message.Messageまたはlangbot_plugin.api.entities.builtin.provider.message.MessageChunk型"""
+```
+
+## イベントコンテキストAPI
+
+```python
+...
+ @self.handler(events.PersonMessageReceived)
+ async def handler(event_context: context.EventContext):
+ ...
+```
+
+イベント処理メソッドには`EventContext`オブジェクトが渡され、イベントコンテキスト情報が含まれます。このオブジェクトには[リクエストAPI](/ja/plugin/dev/apis/common)とイベントコンテキスト固有のAPIの両方があります。以下は、イベントコンテキスト固有のAPIのリストです:
+
+### 元のイベント属性の取得
+
+`event_context.event`属性は元のイベントオブジェクトであり、元のイベントの属性を取得できます。型はリッスンされているイベントの型です。
+
+例えば、リッスンされているイベントが`GroupMessageReceived`の場合:
+
+```python
+event = event_context.event
+print(event.launcher_type) # 起動元オブジェクトタイプ(group)
+print(event.launcher_id) # グループID
+print(event.sender_id) # 送信者アカウントID
+print(event.message_chain) # メッセージチェーン
+```
+
+### デフォルト動作を防止
+
+```python
+def prevent_default(self):
+ """デフォルト動作を防止する"""
+
+# 使用例
+event_context.prevent_default()
+```
+
+このメソッドを呼び出すと、このイベントのデフォルトの後続動作が防止され、パイプラインは直接終了します。
+
+
+ - PersonMessageReceived
+ - GroupMessageReceived
+ - PersonNormalMessageReceived
+ - GroupNormalMessageReceived
+ - PersonCommandSent
+ - GroupCommandSent
+ - NormalMessageResponded
+
+
+### 後続実行を防止
+
+```python
+def prevent_postorder(self):
+ """後続実行を防止する"""
+
+# 使用例
+event_context.prevent_postorder()
+```
+
+このメソッドを呼び出すと、後続のプラグインがこの時点で実行されなくなります。
\ No newline at end of file
diff --git a/ja/plugin/dev/apis/tech-details.mdx b/ja/plugin/dev/apis/tech-details.mdx
new file mode 100644
index 000000000..fa2c39e54
--- /dev/null
+++ b/ja/plugin/dev/apis/tech-details.mdx
@@ -0,0 +1,13 @@
+---
+title: "プラグイン技術詳細"
+---
+
+## アーキテクチャ
+
+
+
+バージョン4.0では、高セキュリティで柔軟性の高い本番環境グレードのプラグインシステムを導入し、開発者に豊富なAPIと使いやすいサポートツールを提供しています。
+
+Plugin Runtimeは、プラグインのライフサイクルを管理し、LangBotとプラグイン間の相互作用を調整するために使用されます。`stdio`と`websocket`の2つの動作モードがあります。LangBotがユーザーによって直接起動される場合(コンテナ内で実行されていない場合)、`stdio`モードを使用します。これは個人ユーザーや軽量環境で一般的です。LangBotがコンテナ内で実行される場合、`websocket`モードを使用します。これは本番環境専用に設計されています。
+
+Plugin Runtimeは、インストールされた各プラグインを自動的に起動し、stdioを通じて相互作用します。プラグイン開発シナリオでは、開発者は`lbp`コマンドラインツールを使用してプラグインを起動し、WebSocketを介して実行中のRuntimeに接続してデバッグできます。
diff --git a/ja/plugin/dev/basic-info.mdx b/ja/plugin/dev/basic-info.mdx
new file mode 100644
index 000000000..98d096782
--- /dev/null
+++ b/ja/plugin/dev/basic-info.mdx
@@ -0,0 +1,242 @@
+---
+title: "プラグイン設定情報の完成"
+---
+
+## マニフェストファイルの修正
+
+プラグインディレクトリ内の`manifest.yaml`ファイルは、プラグインの基本情報を宣言します。これはLangBot UIまたはプラグインマーケットプレイスのインターフェースに表示されます。
+
+```yaml
+apiVersion: v1 # 変更しないでください
+kind: Plugin # 変更しないでください
+metadata:
+ author: RockChinQ # 作成者、正規表現^[a-zA-Z0-9_-]+$に一致する必要があります
+ name: HelloPlugin # プラグイン名、プラグインを区別するために使用、正規表現^[a-zA-Z0-9-]+$に一致する必要があります
+ repository: 'https://github.com/langbot-app/HelloPlugin' # プラグインリポジトリURL
+ version: 0.1.0 # プラグインバージョン
+ description:
+ en_US: 'Hello LangBot Plugin' # プラグイン説明、多言語対応
+ zh_Hans: 'Hello LangBot Plugin'
+ label:
+ en_US: HelloPlugin # プラグインラベル、インターフェースに表示、多言語対応
+ zh_Hans: HelloPlugin
+ icon: assets/icon.svg # プラグインアイコン、デフォルトはassets/icon.svg、さまざまな画像形式に置き換え可能
+spec:
+ config: [] # プラグイン設定項目フォーマット
+ components: {} # プラグインコンポーネントリスト、手動で変更する必要はありません
+execution:
+ python:
+ path: main.py # 変更しないでください
+ attr: HelloPlugin # 変更しないでください
+```
+
+プラグインの多言語サポートは[RFC 4646](https://datatracker.ietf.org/doc/html/rfc4646)標準に従います。現在サポートされている言語は次のとおりです:
+
+- `en_US` 英語
+- `zh_Hans` 簡体字中国語
+- `zh_Hant` 繁体字中国語
+- `ja_JP` 日本語
+
+## プラグイン設定項目フォーマット
+
+`manifest.yaml`ファイルの`spec.config`で宣言されたフィールドは、LangBotによってユーザーが入力するための設定項目フォームとしてレンダリングされます。プラグインは、SDKが提供するAPIを通じて、ユーザーが入力した設定項目を取得できます(後のセクションを参照)。
+
+例えば:
+
+```yaml
+spec:
+ config:
+ - name: github_token # 必須; 設定項目名、プラグイン内での取得に使用
+ type: string # 必須; 設定項目タイプ、string、integer、float、boolean、select、prompt-editor、llm-model-selector、bot-selectorなどをサポート
+ label: # 必須; 設定項目表示名、多言語サポート。言語コードはRFC 4646標準に従います。
+ en_US: Github Token
+ zh_Hans: Github Token
+ description: # 設定項目説明、多言語サポート。オプション。
+ en_US: Image downloading requires a Github token
+ zh_Hans: 如果不填的話、图片可能會下載失败
+ default: '' # 設定項目のデフォルト値、オプション。
+ required: false # 設定項目が必須かどうか、オプション。
+ - name: mode
+ type: select
+ ...
+```
+
+設定項目でサポートされるタイプとフィールドは次のとおりです:
+
+### type: string
+
+文字列型。
+
+```yaml
+- name: api_key
+ type: string
+ ...
+```
+
+### type: array[string]
+
+文字列配列。
+
+```yaml
+- name: tags
+ type: array[string]
+ ...
+```
+
+### type: integer
+
+整数型。
+
+```yaml
+- name: progress
+ type: integer
+ ...
+```
+
+### type: float
+
+浮動小数点型。
+
+```yaml
+- name: temperature
+ type: float
+ ...
+```
+
+### type: boolean
+
+ブール型。
+
+```yaml
+- name: is_enabled
+ type: boolean
+ ...
+```
+
+### type: select
+
+ドロップダウンメニュー。`options`の設定が必要で、ドロップダウンメニューのオプションを表します。
+
+```yaml
+- name: mode
+ type: select
+ options: # ドロップダウンオプション、多言語サポート。
+ - name: mode1 # 値
+ label: # 表示名、多言語サポート。
+ en_US: Mode 1
+ zh_Hans: 模式 1
+ - name: mode2
+ label: # 表示名、多言語サポート。
+ en_US: Mode 2
+ zh_Hans: 模式 2
+ ...
+```
+
+### type: prompt-editor
+
+プロンプトエディター。パイプライン設定ページからプロンプトエディターを表示し、最終結果はOpenAIの`messages`形式で表されます。
+
+```yaml
+- name: prompt
+ type: prompt-editor
+ ...
+```
+
+### type: text
+
+大きなテキスト入力。フロントエンドでtextareaとしてレンダリングされ、ユーザーが入力し、文字列としてプラグインに渡されます。
+
+```yaml
+- name: prompt
+ type: text
+ ...
+```
+
+### type: file
+
+ファイルアップロード。最大10MBのファイルアップロードをサポートし、`{"file_key": "xxxxx.xxx", "mimetype": "xxxxx"}`形式でプラグインに渡されます。プラグインは`get_config_file` APIを使用してファイルの内容を取得できます。
+
+```yaml
+- name: config_file
+ type: file
+ accept: 'application/json' # オプション、受け入れるファイルMIMEタイプを指定
+ ...
+```
+
+プラグインでファイルを取得する:
+
+```python
+# 設定からファイル情報を取得
+file_config = self.get_config()['config_file']
+file_key = file_config['file_key']
+mimetype = file_config['mimetype']
+
+# 出力例: {'file_input': {'file_key': 'plugin_config_d2234fd802054faf80babe0679a97fa9.json', 'mimetype': 'application/json'}}
+print(file_config)
+
+# ファイルの内容を取得
+file_bytes = await self.get_config_file(file_key)
+```
+
+
+ 一般的なMIMEタイプとファイル拡張子のリファレンス: [MDNドキュメント](https://developer.mozilla.org/en-US/docs/Web/HTTP/Basics_of_HTTP/MIME_types/Common_types)
+
+
+### type: array[file]
+
+複数ファイルアップロード。fileタイプと似ていますが、複数のファイルのアップロードをサポートし、`[{"file_key": "xxxxx.xxx", "mimetype": "xxxxx"}]`形式でプラグインに渡されます。
+
+```yaml
+- name: resource_files
+ type: array[file]
+ accept: 'image/*' # オプション、受け入れるファイルMIMEタイプを指定
+ ...
+```
+
+プラグインでファイルを取得する:
+
+```python
+# 設定からファイルリストを取得
+files_config = self.get_config()['resource_files']
+
+for file_config in files_config:
+ file_key = file_config['file_key']
+ mimetype = file_config['mimetype']
+
+ # ファイルの内容を取得
+ file_bytes = await self.get_config_file(file_key)
+```
+
+### type: llm-model-selector
+
+LLMモデルセレクター。設定されたLLMモデルを選択できるLLMモデルセレクターを表示し、最終結果はLLMモデルUUIDとして表されます。
+
+```yaml
+- name: model
+ type: llm-model-selector
+ ...
+```
+
+### type: bot-selector
+
+Botセレクター。設定されたBotを選択できるBotセレクターを表示し、最終結果はBot UUIDとして表されます。
+
+```yaml
+- name: bot
+ type: bot-selector
+ ...
+```
+
+プラグインでBot UUIDを使用する:
+
+```python
+# 設定からBot UUIDを取得
+bot_uuid = self.get_config()['bot']
+print(bot_uuid) # 出力: '550e8400-e29b-41d4-a716-446655440000'
+```
+
+## 次のステップ
+
+このチュートリアルでは、プラグイン機能を段階的に完成させる方法を案内します。
+
+- コンポーネントの追加: プラグインコンポーネントはプラグインのコア機能ユニットです。必要に応じて[コンポーネントを追加](/en/plugin/dev/components/add)できます。
\ No newline at end of file
diff --git a/ja/plugin/dev/components/add.mdx b/ja/plugin/dev/components/add.mdx
new file mode 100644
index 000000000..74758c7de
--- /dev/null
+++ b/ja/plugin/dev/components/add.mdx
@@ -0,0 +1,74 @@
+---
+title: "コンポーネントの追加"
+---
+
+プラグインは、LangBotにさまざまな機能を提供する1つ以上のコンポーネントで構成されています。現在サポートされているコンポーネントタイプには次のものがあります:
+
+- イベントリスナー(EventListener): パイプライン実行中のイベントをリッスンし、コンテキストやパイプラインを変更します。
+- コマンド(Command): `!`(または他の設定されたプレフィックス)で始まるユーザーコマンドメッセージによってトリガーされます。
+- ツール(Tool): LangBotの組み込みLocal Agentの実行中にLLMによって呼び出されます。
+- ナレッジリトリーバー(KnowledgeRetriever): LangBotに外部ナレッジベース検索機能を提供し、さまざまなRAGシステムとの統合をサポートします。
+
+## コンポーネントの追加
+
+プラグインディレクトリでコマンドを実行します:
+
+```bash
+lbp comp
+```
+
+例えば、イベントリスナーを追加する場合:
+
+```bash
+lbp comp EventListener
+```
+
+プロンプトに従って、コンポーネント設定(ある場合)を入力します。
+
+```bash
+➜ HelloPlugin > lbp comp EventListener
+Generating component EventListener...
+Component EventListener generated successfully.
+組件 EventListener 生成成功。
+➜ HelloPlugin >
+```
+
+
+
+```
+.
+├── assets
+│ └── icon.svg
+├── components
+│ ├── __init__.py
+│ └── event_listener
+│ ├── __init__.py
+│ ├── default.py
+│ └── default.yaml
+├── main.py
+├── manifest.yaml
+├── README.md
+└── requirements.txt
+```
+
+同時に、プラグインの`manifest.yaml`にコンポーネント検出設定が追加されます:
+
+```yaml
+...
+components:
+ EventListener:
+ fromDirs:
+ - path: components/event_listener/
+...
+```
+コンポーネントを削除するには、対応する情報を手動で削除できます。
+
+
+## コンポーネントタイプ
+
+各コンポーネントの詳細な使用方法については、次を参照してください:
+
+- [EventListener](./event-listener)
+- [Command](./command)
+- [Tool](./tool)
+- [KnowledgeRetriever](./knowledge-retriever)
diff --git a/ja/plugin/dev/components/command.mdx b/ja/plugin/dev/components/command.mdx
new file mode 100644
index 000000000..dc60826ae
--- /dev/null
+++ b/ja/plugin/dev/components/command.mdx
@@ -0,0 +1,214 @@
+---
+title: "コンポーネント: Command"
+---
+
+Commandコンポーネントは、`!`(または他の設定されたプレフィックス)で始まるユーザーコマンドメッセージによってトリガーされます。`!help`コマンドをトリガーする例を次に示します:
+
+
+
+## Commandコンポーネントの追加
+
+1つのプラグインには任意の数のコマンドを含めることができます。プラグインディレクトリでコマンド`lbp comp Command`を実行し、プロンプトに従ってコマンド設定を入力します。
+
+```bash
+➜ HelloPlugin > lbp comp Command
+Generating component Command...
+Command name: info
+Command description: Show information of the query
+Component Command generated successfully.
+組件 Command 生成成功。
+```
+
+これにより、`components/commands/`ディレクトリに`info.yaml`と`info.py`ファイルが生成されます。`.yaml`ファイルは`!info`コマンドの基本情報を定義し、`.py`ファイルはコマンドハンドラです:
+
+```bash
+➜ HelloPlugin > tree
+...
+├── components
+│ ├── __init__.py
+│ ├── commands
+│ │ ├── __init__.py
+│ │ ├── info.py
+│ │ └── info.yaml
+...
+```
+
+## マニフェストファイル: Commandコンポーネント
+
+```yaml
+apiVersion: v1 # 変更しないでください
+kind: Command # 変更しないでください
+metadata:
+ name: info # コマンド名、ユーザーは!infoでこのコマンドをトリガーします
+ label: # コマンド表示名、LangBot UIに表示、多言語対応
+ en_US: Info
+ zh_Hans: Info
+ description: # コマンド説明、LangBot UIに表示、多言語対応。オプション。
+ en_US: 'Show information of the query'
+ zh_Hans: '発送此次消息的詳細信息'
+spec:
+execution:
+ python:
+ path: info.py # コマンドハンドラ、変更しないでください
+ attr: Info # コマンドハンドラクラス名、info.pyのクラス名と一致
+```
+
+## プラグイン処理
+
+以下のコードがデフォルトで生成されます(`components/command/.py`)。`Info`クラスの`initialize`メソッドでサブコマンド処理ロジックを登録して実装する必要があります。
+
+```python
+# Auto generated by LangBot Plugin SDK.
+# Please refer to https://docs.langbot.app/en/plugin/dev/tutor.html for more details.
+from __future__ import annotations
+
+from typing import Any, AsyncGenerator
+
+from langbot_plugin.api.definition.components.command.command import Command, Subcommand
+from langbot_plugin.api.entities.builtin.command.context import ExecuteContext, CommandReturn
+
+
+class Info(Command):
+
+ async def initialize(self):
+ await super().initialize()
+
+ "Fill with your code here"
+```
+
+サブコマンドの追加:
+
+```python
+...
+class Info(Command):
+
+ async def initialize(self):
+ await super().initialize()
+
+ @self.subcommand(
+ name="", # 空文字列はルートコマンドを表す
+ help="Show information of the query", # コマンドヘルプ情報
+ usage="info", # コマンド使用例、コマンドヘルプに表示
+ aliases=["i"], # コマンドエイリアス
+ )
+ async def send(self, context: ExecuteContext) -> AsyncGenerator[CommandReturn, None]:
+ print(context)
+
+ reply_text = f"Query ID: {context.query_id}\n"
+ reply_text += f"command: {context.command}\n"
+ reply_text += f"command_text: {context.command_text}\n"
+ reply_text += f"params: {context.params}\n"
+ reply_text += f"crt_params: {context.crt_params}\n"
+ reply_text += f"privilege: {context.privilege}\n"
+ reply_text += f"session: {context.session.launcher_type.value}_{context.session.launcher_id}\n"
+
+ yield CommandReturn(
+ text=reply_text,
+ )
+
+ @self.subcommand(
+ name="field",
+ help="Show information of the field",
+ usage="info field",
+ aliases=["f"],
+ )
+ async def field(self, context: ExecuteContext) -> AsyncGenerator[CommandReturn, None]:
+ print(context)
+
+ field_name = context.crt_params[0]
+ field_value = getattr(context, field_name)
+
+ yield CommandReturn(
+ text=f"{field_name}: {field_value}",
+ )
+```
+
+このコードでは、`@self.subcommand`デコレータを通じて`send`関数がサブコマンドとして登録され、コマンドコンテキスト(ExecuteContext)情報を出力し、それを返信メッセージに連結します。
+
+### サブコマンド登録
+
+`name`はサブコマンド名です。空のままにすると、メインコマンドを処理することを意味します。空でない場合、2番目のパラメータをコマンドとして照合します。例えば:
+
+- `!info`は、name=""のサブコマンドに一致
+- `!info field`は、name="field"のサブコマンドに一致
+- `!info field value`は、name="field"のサブコマンドに一致し、`value`がサブコマンドパラメータ
+- 特に、`name="*"`は、一致しないすべての第1レベルサブコマンドに一致し、`info`の後の各セクションをパラメータとして渡します。例えば`!info 123`、`!info abc`。ユーザーの入力に応じて、`context.crt_params`から`['123']`または`['abc']`を取得できます。
+
+サブコマンド関数では、`context`変数を通じてコマンドパラメータを読み取ることができます。
+
+上記のコマンドの効果は画像に示されています:
+
+
+
+### コマンドコンテキスト
+
+```python
+
+class ExecuteContext(pydantic.BaseModel):
+ """単一コマンド実行コンテキスト"""
+
+ query_id: int
+ """リクエストID"""
+
+ session: provider_session.Session
+ """このメッセージのセッションオブジェクト"""
+
+ command_text: str
+ """完全なコマンドテキスト"""
+
+ command: str
+ """コマンド名"""
+
+ crt_command: str
+ """現在のコマンド
+
+ マルチレベルコマンドでは、crt_commandは現在のコマンド、commandはルートコマンド。
+ 例: !plugin on Webwlkr
+ pluginを処理する場合、commandはplugin、crt_commandはplugin
+ onを処理する場合、commandはplugin、crt_commandはon
+ """
+
+ params: list[str]
+ """コマンドパラメータ
+
+ コマンド全体をスペースで分割した後のパラメータリスト
+ """
+
+ crt_params: list[str]
+ """現在のコマンドパラメータ
+
+ マルチレベルコマンドでは、crt_paramsは現在のコマンドパラメータ、paramsはルートコマンドパラメータ。
+ 例: !plugin on Webwlkr
+ pluginを処理する場合、paramsは['on', 'Webwlkr']、crt_paramsは['on', 'Webwlkr']
+ onを処理する場合、paramsは['on', 'Webwlkr']、crt_paramsは['Webwlkr']
+ """
+
+ privilege: int
+ """セッション権限レベル"""
+
+ ...
+```
+
+### コマンド戻り値
+
+コマンド戻り値(CommandReturn)は、現在テキスト、画像(image_url、画像リンク)、エラーの返却をサポートしています。
+
+```python
+yield CommandReturn(
+ text=reply_text,
+)
+
+yield CommandReturn(
+ image_url=image_url,
+)
+```
+
+コマンド処理は複数のメッセージを返すことをサポートしているため、`yield`ステートメントを使用してメッセージを返してください。
+
+具体的な戻り値については、`CommandReturn`の定義を参照してください: [langbot_plugin.api.entities.builtin.command.context.CommandReturn](https://github.com/langbot-app/langbot-plugin-sdk/tree/main/src/langbot_plugin/api/entities/builtin/command/context.py)
+
+## 次のステップ
+
+コマンド登録とコマンド実行の基本情報を学びました。次は:
+
+- [プラグイン共通API](/en/plugin/dev/apis/common)を確認してください
diff --git a/ja/plugin/dev/components/event-listener.mdx b/ja/plugin/dev/components/event-listener.mdx
new file mode 100644
index 000000000..3f0b99319
--- /dev/null
+++ b/ja/plugin/dev/components/event-listener.mdx
@@ -0,0 +1,103 @@
+---
+title: "コンポーネント: イベントリスナー"
+---
+
+LangBotのパイプラインは実行時にイベントを生成し、プラグインがフックして処理できるようにします。各プラグインは1つのイベントリスナー(components/event_listener/default.yaml)のみを持つことができますが、その中で任意の数のイベントを登録できます。
+
+## イベントリスナーコンポーネントの追加
+
+プラグインディレクトリでコマンド`lbp comp EventListener`を実行します。イベントリスナーコンポーネントの作成には設定は必要ありません。
+
+```bash
+➜ HelloPlugin > lbp comp EventListener
+Generating component EventListener...
+Component EventListener generated successfully.
+組件 EventListener 生成成功。
+```
+
+これにより、`components/event_listener/`ディレクトリに`default.yaml`と`default.py`ファイルが生成されます。`.yaml`ファイルはイベントリスナーの基本情報を定義し、`.py`ファイルはイベントリスナーハンドラです:
+
+```bash
+➜ HelloPlugin > tree
+...
+├── components
+│ ├── __init__.py
+│ └── event_listener
+│ ├── __init__.py
+│ ├── default.py
+│ └── default.yaml
+...
+```
+
+## マニフェストファイル: イベントリスナー
+
+各プラグインは1つのイベントリスナーのみを持つことができるため、マニフェストファイルでの変更は必要ありません。
+
+## プラグイン処理
+
+以下のコードがデフォルトで生成されます(components/event_listener/default.py)。`DefaultEventListener`クラスの`initialize`メソッドでイベント処理ロジックを登録して実装する必要があります。
+
+```python
+# Auto generated by LangBot Plugin SDK.
+# Please refer to https://docs.langbot.app/en/plugin/dev/tutor.html for more details.
+from __future__ import annotations
+
+from langbot_plugin.api.definition.components.common.event_listener import EventListener
+from langbot_plugin.api.entities import events, context
+
+
+class DefaultEventListener(EventListener):
+
+ async def initialize(self):
+ await super().initialize()
+
+ "Fill with your code here"
+```
+
+特定のイベントのリスナーを追加:
+
+```python
+...
+class DefaultEventListener(EventListener):
+
+ async def initialize(self):
+ await super().initialize()
+
+ @self.handler(events.PersonMessageReceived)
+ async def handler(event_context: context.EventContext):
+ print("Hello LangBot Plugin!")
+ print(event_context)
+
+ await event_context.reply(
+ platform_message.MessageChain([
+ platform_message.Plain(text=f"Hello from Nahida Plugin!"),
+ ])
+ )
+```
+
+このコードは、`PersonMessageReceived`(プライベートチャットからのメッセージを受信)イベントのリスナーを登録し、イベントがトリガーされたときにイベントコンテキスト(EventContext)情報を出力し、イベントコンテキストAPIを呼び出してメッセージで返信します。
+
+EventContextはこのイベントトリガーの共通コンテキスト情報を保存し、EventContext.eventはPersonMessageReceived(または他の対応するイベントタイプ)のオブジェクトで、イベントの詳細情報を保存します。
+
+```python
+# EventContext定義の概要
+class EventContext(pydantic.BaseModel):
+ """イベントコンテキスト、このイベント実行の情報を保存"""
+ ...
+
+ event: pydantic.SerializeAsAny[BaseEventModel]
+ """イベントオブジェクト、具体的な型はハンドラ登録時に指定された型、events.pyで見つけることができます"""
+
+ ...
+```
+
+## イベント登録
+
+イベント登録は`@self.handler`デコレータを通じて実装され、デコレータのパラメータはイベントタイプです。監視可能なすべてのイベントは`langbot_plugin.api.entities.builtin.events`で定義されています。
+
+## 次のステップ
+
+イベントリスナーの基本情報を学びました。次は:
+
+- ドキュメント[パイプラインイベント](/en/plugin/dev/apis/pipeline-events)で`監視可能なイベントのリスト`と`イベントコンテキストAPI`を確認してください
+- [プラグイン共通API](/en/plugin/dev/apis/common)を確認してください
diff --git a/ja/plugin/dev/components/knowledge-retriever.mdx b/ja/plugin/dev/components/knowledge-retriever.mdx
new file mode 100644
index 000000000..4df7ef932
--- /dev/null
+++ b/ja/plugin/dev/components/knowledge-retriever.mdx
@@ -0,0 +1,266 @@
+---
+title: "コンポーネント: ナレッジリトリーバー"
+---
+
+ナレッジリトリーバーコンポーネントにより、プラグインはLangBotに外部ナレッジベース検索機能を提供できます。ユーザーがLangBotで外部ナレッジベースを作成する際、プラグインが提供するナレッジリトリーバーを選択してナレッジを検索できます。
+
+
+
+## ナレッジリトリーバーコンポーネントの追加
+
+1つのプラグインには任意の数のナレッジリトリーバーを追加できます。プラグインディレクトリでコマンド`lbp comp KnowledgeRetriever`を実行し、プロンプトに従ってナレッジリトリーバーの設定を入力します。
+
+```bash
+➜ FastGPTRetriever > lbp comp KnowledgeRetriever
+Generating component KnowledgeRetriever...
+KnowledgeRetriever name: fastgpt
+KnowledgeRetriever description: Retrieve knowledge from FastGPT knowledge bases
+Component KnowledgeRetriever generated successfully.
+```
+
+これにより、`components/knowledge_retriever/`ディレクトリに`fastgpt.yaml`と`fastgpt.py`ファイルが生成されます。`.yaml`ファイルはナレッジリトリーバーの基本情報と設定パラメータを定義し、`.py`ファイルはこのリトリーバーのハンドラです:
+
+```bash
+➜ FastGPTRetriever > tree
+...
+├── components
+│ ├── __init__.py
+│ └── knowledge_retriever
+│ ├── __init__.py
+│ ├── fastgpt.py
+│ └── fastgpt.yaml
+...
+```
+
+## マニフェストファイル: ナレッジリトリーバー
+
+```yaml
+apiVersion: v1 # 変更しないでください
+kind: KnowledgeRetriever # 変更しないでください
+metadata:
+ name: fastgpt # ナレッジリトリーバー名、このリトリーバーを識別するために使用
+ label:
+ en_US: FastGPT Knowledge Base # リトリーバー表示名、LangBotのUIに表示、多言語対応
+ zh_Hans: FastGPT 知識庫
+ ja_JP: FastGPT ナレッジベース
+ description:
+ en_US: 'Retrieve knowledge from FastGPT knowledge bases' # リトリーバー説明、LangBotのUIに表示、多言語対応。オプション
+ zh_Hans: '従 FastGPT 知識庫中検索知識'
+ ja_JP: 'FastGPT ナレッジベースから知識を取得'
+ icon: assets/icon.svg # リトリーバーアイコン、外部ナレッジベース設定ページに表示
+spec:
+ config: # リトリーバー設定パラメータ、ユーザーは外部ナレッジベース作成時にこれらのパラメータを入力する必要があります
+ - name: api_base_url # パラメータ名
+ type: string # パラメータタイプ: string、number、boolean、select
+ label:
+ en_US: API Base URL
+ zh_Hans: API 基礎地址
+ ja_JP: API ベース URL
+ description:
+ en_US: 'Base URL for FastGPT API'
+ zh_Hans: 'FastGPT API 基礎地址'
+ ja_JP: 'FastGPT API ベース URL'
+ default: 'http://localhost:3000' # デフォルトパラメータ値
+ required: true # 必須かどうか
+ - name: api_key
+ type: string
+ label:
+ en_US: FastGPT API Key
+ zh_Hans: FastGPT API Key
+ ja_JP: FastGPT API キー
+ description:
+ en_US: 'API key from your FastGPT instance'
+ zh_Hans: '従您的 FastGPT 実例獲取的 API Key'
+ ja_JP: 'FastGPT インスタンスから取得した API Key'
+ default: ''
+ required: true
+ - name: search_mode # select型パラメータの例
+ type: select
+ label:
+ en_US: Search Mode
+ zh_Hans: 搜索模式
+ ja_JP: 検索モード
+ description:
+ en_US: 'The search method to use'
+ zh_Hans: '使用的搜索方法'
+ ja_JP: '使用する検索方法'
+ default: 'embedding'
+ options: # select型パラメータはオプションリストを定義する必要があります
+ - name: 'embedding'
+ label:
+ en_US: 'Embedding Search'
+ zh_Hans: '向量搜索'
+ ja_JP: '埋め込み検索'
+ - name: 'fullTextRecall'
+ label:
+ en_US: 'Full-Text Recall'
+ zh_Hans: '全文検索'
+ ja_JP: '全文検索'
+ - name: using_rerank # boolean型パラメータの例
+ type: boolean
+ label:
+ en_US: Use Re-ranking
+ zh_Hans: 使用重排序
+ ja_JP: リランキングを使用
+ description:
+ en_US: 'Whether to use re-ranking'
+ zh_Hans: '是否使用重排序'
+ ja_JP: 'リランキングを使用するかどうか'
+ default: false
+ required: false
+execution:
+ python:
+ path: fastgpt.py # リトリーバーハンドラ、変更しないでください
+ attr: FastGPT # リトリーバーハンドラのクラス名、fastgpt.pyのクラス名と一致
+```
+
+設定項目フォーマットのリファレンスについては、[プラグインマニフェスト設定フォーマット](/en/plugin/dev/basic-info)を参照してください。
+
+## プラグインハンドラ
+
+以下のコードがデフォルトで生成されます(`components/knowledge_retriever/.py`)。`FastGPT`クラスの`retrieve`メソッドでナレッジ検索ロジックを実装する必要があります。完全なコードは[langbot-plugin-demo](https://github.com/langbot-app/langbot-plugin-demo)で見つけることができます。
+
+```python
+# Auto generated by LangBot Plugin SDK.
+# Please refer to https://docs.langbot.app/en/plugin/dev/tutor.html for more details.
+...
+
+class FastGPT(KnowledgeRetriever):
+
+ async def retrieve(self, context: RetrievalContext) -> list[RetrievalResultEntry]:
+ """FastGPTナレッジベースからナレッジを検索"""
+
+ # 1. 設定パラメータを取得
+ api_base_url = self.config.get('api_base_url', 'http://localhost:3000')
+ api_key = self.config.get('api_key')
+ dataset_id = self.config.get('dataset_id')
+ search_mode = self.config.get('search_mode', 'embedding')
+ using_rerank = self.config.get('using_rerank', False)
+
+ # 2. パラメータ検証
+ if not api_key or not dataset_id:
+ logger.error("Missing required configuration: api_key or dataset_id")
+ return []
+
+ # 3. APIリクエストを構築
+ url = f"{api_base_url.rstrip('/')}/api/core/dataset/searchTest"
+ headers = {
+ "Authorization": f"Bearer {api_key}",
+ "Content-Type": "application/json"
+ }
+ payload = {
+ "datasetId": dataset_id,
+ "text": context.query, # RetrievalContextからクエリテキストを取得
+ "searchMode": search_mode,
+ "usingReRank": using_rerank,
+ }
+
+ try:
+ # 4. 外部APIを呼び出す
+ async with httpx.AsyncClient() as client:
+ response = await client.post(url, json=payload, headers=headers, timeout=30.0)
+ response.raise_for_status()
+ result = response.json()
+
+ # 5. レスポンスを解析してRetrievalResultEntryに変換
+ results = []
+ for record in result.get('data', []):
+ # メインデータと補助データをコンテンツとして結合
+ content_text = '\n'.join([
+ record.get('q', ''),
+ record.get('a', '')
+ ]).strip()
+
+ # 検索結果エントリを作成
+ entry = RetrievalResultEntry(
+ id=record.get('id', ''),
+ content=[ContentElement.from_text(content_text)],
+ metadata={
+ 'dataset_id': record.get('datasetId', ''),
+ 'source_name': record.get('sourceName', ''),
+ 'score': record.get('score', 0.0),
+ },
+ # 類似度スコアを距離に変換(スコアが高いほど距離が小さい)
+ distance=1.0 - float(record.get('score', 0.0)),
+ )
+ results.append(entry)
+
+ logger.info(f"Retrieved {len(results)} chunks from FastGPT dataset {dataset_id}")
+ return results
+
+ except httpx.HTTPStatusError as e:
+ logger.error(f"HTTP error from FastGPT API: {e.response.status_code} - {e.response.text}")
+ return []
+ except httpx.RequestError as e:
+ logger.error(f"Request error when calling FastGPT API: {str(e)}")
+ return []
+ except Exception as e:
+ traceback.print_exc()
+ logger.error(f"Unexpected error during retrieval: {str(e)}")
+ return []
+```
+
+### 検索コンテキスト
+
+`RetrievalContext`にはこの検索のコンテキスト情報が含まれます:
+
+```python
+class RetrievalContext(pydantic.BaseModel):
+ """ナレッジ検索コンテキスト"""
+
+ query: str
+ """クエリテキスト、ユーザーの検索質問"""
+```
+
+### 検索結果
+
+検索結果は`RetrievalResultEntry`オブジェクトのリストに変換する必要があり、各オブジェクトは検索されたナレッジチャンクを表します:
+
+```python
+class RetrievalResultEntry(pydantic.BaseModel):
+ """単一検索結果エントリ"""
+
+ id: str
+ """結果ID、このエントリを一意に識別"""
+
+ content: list[ContentElement]
+ """結果コンテンツ、ContentElement.from_text()を使用してテキストコンテンツを作成"""
+
+ metadata: dict[str, Any]
+ """結果メタデータ、ソース、スコアなど、任意のキーと値のペアを含めることができます"""
+
+ distance: float
+ """距離スコア、クエリとの関連性を示します(小さいほど関連性が高い)
+ 通常は1.0 - similarity_scoreとして計算されます"""
+```
+
+### 設定パラメータの取得
+
+`self.config.get(パラメータ名, デフォルト値)`を使用して、ユーザーが設定したパラメータ値を取得します:
+
+```python
+# 文字列パラメータを取得
+api_base_url = self.config.get('api_base_url', 'http://localhost:3000')
+
+# 数値パラメータを取得
+limit = self.config.get('limit', 5000)
+similarity = self.config.get('similarity', 0.0)
+
+# ブールパラメータを取得
+using_rerank = self.config.get('using_rerank', False)
+
+# selectパラメータを取得
+search_mode = self.config.get('search_mode', 'embedding')
+```
+
+## リトリーバーのテスト
+
+作成後、プラグインディレクトリでコマンド`lbp run`を実行してデバッグを開始します。その後、LangBotで:
+
+1. 「ナレッジベース」ページに移動
+2. 外部ナレッジベースを追加
+3. プラグインが提供するナレッジリトリーバーを選択し、設定を入力
+
+
+
+保存後、LangBotパイプラインでこのナレッジベースを選択できます。
diff --git a/ja/plugin/dev/components/tool.mdx b/ja/plugin/dev/components/tool.mdx
new file mode 100644
index 000000000..fadc8efcd
--- /dev/null
+++ b/ja/plugin/dev/components/tool.mdx
@@ -0,0 +1,176 @@
+---
+title: "コンポーネント: Tool"
+---
+
+LangBotの組み込みLocal Agentは、実行中にツールを呼び出して外部世界と対話します。現在、プラグインとMCPの両方を通じてツールを追加することがサポートされています。
+
+## Toolコンポーネントの追加
+
+1つのプラグインには任意の数のツールを含めることができます。プラグインディレクトリでコマンド`lbp comp Tool`を実行し、プロンプトに従ってツール設定を入力します。
+
+```bash
+➜ HelloPlugin > lbp comp Tool
+Generating component Tool...
+Tool name: get_weather_alerts
+Tool description: Get weather alerts for a US state.
+Component Tool generated successfully.
+組件 Tool 生成成功。
+```
+
+これにより、`components/tools/`ディレクトリに`get_weather_alerts.yaml`と`get_weather_alerts.py`ファイルが生成されます。`.yaml`ファイルはツールの基本情報を定義し、`.py`ファイルはツールハンドラです:
+
+```bash
+➜ HelloPlugin > tree
+...
+├── components
+│ ├── __init__.py
+│ └── tools
+│ ├── __init__.py
+│ ├── get_weather_alerts.py
+│ └── get_weather_alerts.yaml
+...
+```
+
+## マニフェストファイル: Tool
+
+```yaml
+apiVersion: v1 # 変更しないでください
+kind: Tool # 変更しないでください
+metadata:
+ name: get_weather_alerts # ツール名、LLM認識用
+ label:
+ en_US: GetWeatherAlerts # ツール表示名、LangBot UIに表示、多言語対応
+ zh_Hans: GetWeatherAlerts
+ description:
+ en_US: 'Get weather alerts for a US state.' # ツール説明、LangBot UIに表示、多言語対応。オプション
+ zh_Hans: '獲取美国某个州的天気預警'
+spec:
+ parameters: [] # ツールパラメータ、会話コンテキストに基づいてLLMが生成する値
+ llm_prompt: 'Get weather alerts for a US state.' # ツールプロンプト、LLMがこのツールを呼び出すかどうかを判断するため
+execution:
+ python:
+ path: get_weather_alerts.py # ツールハンドラ、変更しないでください
+ attr: GetWeatherAlerts # ツールハンドラクラス名、get_weather_alerts.pyのクラス名と一致
+```
+
+## プラグイン処理
+
+以下のコードがデフォルトで生成されます(`components/tools/.py`)。`GetWeatherAlerts`クラスの`call`メソッドでこのツールの呼び出しと戻り値のロジックを実装する必要があります。
+
+```python
+# Auto generated by LangBot Plugin SDK.
+# Please refer to https://docs.langbot.app/en/plugin/dev/tutor.html for more details.
+from __future__ import annotations
+
+from typing import Any
+
+from langbot_plugin.api.definition.components.tool.tool import Tool
+from langbot_plugin.api.entities.builtin.provider import session as provider_session
+
+
+class GetWeatherAlerts(Tool):
+
+ async def call(self, params: dict[str, Any], session: provider_session.Session, query_id: int) -> str:
+ """Fill your tool code here"""
+ return {}
+```
+
+`call`メソッドでこのツールを実装します:
+
+
+天気検索ツールの例は、MCPの[サーバー作成例](https://modelcontextprotocol.io/quickstart/server)から来ています。
+
+
+```python
+from __future__ import annotations
+
+from typing import Any
+
+from langbot_plugin.api.definition.components.tool.tool import Tool
+from langbot_plugin.api.entities.builtin.provider import session as provider_session
+import httpx
+
+# 定数
+NWS_API_BASE = "https://api.weather.gov"
+USER_AGENT = "weather-app/1.0"
+
+
+async def make_nws_request(url: str) -> dict[str, Any] | None:
+ """適切なエラー処理を使用してNWS APIにリクエストを行う。"""
+ headers = {
+ "User-Agent": USER_AGENT,
+ "Accept": "application/geo+json"
+ }
+ async with httpx.AsyncClient() as client:
+ try:
+ response = await client.get(url, headers=headers, timeout=30.0)
+ response.raise_for_status()
+ return response.json()
+ except Exception:
+ return None
+
+def format_alert(feature: dict) -> str:
+ """アラート機能を読みやすい文字列にフォーマットする。"""
+ props = feature["properties"]
+ return f"""
+Event: {props.get('event', 'Unknown')}
+Area: {props.get('areaDesc', 'Unknown')}
+Severity: {props.get('severity', 'Unknown')}
+Description: {props.get('description', 'No description available')}
+Instructions: {props.get('instruction', 'No specific instructions provided')}
+"""
+
+class GetWeatherAlerts(Tool):
+
+ async def call(self, params: dict[str, Any], session: provider_session.Session, query_id: int) -> str:
+ """Fill your tool code here"""
+ state = params.get("state", "CA")
+
+ url = f"{NWS_API_BASE}/alerts/active/area/{state}"
+ data = await make_nws_request(url)
+
+ if not data or "features" not in data:
+ return "Unable to fetch alerts or no alerts found."
+
+ if not data["features"]:
+ return "No active alerts for this state."
+
+ alerts = [format_alert(feature) for feature in data["features"]]
+ return "\n---\n".join(alerts)
+```
+
+このツールでは、`params`から`state`パラメータを取得し、NWS APIを呼び出してその州の天気アラートを取得する必要があるため、マニフェストファイルの`parameters`で`state`パラメータを定義する必要があります。
+
+`parameters`フォーマットは[JSON Schema](https://json-schema.org/docs)に従い、[OpenAI Function Calling機能](https://platform.openai.com/docs/guides/function-calling#defining-functions)でサポートされており、そのルートタイプは`type: object`に固定されています。`properties`にパラメータを追加し、`required`に必須パラメータの説明を追加してください。
+
+```yaml
+...
+spec:
+ parameters:
+ type: object # 変更しないでください
+ properties: # 変更しないでください、ここにパラメータを追加
+ state:
+ type: string
+ description: 'Two-letter US state code (e.g. CA, NY)'
+ required: # ここに必須パラメータの説明を追加
+ - state
+...
+```
+
+このツールは`httpx`ライブラリも使用しているため、プラグインディレクトリの`requirements.txt`に`httpx`依存関係を追加する必要があります。
+
+```txt
+# HelloPlugin/requirements.txt
+langbot-plugin # デフォルトで既に存在
+httpx
+```
+
+次に、プラグインディレクトリでコマンド`lbp run`を実行してデバッグを開始します。LangBotでツール呼び出しをサポートするモデルを設定し、対応するパイプラインでそのモデルの使用を選択してこのツールを使用します。
+
+
+
+## 次のステップ
+
+ツールの基本的な使い方を学びました。次は:
+
+- [プラグイン共通API](/en/plugin/dev/apis/common)を確認してください
diff --git a/ja/plugin/dev/directory-structure.mdx b/ja/plugin/dev/directory-structure.mdx
new file mode 100644
index 000000000..dd613f174
--- /dev/null
+++ b/ja/plugin/dev/directory-structure.mdx
@@ -0,0 +1,187 @@
+---
+title: "プラグインディレクトリ構造"
+---
+
+このドキュメントでは、LangBotプラグインの標準ディレクトリ構造とファイル組織仕様を紹介し、開発者が準拠したプラグインを作成できるように支援します。
+
+## 基本ディレクトリ構造
+
+標準的なLangBotプラグインは次のディレクトリ構造に従う必要があります:
+
+```
+MyPlugin/
+├── manifest.yaml # プラグインマニフェストファイル(必須)
+├── main.py # プラグインメインエントリファイル(必須)
+├── README.md # 英語プラグインドキュメント(必須)
+├── readme/ # 多言語READMEディレクトリ(オプション)
+│ ├── README_zh_Hans.md # 簡体字中国語ドキュメント
+│ ├── README_ja_JP.md # 日本語ドキュメント
+│ └── README_zh_Hant.md # 繁体字中国語ドキュメント(オプション)
+├── assets/ # リソースファイルディレクトリ
+│ ├── icon.svg # プラグインアイコン(推奨)
+│ └── ... # その他のリソースファイル
+├── components/ # コンポーネントディレクトリ
+│ ├── event_listener/ # イベントリスナーコンポーネント
+│ ├── commands/ # コマンドコンポーネント
+│ └── tools/ # ツールコンポーネント
+├── requirements.txt # Python依存関係(オプション)
+└── config/ # 設定ディレクトリ(オプション)
+```
+
+## 多言語README仕様
+
+### ファイル配置仕様
+
+LangBotプラグインは、異なる言語のユーザーにローカライズされたプラグイン説明を提供するために、多言語READMEドキュメントをサポートしています。
+
+**重要な仕様:**
+
+1. **`ルートREADME.md(必須)`**
+ - **英語**で記述する必要があります
+ - プラグインのデフォルトドキュメントとして機能します
+ - 要求された言語バージョンが存在しない場合のフォールバックとして使用されます
+2. **`readme/ディレクトリ(オプション)`**
+ - **非英語**のREADMEドキュメントを保存するために使用
+ - ファイル命名形式: `README_{言語コード}.md`
+
+### サポートされる言語コード
+
+[RFC 4646](https://datatracker.ietf.org/doc/html/rfc4646)標準に従い、LangBotは現在次の言語コードをサポートしています:
+
+| 言語 | 言語コード | ファイル名 | 配置場所 |
+| ------ | -------------- | ------------------- | ------------------ |
+| 英語 | `en`または`en_US` | `README.md` | **プラグインルートディレクトリ** |
+| 簡体字中国語 | `zh_Hans` | `README_zh_Hans.md` | `readme/`ディレクトリ |
+| 繁体字中国語 | `zh_Hant` | `README_zh_Hant.md` | `readme/`ディレクトリ |
+| 日本語 | `ja_JP` | `README_ja_JP.md` | `readme/`ディレクトリ |
+
+### ディレクトリ構造の例
+
+```
+MyPlugin/
+├── README.md # ✅ 英語版(必須、ルートディレクトリ)
+└── readme/ # ✅ 多言語ディレクトリ
+ ├── README_zh_Hans.md # ✅ 簡体字中国語
+ ├── README_ja_JP.md # ✅ 日本語
+ └── README_zh_Hant.md # ✅ 繁体字中国語
+```
+
+### 誤った例
+
+❌ **誤り: readme/ディレクトリに英語READMEを配置**
+
+```
+MyPlugin/
+├── readme/
+│ ├── README_en.md # ❌ 誤り: 英語はreadme/に配置すべきではない
+│ └── README_zh_Hans.md
+```
+
+❌ **誤り: ルートREADME.mdに非英語コンテンツが含まれる**
+
+```markdown
+# MyPlugin
+
+This is a plugin...
+
+これはプラグインです... # ❌ 誤り: ルートREADME.mdは英語のみを含むべき
+```
+
+### README言語フォールバックロジック
+
+ユーザーが特定の言語でREADMEを要求した場合、LangBotは次の順序で検索します:
+
+1. `readme/README_{言語コード}.md`を読み取ろうとします
+2. 見つからない場合は、ルート`README.md`(英語版)にフォールバックします
+
+**例:**
+
+- ユーザーが簡体字中国語(`zh_Hans`)を要求
+ - → `readme/README_zh_Hans.md`を検索
+ - → 見つからない場合は、`README.md`(英語版)を返します
+- ユーザーが日本語(`ja_JP`)を要求
+ - → `readme/README_ja_JP.md`を検索
+ - → 見つからない場合は、`README.md`(英語版)を返します
+
+## リソースファイルディレクトリ
+
+### assets/ディレクトリ
+
+`assets/`ディレクトリはプラグインの静的リソースファイルを保存するために使用されます。
+
+**推奨構造:**
+
+```
+assets/
+├── icon.svg # プラグインアイコン(SVG形式推奨)
+├── example.png # 例画像
+├── screenshot1.png # スクリーンショット
+└── logo.png # ロゴ画像
+```
+
+**アイコン仕様:**
+
+- プラグインアイコンとして`icon.svg`を使用することを推奨
+- サポートされる形式: `.svg`、`.png`、`.jpg`、`.jpeg`、`.gif`
+- 推奨サイズ: 最低256x256ピクセル
+- `manifest.yaml`での参照: `icon: assets/icon.svg`
+
+### READMEでのリソース参照
+
+READMEドキュメントで相対パスを使用してassets/ディレクトリの画像を参照できます:
+
+```markdown
+# MyPlugin
+
+
+
+
+```
+
+**注意:** プラグインをLangBot Spaceにアップロードすると、リソースファイルが自動的に処理およびホストされ、ユーザーがREADMEを表示したときに画像が正しく表示されます。
+
+## コンポーネントディレクトリ
+
+プラグイン機能はコンポーネントを通じて実装され、タイプ別に`components/`ディレクトリに整理する必要があります:
+
+```
+components/
+├── event_listener/ # イベントリスナー
+│ ├── on_message.py
+│ └── on_message.yaml
+├── commands/ # コマンド
+│ ├── hello.py
+│ └── hello.yaml
+└── tools/ # ツール
+ ├── search.py
+ └── search.yaml
+```
+
+コンポーネント開発の詳細な仕様については、[コンポーネントの追加](/en/plugin/dev/components/add)を参照してください。
+
+## 設定ファイル
+
+### manifest.yaml
+
+プラグインマニフェストファイル`manifest.yaml`はコア設定ファイルであり、プラグインメタデータ、設定項目、コンポーネントリストなどの情報が含まれます。
+
+詳細な手順については、[プラグイン設定情報の完成](/en/plugin/dev/basic-info)を参照してください。
+
+### requirements.txt
+
+プラグインが追加のPython依存関係を必要とする場合は、ルートディレクトリに`requirements.txt`ファイルを作成します:
+
+```
+requests>=2.28.0
+beautifulsoup4>=4.11.0
+pillow>=9.0.0
+```
+
+**注意:** LangBotは、プラグインのインストール時に`requirements.txt`にリストされている依存関係を自動的にインストールします。
+
+## 関連ドキュメント
+
+- [基本チュートリアル](/en/plugin/dev/tutor) - 最初のプラグインを作成する方法を学ぶ
+- [プラグイン設定情報の完成](/en/plugin/dev/basic-info) - manifest.yamlの設定
+- [コンポーネントの追加](/en/plugin/dev/components/add) - プラグインコンポーネントの開発
+- [マーケットプレイスに公開](/en/plugin/dev/publish/market) - プラグインを配布
\ No newline at end of file
diff --git a/ja/plugin/dev/migration.mdx b/ja/plugin/dev/migration.mdx
new file mode 100644
index 000000000..e10e0fb1d
--- /dev/null
+++ b/ja/plugin/dev/migration.mdx
@@ -0,0 +1,27 @@
+---
+title: "移行ガイド"
+---
+
+このチュートリアルでは特定の考慮事項を強調しています。まず現在のバージョンのプラグインチュートリアルをお読みいただき、その後このドキュメントをプラグイン移行のリファレンスとしてご使用ください。
+
+## 3.xサポートの非同期プラグインからの移行
+
+
+- 主な期間: 2024.2 ~ 2025.8
+- 登録方法: `main.py`のプラグインクラスで`@handler`デコレータを使用してイベントリスナーを登録し、`@llm_func`デコレータを使用してコンテンツ関数(ツール)を登録; すべてのハンドラ関数は非同期関数(async def)
+
+
+- プラグインとコンポーネント登録方法: 以前の単一プラグインクラスデコレータ登録方法から、マニフェストファイル登録方法に変更されました。[マニフェストファイル](/en/plugin/dev/basic-info)を参照してください; そして、異なるタイプのコンポーネントを独立して分離しました。詳細については、[コンポーネントの追加](/en/plugin/dev/components/add)を参照してください。
+- メッセージチェーンエンティティ: リファクタリングされました。各メッセージチェーン要素の構築方法では、**名前付きパラメータ**の明示的な渡しが必要になりました。[メッセージプラットフォームエンティティ](/en/plugin/dev/apis/messages)を参照してください。
+- イベントリスナー: 後方互換性を提供しますが、コンテキストで`query: Query`オブジェクトは提供されなくなりました。詳細については、[パイプラインイベント](/en/plugin/dev/apis/pipeline-events)を参照してください。
+- コマンドコンポーネント: リファクタリングされました。[Commandコンポーネント](/en/plugin/dev/components/command)を参照してください。
+
+## 2.xおよび3.xサポートの同期プラグインからの移行
+
+
+- 主な期間: 2023.1 ~ 2024.2
+- 登録方法: `main.py`のプラグインクラスで`@on`デコレータを使用してイベントリスナーを登録し、`@func`デコレータを使用してコンテンツ関数(ツール)を登録; すべてのハンドラ関数は同期関数(def)
+
+
+- 同期から非同期へ: プラグインランタイムは完全に非同期(asyncioベース)に変更されました。IO操作を含むすべてのプラグインコードを非同期記述に変更してください。
+- 詳細な内容については、上記の3.x非同期プラグイン移行ガイドを参照してください。
diff --git a/ja/plugin/dev/publish/github.mdx b/ja/plugin/dev/publish/github.mdx
new file mode 100644
index 000000000..e0e6e61fc
--- /dev/null
+++ b/ja/plugin/dev/publish/github.mdx
@@ -0,0 +1,25 @@
+---
+title: "GitHub経由でプラグインを配布"
+---
+
+プラグインをGitHubにアップロードし、リポジトリのReleaseを作成して`.lbpkg`ファイルをアップロードすることで、他のユーザーがLangBotでインストールできるようになります。
+
+## プラグインのビルド
+
+プラグインディレクトリで次のコマンドを実行します:
+
+```bash
+lbp build
+```
+
+これにより、`dist`ディレクトリに`.lbpkg`ファイルが生成されます。
+
+## Releaseの作成
+
+プラグインをGitHubにアップロードし、プラグインリポジトリのReleaseページに移動し、Releaseを作成をクリックして、先ほどビルドした`.lbpkg`ファイルをアップロードします。
+
+
+
+## プラグインのインストール
+
+LangBotのプラグイン管理ページで、右上隅をクリックしてGitHubインストール方法を選択します。
diff --git a/ja/plugin/dev/publish/market.mdx b/ja/plugin/dev/publish/market.mdx
new file mode 100644
index 000000000..a80f8f696
--- /dev/null
+++ b/ja/plugin/dev/publish/market.mdx
@@ -0,0 +1,67 @@
+---
+title: "プラグインマーケットプレイスに公開"
+---
+
+CLI経由で[LangBotプラグインマーケットプレイス](https://space.langbot.app/market)にプラグインを公開します。
+
+## LangBot Spaceでアカウントを作成
+
+LangBot SpaceはLangBotの集中サービスプラットフォームです。[LangBot Space](https://space.langbot.app)にアクセスし、右上隅をクリックしてGitHubでログインし、アカウントを作成してください。
+
+
+
+GitHubの認証ページにリダイレクトされますので、プロンプトに従って認証を完了してください。
+
+## CLIを使用してLangBot Spaceにログイン
+
+任意のディレクトリでコマンド`lbp login`を実行します:
+
+```bash
+➜ HelloPlugin > lbp login
+Starting LangBot CLI login process...
+Generating device code...
+
+==================================================
+Please copy the user code and complete verification in your browser:
+User Code: 6CD64D56
+Verification URL: https://space.langbot.app/auth/device
+Device code expires in: 120 seconds
+==================================================
+
+Waiting for verification...
+```
+
+`Verification URL`をクリックしてLangBot Spaceにリダイレクトし、`User Code`を入力してログインを完了してください。
+
+
+
+```bash
+==================================================
+✅ Login successful!
+Access token saved to: ~/.langbot/cli/config.json
+Token type: Bearer
+Expires in: 21600 seconds
+==================================================
+```
+
+ログインが成功したら、CLIを使用してプラグインをアップロードできます。
+
+## プラグインのアップロード
+
+プラグインディレクトリで`lbp publish`を実行してください:
+
+```bash
+➜ HelloPlugin > lbp publish
+Building plugin to dist/tmp...
+ - Skipping ignored directory: dist
+ - Skipping ignored directory: __pycache__
+ ...
+Plugin built successfully: dist/tmp/RockChinQ-HelloPlugin-0.1.0.lbpkg
+✅ Plugin published successfully. You can check it on https://https://space.langbot.app/market
+```
+
+[LangBotプラグインマーケットプレイス](https://space.langbot.app/market)でプラグイン提出タスクを確認できます。承認をお待ちください。承認後、マーケットプレイスでプラグインを表示できます。
+
+
+
+ご質問がある場合は、`hello@langbot.app`にメールを送信するか、[コミュニティ](/en/insight/community)を通じてお問い合わせください。
diff --git a/ja/plugin/dev/style.mdx b/ja/plugin/dev/style.mdx
new file mode 100644
index 000000000..a334bc4de
--- /dev/null
+++ b/ja/plugin/dev/style.mdx
@@ -0,0 +1,17 @@
+---
+title: "コードスタイルガイド"
+---
+
+## ロギング
+
+プラグインでは、`logging`モジュールを使用してログを記録してください。`print`文を使用しないでください(これはコンテナ環境でログが出力されなくなります)。
+
+```python
+import logging
+
+logger = logging.getLogger(__name__) # 任意の Python ファイルの先頭で logging モジュールをインポートし、logger オブジェクトを定義します
+
+logger.info('This is an info message') # logger.info を使用して info レベルのログを記録します
+logger.warning('This is a warning message')
+logger.error('This is an error message')
+```
diff --git a/ja/plugin/dev/tutor.mdx b/ja/plugin/dev/tutor.mdx
new file mode 100644
index 000000000..6490400a0
--- /dev/null
+++ b/ja/plugin/dev/tutor.mdx
@@ -0,0 +1,135 @@
+---
+title: "プラグイン開発チュートリアル"
+---
+
+## アーキテクチャの基礎
+
+バージョン4.0では、高セキュリティで柔軟性の高い本番環境グレードのプラグインシステムを導入し、開発者に豊富なAPIと使いやすいサポートツールを提供しています。
+
+
+
+Plugin Runtimeは、プラグインのライフサイクルを管理し、LangBotとプラグイン間の相互作用を調整するために使用されます。`stdio`と`websocket`の2つの動作モードがあります。LangBotがユーザーによって直接起動される場合(コンテナ内で実行されていない場合)、`stdio`モードを使用します。これは個人ユーザーや軽量環境で一般的です。LangBotがコンテナ内で実行される場合、`websocket`モードを使用します。これは本番環境専用に設計されています。
+
+Plugin Runtimeは、インストールされた各プラグインを自動的に起動し、stdioを通じて相互作用します。プラグイン開発シナリオでは、開発者は`lbp`コマンドラインツールを使用してプラグインを起動し、WebSocketを介して実行中のRuntimeに接続してデバッグできます。
+
+### プラグイン構造
+
+プラグインのディレクトリ構造は次のようになります:
+
+```bash
+➜ HelloPlugin > tree
+.
+├── assets
+│ └── icon.svg # プラグインアイコン、プラグインマーケットプレイスページに表示
+├── components # プラグインコンポーネントディレクトリ、さまざまなコンポーネントコードとマニフェストファイルを保存
+│ ├── __init__.py
+│ ├── commands
+│ │ ├── __init__.py
+│ │ ├── info.py
+│ │ └── info.yaml
+│ ├── event_listener
+│ │ ├── __init__.py
+│ │ ├── default.py
+│ │ └── default.yaml
+│ └── tools
+│ ├── __init__.py
+│ ├── get_weather_alerts.py
+│ └── get_weather_alerts.yaml
+├── main.py # プラグインメインプログラム、プラグインライフサイクルをリッスン
+├── manifest.yaml # プラグインマニフェストファイル、プラグインメタデータを記述
+├── README.md # プラグインドキュメントファイル、プラグイン機能と使用方法を記述、プラグインマーケットプレイスページに表示
+└── requirements.txt # プラグイン依存関係ファイル
+```
+
+main.pyのプラグインクラスは各プラグインの共通コードで、プラグイン起動時に初期化され、コンテキスト情報(設定など)が渡されます。ここでプラグインの初期化とシャットダウンロジックを実装できます。プラグインクラスは`langbot_plugin.api.definition.plugin.BasePlugin`を継承し、[LangBotグローバルAPI](/en/plugin/dev/apis/common)を提供します。
+
+各コンポーネントはプラグインのコア機能モジュールであり、必要に応じて[追加および削除](/en/plugin/dev/components/add)できます。異なるコンポーネントは異なる状況で呼び出され、後でプラグイン機能を簡単に拡張できます。各コンポーネントは`langbot_plugin.api.definition.components`パッケージ下のさまざまなコンポーネント基底クラスから直接継承し、`plugin: BasePlugin`オブジェクトを含み、プラグインのAPIを直接呼び出すことができます。
+
+
+
+このチュートリアルを続けて読んで、プラグイン開発プロセスを理解してください。
+
+
+## AI 支援開発
+
+- [skills-LangBotplugin](https://github.com/TyperBody/skills-LangBotplugin) - コミュニティメンバー [@TyperBody](https://github.com/TyperBody) が提供する Skills、AI を使ってプラグインを迅速に開発できます、ぜひお試しください
+
+## CLIのインストール
+
+Python 3.10以上がインストールされており、[uvパッケージマネージャー](https://docs.astral.sh/uv/)がインストールされていることを確認してください。
+
+任意の空のディレクトリで次のコマンドを実行して、LangBot CLIとSDKをインストールします:
+
+```bash
+pip install -U langbot_plugin
+```
+
+## プラグインディレクトリの初期化
+
+プラグイン名が`HelloPlugin`であると仮定して、任意のディレクトリに`HelloPlugin`ディレクトリを作成し、そのディレクトリに入り、コマンドを実行してプラグインを初期化します:
+
+```bash
+lbp init
+```
+
+プロンプトに従って`Author`、`Description`などの情報を入力します。
+
+
+
+
+
+
+この操作により、プラグインの初期ファイルが生成されます。お気に入りのエディターで`HelloPlugin`ディレクトリを開き、プラグインコードの記述を開始できます。
+
+
+`lbp`コマンドの代わりに`python -m langbot_plugin.cli.__init__`を使用できます。
+
+例えば:
+
+```bash
+python -m langbot_plugin.cli.__init__ init HelloPlugin
+cd HelloPlugin
+```
+
+
+## デバッグモードの開始
+
+まずLangBotをデプロイして起動し、Plugin Runtimeが実行されてポート`5401`をリッスンしていることを確認する必要があります。
+
+
+
+- `Stdio`モード: 起動パラメータ`--standalone-runtime`なしでソースコードを使用してLangBotを起動すると、LangBotは自動的にPlugin Runtimeをサブプロセスとして起動し、`stdio`(標準入出力ストリーム)を通じてPlugin Runtimeと通信します。この場合、RuntimeはLangBotルートディレクトリの`data/plugins`ディレクトリからプラグインをロードし、LangBotホストのポート`5401`をデバッグポートとしてリッスンします。
+
+- `WebSocket`モード:
+ - 本番環境: 公式の`docker-compose.yaml`を使用してLangBotを起動すると、Plugin Runtimeは別のコンテナで実行され、起動パラメータ`--standalone-runtime`のためにLangBotはWebSocketモードでPlugin Runtimeと通信します。Runtimeコンテナの5401ポートはデフォルトでホストの5401ポートにマッピングされます。
+ - 開発環境: 起動パラメータ`--standalone-runtime`を使用してソースコードでLangBotを起動すると、LangBotは`data/config.yaml`で設定された`plugin.runtime_ws_url`アドレス(ポートは通常5400)に従って既に起動されているPlugin Runtimeに接続します。スタンドアロンのPlugin Runtimeを自分で起動する必要があります。[Plugin Runtimeの開発](/en/develop/plugin-runtime)を参照してください。
+
+`stdio`または`websocket`モードのいずれの場合でも、Plugin Runtimeはそのホストのポート`5401`をプラグインデバッグ接続のデバッグポートとしてリッスンします。
+
+プラグインを開発する際は、[開発設定](/en/develop/dev-config)方法に従ってLangBotを起動することをお勧めします。これによりPlugin RuntimeがStdioモードで起動され、プラグイン開発が容易になります。
+
+
+プラグインディレクトリの`.env.example`ファイルを`.env`にコピーし、`DEBUG_RUNTIME_WS_URL`をPlugin RuntimeのWebSocketアドレスに確認または変更します。
+
+```bash
+cp .env.example .env
+```
+
+プラグインデバッグを開始すると、プラグインの出力が表示されます:
+
+```bash
+lbp run
+```
+
+
+
+そして、LangBotのWebUIでこのプラグインがロードされたことを確認できます。
+
+
+
+## 次のステップ
+
+このチュートリアルでは、プラグイン機能を段階的に完成させる方法を案内します。
+
+- プラグイン情報の変更: プラグインは基本的なプラグイン情報で作成されました。[プラグイン情報を完成させて](/en/plugin/dev/basic-info)ください。
+- コンポーネントの追加: プラグインコンポーネントはプラグインのコア機能ユニットです。必要に応じて[コンポーネントを追加](/en/plugin/dev/components/add)できます。
diff --git a/ja/plugin/plugin-intro.mdx b/ja/plugin/plugin-intro.mdx
new file mode 100644
index 000000000..affc667d4
--- /dev/null
+++ b/ja/plugin/plugin-intro.mdx
@@ -0,0 +1,55 @@
+---
+title: "LangBotプラグイン"
+---
+
+LangBotは、大規模言語モデルツール、コマンド、メッセージングプラットフォームアダプター、LLMリクエスターなど、さまざまな内部コンポーネントで構成されています。拡張性と柔軟性の要件を満たすために、本番環境グレードのプラグインシステムを実装しました。
+
+各プラグインは独立したプロセスで実行され、Plugin Runtimeによって統一的に管理されます。
+
+
+
+## プラグイン構造
+
+プラグインは、特定の機能に基づいて次のコンポーネントを提供できます:
+
+- イベントハンドラー: パイプライン実行中のイベントをリッスンし、コンテキストやパイプラインを変更します。
+- コマンド: `!`(または他の設定されたプレフィックス)で始まるユーザーコマンドメッセージによってトリガーされます。
+- ツール: LangBotの組み込みLocal Agentの実行中にLLMによって呼び出されます。
+- ナレッジリトリーバー: 外部ナレッジベースから関連するナレッジを検索するために使用されます。
+
+将来的には、プラグイン実装のためにより多くのコンポーネントタイプがサポートされます。
+
+## プラグインのインストール
+
+現在、プラグインパッケージのアップロードとプラグインマーケットプレイスからのプラグインのインストールをサポートしています。
+LangBotのプラグイン管理ページで、右上隅をクリックしてインストール方法を選択します。
+
+
+
+`Upload Local`をクリックして、他の人が共有した`.lbpkg`ファイルまたはマーケットプレイスからダウンロードしたファイルを選択してプラグインをインストールします。
+
+または、プラグインマーケットプレイスタブをクリックし、プラグインを選択してインストールをクリックします。
+
+
+
+プラグインをインストールした後、パイプライン設定ページでプラグインを選択する必要があります。
+
+
+
+## プラグイン管理
+
+### プラグイン設定
+
+一部のプラグインでは、特定の設定項目を入力する必要がある場合があります(プラグインREADMEの指示を参照)。プラグインカードをクリックしてプラグイン詳細ページに入り、プロンプトに従って必要な情報を取得して入力します。
+
+
+
+### プラグインの更新
+
+プラグインマーケットプレイスからインストールされたプラグインのみを更新できます。
+
+
+
+## プラグインマーケットプレイス
+
+プラグインマーケットプレイスには、LangBotの内部`プラグイン管理`ページからアクセスするか、スタンドアロンサイト[LangBotプラグインマーケットプレイス](https://space.langbot.app/market)にアクセスできます。
diff --git a/ja/tags/readme.mdx b/ja/tags/readme.mdx
new file mode 100644
index 000000000..baba68217
--- /dev/null
+++ b/ja/tags/readme.mdx
@@ -0,0 +1,23 @@
+---
+title: "Service API 概要"
+---
+
+LangBotは、外部サービスと統合するための一連のAPIを提供します。これらのAPIはAPIキーで認証され、HTTP APIのサブセットです。フロントエンドとバックエンドの通信用APIドキュメントを表示するには、[開発](/en/develop/dev-config)セクションにアクセスしてください。
+
+
+Service APIは現在ベータ版であり、一部のAPIは頻繁に変更される可能性があります。
+
+
+## APIキーの取得
+
+WebUIのサイドバーにある`API Keys`ボタンをクリックして、APIキーを作成します。
+
+
+
+作成後、APIキーをコピーして保存します。
+
+
+
+## APIの使用
+
+左サイドバーには、利用可能なすべてのAPIが一覧表示されています。インスタンスアドレス(バックエンドが公開するポートアドレス、デフォルトは`http://localhost:5300`)とAPIキーを入力し、`Try it out`ボタンをクリックしてAPIを呼び出すことができます。
diff --git a/ja/tags/webhook.mdx b/ja/tags/webhook.mdx
new file mode 100644
index 000000000..57d8e8934
--- /dev/null
+++ b/ja/tags/webhook.mdx
@@ -0,0 +1,106 @@
+---
+title: "Webhook"
+---
+
+Webhookを使用すると、ボットメッセージイベントを外部サービスに送信して処理できます。
+
+## Webhookの設定
+
+1. LangBot WebUIで、サイドバーの「API統合」をクリックします
+2. 「Webhooks」タブに切り替えます
+3. 「+」をクリックして新しいWebhookを作成します
+4. 以下を入力します:
+ - **Name**: Webhook識別子
+ - **URL**: イベントを受信するターゲットURL
+ - **Description**: オプション
+ - **Status**: 有効または無効
+
+## イベント形式
+
+### 個人メッセージ (bot.person_message)
+
+```json
+{
+ "uuid": "event-unique-id",
+ "event_type": "bot.person_message",
+ "data": {
+ "bot_uuid": "bot-uuid",
+ "adapter_name": "AdapterName",
+ "sender": {
+ "id": "user-id",
+ "name": "User Name"
+ },
+ "message": [
+ {
+ "type": "Plain",
+ "text": "Message content"
+ }
+ ],
+ "timestamp": 1234567890
+ }
+}
+```
+
+### グループメッセージ (bot.group_message)
+
+```json
+{
+ "uuid": "event-unique-id",
+ "event_type": "bot.group_message",
+ "data": {
+ "bot_uuid": "bot-uuid",
+ "adapter_name": "AdapterName",
+ "group": {
+ "id": "group-id",
+ "name": "Group Name"
+ },
+ "sender": {
+ "id": "user-id",
+ "name": "User Name"
+ },
+ "message": [
+ {
+ "type": "Plain",
+ "text": "Message content"
+ }
+ ],
+ "timestamp": 1234567890
+ }
+}
+```
+
+## レスポンス形式
+
+WebhookサービスはJSONを返す必要があります:
+
+```json
+{
+ "status": "ok",
+ "skip_pipeline": false
+}
+```
+
+### パラメーター
+
+- **status**: 処理ステータス(「ok」を推奨)
+- **skip_pipeline**: LangBotパイプライン処理をスキップするかどうか
+ - `true`: メッセージはパイプラインで続行されません
+ - `false`: メッセージは通常どおり続行されます
+
+
+`skip_pipeline`を使用すると、メッセージ処理を完全に引き継ぐことができます。`true`の場合、メッセージはWebhookサービスによってのみ処理され、LangBotのAI機能はトリガーされません。
+
+
+## 統合例
+
+### Dify Workflow
+
+[dify-plugin-langbot-trigger](https://github.com/langbot-app/dify-plugin-langbot-trigger)プラグインを使用して、LangBotのWebhookイベントを受信し、Difyでワークフローを作成できます。
+
+## 注意事項
+
+- Webhook URLはアクセス可能である必要があります
+- リクエストタイムアウト: 15秒
+- 失敗したリクエストは通常の処理に影響しません
+- 複数のWebhookは並行して実行されます
+- `skip_pipeline: true`を返すWebhookがある場合、パイプライン処理はスキップされます
diff --git a/ja/usage/knowledge/readme.mdx b/ja/usage/knowledge/readme.mdx
new file mode 100644
index 000000000..7accc82d2
--- /dev/null
+++ b/ja/usage/knowledge/readme.mdx
@@ -0,0 +1,37 @@
+---
+title: "ナレッジベースの使用"
+---
+
+LangBotはRAG(Retrieval-Augmented Generation)をネイティブサポートしています。組み込みナレッジベースを作成してパイプラインにバインドすることで、ナレッジベースの内容に基づいて質問に答えることができます。LangBotは外部のナレッジ検索サービス(例: Dify、RAGFlow)への接続もサポートしています。
+
+## 組み込みナレッジベースの構築
+
+
+組み込みナレッジベースの作成と使用には、まず埋め込みモデルの設定が必要です。[モデルの設定](/ja/usage/models/readme)をお読みください。
+
+
+`ナレッジベースを作成`ボタンをクリックし、名前を入力し、既に設定済みの埋め込みモデルを選択してから`作成`をクリックします。
+
+作成後、ナレッジベースの「ドキュメント」タブに移動してドキュメントをアップロードします。LangBotはバックグラウンドで自動的に解析とインデックス化を行います。
+
+
+
+## 外部ナレッジベースの接続
+
+ナレッジベースページで「外部ナレッジベース」タブに切り替え、外部リトリーバーを追加します。ダイアログで使用するナレッジリトリーバープラグインを選択します(関連プラグインをプラグイン管理で事前にインストールしてください)。サポートされているリトリーバーは[プラグインマーケットプレイス](https://space.langbot.app/market?category=KnowledgeRetriever)で確認できます。
+
+## ナレッジベースの使用
+
+パイプライン設定に移動し、「AI」タブで`Local Agent`をランナーとして選択してから、先ほど作成したナレッジベースを選択します。
+
+
+
+
+
+
+LangBotの組み込みナレッジベースは、ランナーが`Local Agent`に設定されている場合にのみ使用できます。他のランナーについては、それぞれのドキュメントを参照してください。
+
+
+これで`チャットデバッグ`でナレッジベースを使用したり、このパイプラインにリンクされたボットを通じて使用できます:
+
+
diff --git a/ja/usage/mcp/readme.mdx b/ja/usage/mcp/readme.mdx
new file mode 100644
index 000000000..0d86c1ba4
--- /dev/null
+++ b/ja/usage/mcp/readme.mdx
@@ -0,0 +1,38 @@
+---
+title: "MCPサーバーの使用"
+---
+
+
+LangBotはMCPサーバーをサポートしています。MCPサーバーを追加して、大規模言語モデルのツール呼び出し機能を活用し、LLMリクエストをより適切に処理できます。
+
+
+- MCPサーバーの推奨取得チャネル: [Composio MCP](https://mcp.composio.dev/)
+
+
+## モデルのFunction Callingを有効化
+
+画像に示すように、モデルの`Function Calling`機能を有効にします。
+
+
+
+## MCPサーバーの作成
+
+`プラグイン管理`をクリックしてから`MCP管理`をクリックします:
+
+
+
+右上の`追加`をクリックしてから`MCPサーバーを作成`をクリックします。
+
+
+
+例えば、Fetch HTMLサーバーを使用するには、対応するURLを入力し、`テスト`をクリックしてMCPサーバーをテストし、`送信`をクリックしてサーバーを追加します。
+
+追加後、カードのスイッチをクリックしてMCPサーバーに接続します。カードをクリックしてMCPサーバーの詳細を表示します:
+
+
+
+## 効果
+
+パイプライン設定で`Local Agent`をランナーとして選択し、function callingをサポートするモデルを使用する必要があります。
+
+
diff --git a/ja/usage/models/readme.mdx b/ja/usage/models/readme.mdx
new file mode 100644
index 000000000..d03b9493c
--- /dev/null
+++ b/ja/usage/models/readme.mdx
@@ -0,0 +1,47 @@
+---
+title: "モデルの設定(Models)"
+---
+
+## LangBot Models
+
+LangBot Modelsは、LangBotが公式に提供するモデルサービスです。LangBot Spaceアカウントでローカルインスタンスを初期化すると、利用可能なモデルが自動的にインスタンスに追加され、設定は不要です。すぐに始められるように、一定の無料枠が提供されます。
+
+
+
+具体的な利用可能モデルについては、[LangBot Space](https://space.langbot.app/models)をご確認ください。
+
+## カスタムモデル
+
+他のソースからモデルを追加することもできます。
+
+### 対話モデル (LLM Model)
+
+モデルはパイプラインによってメッセージ処理に使用されます。最初に設定したモデルがデフォルトパイプラインのモデルとして設定されます。
+
+
+
+複数のモデルを追加して、パイプラインでどのモデルを使用するかを選択できます。
+
+
+
+これら4つのパラメータを入力します: `モデル名`、`モデルプロバイダー`、`リクエストURL`、`APIキー`、そして送信します。
+
+モデルの機能については、特定のモデルの特性に応じて選択してください:
+
+- ビジュアル機能: 画像を認識するために有効にする必要があります
+
+- Function Calling: 会話でAgentツールを使用するために有効にする必要があります
+
+### 埋め込みモデル (Embedding Model)
+
+埋め込みモデルはメッセージのベクトル表現を計算するために使用されます。ナレッジベースを使用する場合は、このモデルを設定してください。
+
+
+
+これら4つのパラメータを入力します: `モデル名`、`モデルプロバイダー`、`リクエストURL`、`APIキー`、そして送信します。その後、ナレッジベースでこのモデルを使用するように設定してください。
+
+### seekdb内蔵埋め込みモデルの使用(ゼロ設定)
+システムにはseekdbが提供する公式埋め込みモデルが統合されており、パラメータの入力は不要です。
+- 「埋め込みモデル」ページで「seekdb-内蔵」を選択します;
+- 「保存」をクリックするとすぐに使用できます;
+- その後、ナレッジベースでこのモデルを選択すると有効になります。
diff --git a/ja/usage/pipelines/coze.mdx b/ja/usage/pipelines/coze.mdx
new file mode 100644
index 000000000..b817b5b86
--- /dev/null
+++ b/ja/usage/pipelines/coze.mdx
@@ -0,0 +1,51 @@
+---
+title: "Coze APIの統合"
+---
+
+このドキュメントでは、CozeプラットフォームからTokenとBot IDを取得し、LangBotパイプライン設定に入力する方法を説明します。
+
+## 1. TokenとBot IDの取得
+
+1. Cozeプラットフォームにログインし、開発者コンソールに入ります。
+
+
+2. 「API管理」でトークンを作成してコピーします。
+
+
+
+Coze認証では、coze.cnは「サービスIDと認証情報」を通じた長期認証をサポートしていますが、coze.comはPersonal Access Tokenのみを提供しています。
+
+
+3. プロジェクト開発セクションから自分のエージェントを選択します(または新しいエージェントを作成します)。取得したIDが`bot_id`です。
+
+
+* エージェントを公開する際は、必ずAPIオプションを選択してください
+
+
+以下の2つの情報を安全に保管してください:
+- **token**: Cozeプラットフォームで生成されたトークン
+- **bot_id**: Bot ID
+
+## 2. LangBotでの設定入力
+
+1. LangBot WebUIを開き、パイプラインの設定ページに移動します(または新しいパイプラインを作成してその設定ページに入ります)
+
+2. 「AI機能」で、ランナーとして`Coze API`を選択します
+
+3. ランナーの設定項目に入力します:
+ - **token**: CozeプラットフォームからコピーしたAPIトークンを貼り付けます
+ - **bot_id**: 対応するBot IDを貼り付けます
+ - 使用しているCozeサイトに応じて`API Base URL`を選択してください: coze.cnの場合は`https://api.coze.cn`を入力してください; coze.comの場合は`https://api.coze.com`を入力してください
+
+ 
+
+4. 「保存」をクリックして設定を完了します
+
+完了すると、このパイプライン内でCozeエージェントを呼び出して対話処理ができます
+
+## よくある質問(FAQ)
+
+- **保存が失敗するか、呼び出しがエラーを返す**: トークンとbot_idが正しく、余分なスペースが含まれていないことを確認してください
+- **`Coze API`を選択できない**: 現在のバージョンがこのランナーをサポートしているか確認してください。まだサポートされていない場合は、Cozeランナーを含むバージョンにアップグレードしてください
+
+一般的なパイプライン設定の詳細については、[対話パイプライン設定の変更](/ja/usage/pipelines/readme)を参照してください
diff --git a/ja/usage/pipelines/dify.mdx b/ja/usage/pipelines/dify.mdx
new file mode 100644
index 000000000..1a0cda458
--- /dev/null
+++ b/ja/usage/pipelines/dify.mdx
@@ -0,0 +1,42 @@
+---
+title: "LangBotでのDifyの使用"
+---
+
+[Dify](https://dify.ai)は、オープンソースの大規模言語モデル(LLM)アプリケーション開発プラットフォームです。Backend as ServiceとLLMOpsの概念を組み合わせ、開発者が本番グレードの生成AIアプリケーションを迅速に構築できるようにします。
+Difyは、チャットアシスタント(Chatflowを含む)、エージェント、テキスト生成アプリケーション、ワークフローなどのタイプのアプリケーションを作成できます。
+
+LangBotは現在、3種類のDifyアプリケーションをサポートしています: `チャットアシスタント`(Chatflowを含む)、`エージェント`、`ワークフロー`。
+
+## Difyでのアプリケーション作成
+
+[Difyドキュメント](https://docs.dify.ai)に従ってDifyをデプロイし、アプリケーションを作成してください。
+
+アプリケーションを公開した後、アプリケーションの`Access API`ページに移動してAPIキーを生成します。
+
+
+
+LangBotのパイプライン`AI機能`を設定するために、APIサーバーとAPIキーを保存します。
+
+
+
+- LangBotとDifyが同じホストにデプロイされており、両方ともDockerを使用してデプロイされている場合は、記事[ネットワーク設定の詳細](/zh/workshop/network-details.html#langbot-%E5%92%8C%E6%B6%88%E6%81%AF%E5%B9%B3%E5%8F%B0%E5%9D%87%E8%BF%90%E8%A1%8C%E5%9C%A8-docker-%E5%AE%B9%E5%99%A8%E4%B8%AD)を参照してください。この場合、Difyを起動するdocker-compose.yamlファイル内のすべてのコンテナの`networks`に`langbot-network`を追加し、`nginx`コンテナにコンテナ名`dify-nginx`を追加し、最後にLangBot設定で`base-url`を`http://dify-nginx/v1`に設定します。
+- その他のケースについては、会社の運用チームにお問い合わせください。
+
+
+## LangBotの設定
+
+LangBot WebUIページを開き、新しいパイプラインを追加するか、既存のパイプラインのAI機能設定ページに切り替えます。
+
+
+
+
+
+Difyワークフローアプリケーションを使用している場合は、出力コンテンツを渡すキーとして`summary`を使用してください。
+
+
+
+## 出力処理
+
+ワークフローアプリケーションまたはエージェントアプリケーションを使用している場合、LangBotのパイプライン`出力処理`で`track-function-calls`を有効にすると、Difyが各ツール呼び出しを実行する際に`calling function xxx`というメッセージがユーザーに出力されます。
+ただし、`chat`アプリケーション(チャットアシスタント -> ワークフローオーケストレーション)の下で`ChatFlow`を使用している場合は、設定に関係なく、Answer(直接返信)ノードによって返されるテキストのみが出力されます。
+
diff --git a/ja/usage/pipelines/langflow.mdx b/ja/usage/pipelines/langflow.mdx
new file mode 100644
index 000000000..8d971f1ee
--- /dev/null
+++ b/ja/usage/pipelines/langflow.mdx
@@ -0,0 +1,33 @@
+---
+title: "LangBotでのLangflowの使用"
+---
+
+[Langflow](https://langflow.com/)は、AIベースのエージェントとワークフローを構築およびデプロイするためのオープンソースプロジェクトです。ローカルおよびクラウドデプロイをサポートし、他のアプリケーションが統合できるAPIを提供します。
+
+LangBotは現在、ランナーとしてLangflowの使用をサポートしています。
+
+## Langflowでのワークフロー作成
+
+[Langflowドキュメント](https://langflow.com/docs/introduction)に従ってLangflowインスタンスをデプロイしてください。
+
+デフォルトテンプレートのSimple Agentの例:
+
+
+
+必要に応じてワークフローを変更できます:
+
+
+
+## LangBotの設定
+
+LangBot WebUIページを開き、新しいパイプラインを追加するか、既存のパイプラインのAI機能設定ページに切り替え、ランナーとして`Langflow API`を選択します。
+
+
+
+プロンプトに従って他の設定を入力します。`Base URL`(実際のネットワーク状況に応じて入力)、`API Key`、`Flow ID`などが含まれます。API KeyはLangflowの設定から取得できます:
+
+
+
+Flow IDは、編集ページの右上にある`共有` -> `APIアクセス`ボタンをクリックし、サンプルコードから取得できます:
+
+
diff --git a/ja/usage/pipelines/n8n.mdx b/ja/usage/pipelines/n8n.mdx
new file mode 100644
index 000000000..cc80aa127
--- /dev/null
+++ b/ja/usage/pipelines/n8n.mdx
@@ -0,0 +1,49 @@
+---
+title: "LangBotでのn8nの使用"
+---
+
+[n8n](https://n8n.io/)は、さまざまな自動化タスクを作成、スケジュール、実行できるオープンソースのワークフロー自動化プラットフォームです。
+
+LangBotは現在、n8nワークフローの`Webhook`ノードを通じてワークフローをトリガーし、レスポンスを受信することをサポートしています。
+
+## ランナーとしてのn8nの使用
+
+既存のパイプラインの設定ページを開くか、新しいパイプライン(推奨)を作成して設定ページを開いてください。`AI`で`n8n Workflow API`をランナーとして選択します。
+
+
+
+次に、以下の内容に従って他の設定を構成して入力します。
+
+## n8nワークフロー接続の設定
+
+
+または
+
+
+トリガーとして`Webhook`または`On chat message`を選択し、以下のように設定します:
+- Webhook:
+ 
+- On chat message:
+ 
+
+
+
+
+
+
+
+
+
+
+AIモデルを呼び出すノードを`AI Agent`として設定し、以下のセットアップに従います:
+> ストリーミングレスポンスの場合、赤い枠で強調表示されている項目を追加します。ストリーミングが不要な場合は、このステップをスキップできます。
+
+
+
+n8nのワークフローレスポンスコンテンツについては、`Respond to Webhook`ノードを使用し、以下の画像に従って設定してください(`AI Agent`ノードでストリーミングレスポンスを選択した場合、このステップは不要です):
+
+
+
+`Response Body`のレスポンスコンテンツキー名は、LangBotのパイプライン設定の`出力キー名`と一致する必要があります。
+
+n8nワークフロー設定の完了後、上部の`Active`をクリックしてワークフローを有効にしてください。
diff --git a/ja/usage/pipelines/readme.mdx b/ja/usage/pipelines/readme.mdx
new file mode 100644
index 000000000..71cf93aa8
--- /dev/null
+++ b/ja/usage/pipelines/readme.mdx
@@ -0,0 +1,55 @@
+---
+title: "対話パイプライン設定の変更(Pipelines)"
+---
+
+パイプラインは、メッセージを受信した後の処理フローと、大規模言語モデルとの情報交換を制御します。各ボットは1つのパイプラインにバインドでき、同じパイプラインは複数のボットにバインドできます。
+
+LangBotは最初の起動時にデフォルトパイプラインを自動的に作成します。ボットを作成すると、自動的にデフォルトパイプラインにバインドされます。最初のモデルを作成すると、自動的にデフォルトパイプラインのモデルとして設定されます。
+
+
+
+異なるシナリオに適応するために、異なるボット用に複数のパイプラインを作成できます。
+
+
+
+現在、パイプラインでは以下の機能を設定できます:
+
+## AI機能
+
+以下を選択して使用できます: `組み込みエージェント`、[`Dify`](https://dify.ai/)、[`n8n`](https://n8n.io/)
+
+AI機能は主に2つの部分に分かれています: ランナーの選択とランナーパラメータの設定。
+
+ランナーは、メッセージを処理するために大規模モデルをスケジュールする方法を定義します。デフォルトは`組み込みエージェント`で、これはLangBotによって実装された複数ラウンドのエージェント戦略です。このランナーが選択されている場合のみ、LangBot内で設定されたモデルとツールが使用されます。
+
+{/*  */}
+
+
+
+`Dify`、[`n8n`](https://n8n.io/)などの外部LLMOpsプラットフォームを使用することもできます。この場合、使用されるモデル、プロンプト、ツール、その他のリソースはLLMOpsプラットフォームによって提供されます。
+
+
+
+- Difyへの接続の詳細手順は、[チュートリアルを参照](/ja/usage/pipelines/dify.html)してください。
+- n8nへの接続の詳細手順は、[チュートリアルを参照](/ja/usage/pipelines/n8n.html)してください。
+
+### 会話変数
+外部LLMOpsプラットフォームを使用する場合、LangBotは以下のパラメータを明示的に渡します。これらをLLMOpsプラットフォームワークフローの開始ノードに追加できます(以下の画像はDifyの例です):
+
+- `launcher_type`: ランチャーオブジェクトタイプ、プライベートチャットの場合は`person`、グループチャットの場合は`group`
+- `launcher_id`: ランチャーオブジェクトID、プライベートチャットの場合はユーザーID、グループチャットの場合はグループID
+- `sender_id`: 送信者ID
+- `user_message_text`: ユーザーメッセージのプレーンテキスト
+- `session_id`: ユーザーセッションID、プライベートチャットの場合は`person_`、グループチャットの場合は`group_`
+- `conversation_id`: 文字列、ユーザーセッションID、LangBotによって生成されます。ユーザーがセッションをリセットした後に再生成されます
+- `msg_create_time`: 数値型、このメッセージが受信されたタイムスタンプ(秒)
+- `group_name`: グループ名、グループメッセージを受信した場合のみ設定されます
+- `sender_name`: 送信者名
+
+[プラグインを通じて任意の変数をカスタマイズできます](/en/plugin/dev/apis/common.html#set-request-variables)。
+
+
+
+## その他の設定
+
+設定フォームの説明を参照してください。
diff --git a/ja/usage/platforms/dingtalk.mdx b/ja/usage/platforms/dingtalk.mdx
new file mode 100644
index 000000000..e3ce420b1
--- /dev/null
+++ b/ja/usage/platforms/dingtalk.mdx
@@ -0,0 +1,80 @@
+---
+title: "DingTalk ボットのデプロイ"
+---
+
+DingTalk に LangBot をデプロイします。
+
+## ボットの作成
+
+[DingTalk 開発者バックエンド](https://open-dev.dingtalk.com/?spm=ding_open_doc.document.0.0.74f445e5MkawbT#/)にアクセスし、ログインして組織に入ります。ログインに成功したら、オープンプラットフォームに入ります。以下のように表示されます:
+
+
+上部の「アプリケーション開発」をクリックし、右側の青いボタン「アプリケーションを作成」をクリックして、ボットの基本情報を入力し、保存をクリックします。
+
+ボットのバックエンドに入ります。例えば、langbot2 という名前のボットがある場合、管理ページは以下のように表示されます:
+
+
+## ボットの設定
+
+「アプリケーション機能を追加」、「その他のアプリケーション機能」、「ロボット」の「設定」をクリックし、設定をクリックして情報を入力します。以下のように:
+
+
+ページ下部の「公開」をクリックし、公開が成功したら、ボットページの左下にある「バージョン管理と公開」をクリックします。以下のように:
+
+
+初めてボットを作成する場合、右側は空なので、「新しいバージョンを作成」をクリックし、その中で情報を設定し、「アプリケーションの表示範囲」を設定して、保存をクリックします。
+
+「イベントサブスクリプション」をクリックし、プッシュ方式を「ストリームモードプッシュ」に変更します。
+
+カードストリーミングが必要な場合は、権限管理でカード権限を申請する必要があります。以下のように:
+
+
+
+
+さらに、カードメッセージの場合、主にカードテンプレートを作成し、テンプレート ID を記録して設定に入力する必要があります。手順は以下の通りです:
+> カードコンテンツテンプレート ID は、開発者バックエンドにログイン > [カードプラットフォーム](https://open-dev.dingtalk.com/fe/card?spm=ding_open_doc.document.0.0.33cf2281L0fXsV)から取得できます
+
+新しいテンプレートを作成する際に情報を入力します。以下のように:
+
+
+プリセットテンプレートを選択します(最初のものを選択し、後でテンプレートの内容を変更します)。以下のように:
+
+使用をクリック
+
+作成
+
+
+作成をクリックすると、テンプレートの編集にリダイレクトされます。以下のように、希望するカードメッセージを自由に編集できます:
+
+
+メインコンテンツについては、デフォルトの「content」をそのままにしておきます:
+
+
+編集を終え、すべて正しいことを確認したら、保存してテンプレート ID をコピーし、設定ファイルに入力します:
+
+
+
+## 設定情報の入力
+
+「認証情報と基本情報」をクリックし、「Client ID」と「Client Secret」を記録します。
+「アプリケーション機能」、「ロボット」をクリックし、RobotCode とロボット名を記録します。
+`markdown_card` は Markdown 形式の返信を有効にするかどうかです。
+上記の設定項目を記録し、LangBot ボット設定フォームに入力します
+
+[カードプラットフォーム](https://open-dev.dingtalk.com/fe/card?spm=ding_open_doc.document.0.0.33cf2281L0fXsV)をクリックし、テンプレートリストから対応するバインドされたテンプレート ID をコピーし、カードテンプレート ID フィールドに入力します。
+
+
+
+ストリーミング関連:
+
+
+**LangBot を起動します**。
+
+## ボットの追加
+
+この記事では DingTalk Windows デスクトップ版を例として使用します。上部の「検索」、「機能」をクリックし、先ほど作成したボットの名前を入力します。以下のように:
+
+
+ボットをクリックしてチャットします。
+
+グループに追加したい場合は、DingTalk グループの「グループ管理」、「ロボット」、「ロボットを追加」をクリックし、ボット名を検索してグループで使用します。
diff --git a/ja/usage/platforms/discord.mdx b/ja/usage/platforms/discord.mdx
new file mode 100644
index 000000000..07d0f5f23
--- /dev/null
+++ b/ja/usage/platforms/discord.mdx
@@ -0,0 +1,55 @@
+---
+title: "Discord ボットに接続"
+---
+
+## ボットの作成
+
+[Discord Developer Portal](https://discord.com/developers/applications)にアクセスし、ログインしてアプリケーションを作成します。
+
+
+
+基本情報を変更し、「Save Changes」をクリックして保存します。
+
+
+
+左側の「Bot」をクリックし、「Reset Token」をクリックして、生成された Token をコピーします。
+
+
+
+そして、このページの「Privileged Gateway Intents」のすべてのオプションをチェックし、「Save Changes」をクリックして保存します。
+
+
+
+**最後に、左側の「OAuth2」をクリックし、ページの「Client ID」をコピーします。**
+
+## LangBot に接続
+
+新しいボットを追加するためにクリックし、前の手順で取得した「Client ID」と「Token」を設定に入力します。
+
+
+
+
+
+
+
+入力後、LangBot を起動します。設定が成功した場合、ログに `[02-02 16:48:15.263] manager.py (68) - [INFO] : Initializing platform adapter 1: discord` と表示されます。LangBot を実行し続けてください。
+
+## ボットをサーバーに招待
+
+まずサーバーを作成し、次にボットをサーバーに招待する必要があります。
+
+「OAuth2」ページに移動し、「URL Generator」を選択し、「bot」を選択して、画像に示されている権限をチェックします。
+
+
+
+
+
+「Copy」をクリックし、生成された URL をブラウザに貼り付けて開き、ボットをサーバーに招待します。
+
+
+
+## ボットの使用
+
+グループまたはプライベートメッセージでボットを通常どおり使用できるようになりました。
+
+
diff --git a/ja/usage/platforms/kook.mdx b/ja/usage/platforms/kook.mdx
new file mode 100644
index 000000000..71eacee5f
--- /dev/null
+++ b/ja/usage/platforms/kook.mdx
@@ -0,0 +1,65 @@
+---
+title: "KOOK ボットの統合"
+---
+
+## ボットの作成
+
+[KOOK Developer Center](https://developer.kookapp.cn/)にアクセスし、ログインしてコンソールにアクセスします。
+
+
+
+「アプリケーションを作成」をクリックし、アプリケーション情報を入力します。
+
+
+
+アプリケーションが作成されたら、アプリケーション詳細ページに入ります。
+
+
+
+アプリケーション概要ページでアプリケーションの基本情報を表示できます。
+
+
+
+## Bot Token の取得
+
+アプリケーションページで、「Bot」タブをクリックし、Bot Token をコピーして安全に保存します。後で必要になります。
+
+
+
+## ボット権限の設定
+
+**重要:**「Bot」設定で、「メッセージフィルタリング」オプションを見つけてクリックして設定します。
+
+
+
+チャンネルメッセージやプライベートメッセージイベントを含む、すべてのメッセージ関連イベント権限を有効にします。そうしないと、ボットはメッセージを受信できません。
+
+
+
+## ボットの招待
+
+ボット設定ページで、招待リンクを生成してボットをサーバーに招待できます。
+
+
+
+## LangBot に接続
+
+LangBot Webui ページを開き、「Bots」ページで新しいボットを作成するためにクリックします。
+
+
+
+KOOK プラットフォームを選択し、ボット名と Bot Token を入力します。
+
+
+
+保存後、ボットがリストに表示されます。
+
+
+
+有効化ボタンをクリックしてボットを起動します。正常に設定されている場合、ボットのステータスは実行中として表示されます。
+
+
+
+## ボットの使用
+
+KOOK サーバーで、ボットは正常にメッセージを受信して返信できるようになりました。ボットはチャンネルメッセージとプライベートメッセージの両方をサポートしています。
diff --git a/ja/usage/platforms/lark.mdx b/ja/usage/platforms/lark.mdx
new file mode 100644
index 000000000..404c386c3
--- /dev/null
+++ b/ja/usage/platforms/lark.mdx
@@ -0,0 +1,90 @@
+---
+title: "Feishu ボットに接続"
+---
+
+## ボットの作成
+
+[Feishu Open Platform](https://open.feishu.cn/app)にアクセスし、ログインして、企業の自己構築アプリケーションまたはストアアプリケーションを作成します。[(違いの紹介)](https://open.feishu.cn/document/platform-overveiw/overview)
+
+
+
+
+
+アプリケーションにボット機能を追加します:
+
+
+権限管理で画像に示されている権限を追加します:
+
+
+
+カードストリーミング権限が必要な場合は、画像に示されている次のカード作成と更新権限を追加します:
+
+
+
+
+デフォルトのカードテンプレートを変更する必要がある場合は、プラットフォームアダプターのコードでカードテンプレートを自分で修正する必要があります。
+
+
+## LangBot に接続
+
+「認証情報と基本情報」ページで `app_id` と `app_secret` を見つけます。
+
+
+
+
+
+LangBot の Webui 設定ページを開き、新しいボットを作成します
+
+フォームに関連情報を入力します
+
+
+
+ストリーミング関連:
+
+
+入力後、LangBot を起動します。設定が成功した場合、ログに `[01-29 23:42:56.796] manager.py (68) - [INFO] : Initializing platform adapter 1: lark` と表示されます。LangBot を実行し続けてください。
+
+
+
+- `enable-webhook`:`true` に設定
+- `encrypt-key`:「イベントとコールバック」ページの「暗号化戦略」の「Encrypt Key」に設定
+
+Webhook モードでは、LangBot をパブリック IP を持つサーバーにデプロイし、ファイアウォールが上記で設定したポートを開いていることを確認する必要があることに注意してください。
+
+
+## イベントサブスクリプションの設定
+
+「イベントとコールバック」ページに移動し、サブスクリプション方式を「長時間接続」として設定します:
+
+
+
+そして、イベント:「メッセージを受信」を追加します
+
+
+
+
+
+
+
+まず LangBot を起動してください。ここにサーバーアドレスとポートを入力します。パスは `/lark/callback` です。「保存」をクリックします。
+
+
+
+## ボットの公開
+
+上部の「バージョンを作成」をクリックし、バージョン番号とその他の情報を入力し、下部の「保存」をクリックします。
+
+
+
+ボットを Feishu グループに追加して使用します:
+
+
+
+
+
+プライベートチャットでも直接使用できます
+
+
+
+## よくある問題
+- ストアアプリのボットは、作成/保存直後にチャットメッセージに応答できません。[app_ticket イベント](https://open.feishu.cn/document/server-docs/application-v6/event/app_ticket-events)の遅延メカニズムにより、正常に動作するまで約 2 分待つ必要があります。
diff --git a/ja/usage/platforms/line.mdx b/ja/usage/platforms/line.mdx
new file mode 100644
index 000000000..e759ecc5e
--- /dev/null
+++ b/ja/usage/platforms/line.mdx
@@ -0,0 +1,155 @@
+---
+title: "LINE ボットの統合"
+---
+
+この記事では、LangBot を LINE プラットフォームと接続して LINE ボット機能を実装する方法について説明します。
+
+## LINE ボットの作成
+
+### LINE 開発者アカウントの登録
+
+1. [LINE Developers ウェブサイト](https://developers.line.biz/)にアクセスし、LINE アカウントでログインします
+2. ログイン後、開発者コンソールに入ります
+
+### Provider と Channel の作成
+
+> [Developer Console](https://developers.line.biz/console)
+
+1. 開発者コンソールで、新しい Provider を作成します(ない場合)
+
+2. Provider の下で、「Create」をクリックします
+
+3. 名前を入力して Create をクリックします
+
+
+4. リダイレクト後、Message API の作成を選択します
+
+* Message API の作成をクリックして続行します
+
+* リダイレクト後、基本情報を入力します
+
+ - Channel Name
+ - Channel Description
+ - Category
+ - Subcategory
+ - Email Address
+5. すべての情報を入力したら、「Continue」をクリックして作成します
+
+6. 入力した情報を確認し、問題がなければ Submit をクリックします
+
+7. 正常に作成されました。使用に進みます
+
+
+### 設定情報の取得
+
+作成後、次の重要な情報を取得します。記録してください:
+
+1. Channel Secret
+> [使用をクリックした後のページ](https://manager.line.biz/account)
+* Settings を選択
+
+* Message API をクリック
+
+* Message API を有効にします
+
+* 作成したばかりの Provider を選択し、Agree をクリックします
+
+* プライバシー規約については、単に OK をクリックします
+
+* OK をクリックして作成を完了します
+
+* コピーします
+
+
+2. Channel Access Token(「Issue」ボタンをクリックして生成する必要があります)
+* console をクリックするか、直接 [Console](https://developers.line.biz/console/) にアクセスします
+
+* 作成した Provider を選択し、Message API をクリックします
+
+* Message API をクリックします
+
+* 一番下までスクロールし、Issue をクリックします
+
+* アイコンをクリックしてコピーします
+
+
+## LangBot に接続
+
+次に、LangBot 設定ページを開きます:
+
+1. 「Bots」をクリックし、次に「Add」をクリックします
+
+2. 「Platform/Adapter Selection」で「LINE」を選択します
+
+
+3. 設定情報を入力します:
+ - Channel Secret:以前に取得した Channel secret
+ - Channel Access Token:以前に取得した Channel access token
+ 
+
+4. 「Save」をクリックして設定を完了します
+ 
+
+## Webhook の設定
+
+
+まず、[HTTP リバースプロキシの設定](/en/workshop/production/proxy-and-ssl)を参照して LangBot コールバックアドレスを設定することをお勧めします。
+
+
+* LangBot 設定ページから Webhook コールバック URL を取得します
+
+
+* console をクリックするか、直接 [Console](https://developers.line.biz/console/) にアクセスします
+
+* 作成した Provider を選択し、Message API をクリックします
+
+* Message API をクリックします
+
+* Edit をクリックして接続を入力します
+
+* 接続を入力します(HTTPS 接続である必要があります。つまり、SSL 証明書が必要です)、Update をクリックします
+
+
+* Use Webhook を選択します
+
+
+5. 「Verify」ボタンをクリックして、接続が成功したかどうかをテストします
+
+
+
+## 機能設定
+
+LINE 開発者コンソールで、ボットの機能をさらに設定できます:
+
+1. 「Messaging API」タブで、「LINE Official Account Features」セクションを見つけます
+2. 必要に応じて次の機能を有効または無効にします:
+ - 自動返信メッセージ
+ - 友達追加時のウェルカムメッセージ
+ - グループおよび複数人チャット
+ - ボットがグループに参加したときの挨拶
+
+## 使用方法
+
+設定後、ユーザーは次の方法で LINE ボットとやり取りできます:
+
+1. LINE 開発者コンソールで提供される QR コードをスキャンして、ボットを友達として追加します
+2. チャットでメッセージを送信すると、ボットは LangBot を通じて処理して返信します
+
+## よくある問題
+
+### Webhook 検証失敗
+
+- サーバーが HTTPS 経由でアクセスできることを確認してください
+- Webhook URL が正しいかどうかを確認してください
+- LangBot サービスが正常に実行されていることを確認してください
+
+### メッセージを受信できない
+
+- Channel Access Token が有効かどうかを確認してください
+- 「Use Webhook」オプションが有効になっていることを確認してください
+- LangBot ログでエラーメッセージを確認してください
+
+### 権限の問題
+
+- LINE 開発者コンソールでボットに必要な権限を有効にしていることを確認してください
+- 一部の高度な機能には、LINE Premium アカウントが必要な場合があります
diff --git a/ja/usage/platforms/qq/aiocqhttp/lagrange.mdx b/ja/usage/platforms/qq/aiocqhttp/lagrange.mdx
new file mode 100644
index 000000000..ea9328eab
--- /dev/null
+++ b/ja/usage/platforms/qq/aiocqhttp/lagrange.mdx
@@ -0,0 +1,69 @@
+---
+title: "メッセージプラットフォーム Lagrange のデプロイ"
+---
+
+## Lagrange の紹介
+
+Lagrange は、軽量で比較的安定した QQNT プロトコルリバースエンジニアリングフレームワークです。OneBot 11 プロトコルを通じて接続します。アダプターとして `OneBot v11` を選択する必要があります。
+
+
+ボットとやり取りするには NT QQ を使用する必要があります。古いバージョンの QQ は正常に動作しません
+
+
+## デプロイ手順
+
+以下は Windows の一般的な手順のみを提供します。詳細な手順または他のプラットフォームについては、[Lagrange 公式ドキュメント](https://lagrangedev.github.io/Lagrange.Doc/v1/Lagrange.OneBot/)を参照してください
+
+### 環境設定
+
+.NET 8 ランタイムをインストールします。[ここをクリックして Microsoft の公式ウェブサイトから直接ダウンロード](https://dotnet.microsoft.com/zh-cn/download/dotnet/thank-you/runtime-desktop-8.0.4-windows-x64-installer)
+
+### Github Actions から最新のビルドをダウンロード
+
+Github にログインしてダウンロードする必要があります。特定の機能が必要ない場合は、Release からダウンロードできます。画像 3 を参照してください
+
+[Github Actions](https://github.com/KonataDev/Lagrange.Core/actions)
+
+画像に従ってダウンロードします:
+
+
+
+
+
+
+
+### 最終ステップ
+
+ダウンロードした zip を解凍し、Lagrange.OneBot.exe を含むディレクトリに移動し、このディレクトリで cmd コマンドプロンプトを開き、次のように入力します
+
+```bash
+.\Lagrange.OneBot
+```
+
+一度実行します。QR コードが出力された場合、ボットアカウントで直接スキャンしてログインできます(QR コードが不鮮明な場合は、lagrange data ディレクトリで画像ファイルを探すことができます)。
+
+ログインできない場合は、lagrange 設定ファイル appsettings.json で署名アドレス SignServerUrl を正しく入力したかどうかを確認してください。署名アドレスは lagrange ドキュメントで確認してください。
+
+## 設定の変更
+
+Lagrange を LangBot に接続するように設定する必要があります。Lagrange の設定ファイル appsettings.json を編集し、Implementations の接続設定が以下の画像の内容と一致することを確認してください:
+
+
+
+Type は `ReverseWebSocket` である必要があります;
+Host は LangBot を実行しているホストの IP です。同じホストにある場合は、`127.0.0.1` と記述できます;
+Suffix は `/ws` である必要があります;
+
+## Lagrange 統合
+
+次に、LangBot 設定ページを開きます
+
+Bots をクリックし、次に Add をクリックします
+
+`Platform/Adapter Selection` で `OneBot v11` を選択します
+
+
+
+
+注意:複数の docker コンテナに関連するネットワーク接続の問題がある場合は、[ネットワーク設定の詳細](/en/workshop/network-details)を参照してください
+
diff --git a/ja/usage/platforms/qq/aiocqhttp/llonebot.mdx b/ja/usage/platforms/qq/aiocqhttp/llonebot.mdx
new file mode 100644
index 000000000..5105ef5ae
--- /dev/null
+++ b/ja/usage/platforms/qq/aiocqhttp/llonebot.mdx
@@ -0,0 +1,29 @@
+---
+title: "メッセージプラットフォーム LiteLoaderQQNT のデプロイ"
+---
+
+OneBot 11 プロトコルを通じて接続します。アダプターとして ``OneBot v11`` を選択する必要があります。
+
+# LiteLoaderQQNT
+
+- [LiteLoaderQQNT の OneBot API プラグイン](https://github.com/LLOneBot/LLOneBot)は QQ クライアントに注入し、OneBot 11 プロトコルに変換します
+
+LiteLoaderQQNT のインストールチュートリアル:https://llonebot.github.io/zh-CN/guide/getting-started
+
+
+
+アドレスの IP アドレスが LangBot を実行しているホストのアドレスであることを確認してください(同じネットワークで実行している場合は、127.0.0.1 を使用します)
+
+## Lagrange 統合
+
+次に、LangBot 設定ページを開きます
+
+Bots をクリックし、次に Add をクリックします
+
+`Platform/Adapter Selection` で `OneBot v11` を選択します
+
+
+
+
+注意:複数の docker コンテナに関連するネットワーク接続の問題がある場合は、[ネットワーク設定の詳細](/en/workshop/network-details)を参照してください
+
diff --git a/ja/usage/platforms/qq/aiocqhttp/napcat.mdx b/ja/usage/platforms/qq/aiocqhttp/napcat.mdx
new file mode 100644
index 000000000..84a2a136b
--- /dev/null
+++ b/ja/usage/platforms/qq/aiocqhttp/napcat.mdx
@@ -0,0 +1,35 @@
+---
+title: "メッセージプラットフォーム NapCat のデプロイ"
+---
+
+OneBot 11 プロトコルを通じて接続します。アダプターとして ``OneBot v11`` を選択する必要があります。
+
+## NapCat インストールチュートリアル
+
+[NapCat 公式ドキュメントに従ってインストール](https://napcat.napneko.icu/guide/start-install)してください
+
+## NapCat 設定チュートリアル
+
+webui 操作のみを例として使用します。他の設定方法については、NapCat ドキュメントを確認してください。
+
+ログイン後、コンソールまたは Bash でログを確認し、`[NapCat] [WebUi] WebUi Publish Panel Url: http://x.x.x.x:6099/webui?token=xxxxx ` を見つけます
+
+
+Url をブラウザにコピーするか、Windows 11 では Ctrl を押しながら Url をクリックします。QR コードをスキャンしてログインすると、ネットワーク設定ページに入ります。
+
+ネットワーク設定を追加をクリックし、WebSocket Client を選択し、有効をクリックして、Url フィールドに `ws://127.0.0.1:2280/ws` を入力して保存します。
+
+
+## NapCat 統合
+
+次に、LangBot 設定ページを開きます
+
+Bots をクリックし、次に Add をクリックします
+
+`Platform/Adapter Selection` で `OneBot v11` を選択します
+
+
+
+
+注意:複数の docker コンテナに関連するネットワーク接続の問題がある場合は、[ネットワーク設定の詳細](/en/workshop/network-details)を参照してください
+
diff --git a/ja/usage/platforms/qq/official_webhook.mdx b/ja/usage/platforms/qq/official_webhook.mdx
new file mode 100644
index 000000000..60cda1a2b
--- /dev/null
+++ b/ja/usage/platforms/qq/official_webhook.mdx
@@ -0,0 +1,82 @@
+---
+title: "QQ 公式ボット API の使用(Webhook 方式を使用)"
+---
+
+この記事では、テストボットのデプロイのみを提供します。ボットの正式な起動については、[リリースプロセス](https://q.qq.com/qqbot/#/home)に従ってください。
+
+
+QQ 公式は、AIGC 機能への不正アクセスを禁止する発表を行いました。注意して使用してください。
+
+
+
+
+## QQ ボットの登録(テストボット)
+
+### 基本ボット情報の設定
+
+[QQ Open Platform](https://q.qq.com/#/)にアクセスし、下部の「アプリケーション管理」を見つけ、ボットを作成をクリックし、基本情報を入力して、ボットページに入ります。以下のように:
+
+
+
+「ホーム」オプションの「リリースプロセス」は、ボットを起動する手順です。テストバージョンのボットをデプロイしているため、「情報」と「サンドボックス設定」セクションを完了するだけで済みます。
+
+まず情報を入力し、次にサンドボックス設定をクリックします。
+
+#### サンドボックス設定の構成
+
+「サンドボックス設定」をクリックします。
+QQ グループにデプロイする場合は、「QQ グループ ID」の下の要件に従ってグループチャットを選択し、メッセージリスト設定でプライベートチャット権限を持つユーザーを追加します。
+QQ チャンネルにデプロイする場合は、「チャンネル ID」の下の要件に従ってチャンネル ID を選択します。ボットタイプは 0 です。
+
+#### 開発管理の構成
+
+「開発管理」をクリックします。
+
+
+
+「AppID」、「Token」、「AppSecret」を記録し、LangBot が配置されているサーバーの IP アドレスを IP ホワイトリストに追加します。
+
+## LangBot に接続
+
+次に、LangBot 設定ページを開きます
+
+Bots をクリックし、次に Add をクリックします
+
+`Platform/Adapter Selection` で `QQ Official API` を選択します
+
+
+
+
+## コールバックアドレスの設定
+
+LangBot は、パブリック IP アドレスを持つサーバーにデプロイする必要があり、HTTPS が正常に有効になっている必要があります。ドキュメント [HTTP リバースプロキシと SSL の設定](/en/workshop/production/proxy-and-ssl)に従って設定してください。
+
+
+#### 後続の設定
+
+Caddy の起動に失敗した場合は、[Caddy ドキュメント](https://caddy2.dengxiaolong.com/docs/quick-starts/caddyfile)を読むか、LangBot コミュニティグループに参加してヘルプを求めてください。
+
+以下は、考えられる問題の一部です:
+
+- ポート 443 が開いていない
+- ドメインがマシンに解決されていない
+- Caddyfile が正常に保存されなかった
+
+### 管理ポータルのコールバックアドレスの設定
+
+
+まず **LangBot を起動します**。
+
+ボット管理ポータルの「コールバック設定」をクリックし、「イベントを追加」の下のすべてのイベントをチェックします。
+
+LangBot 設定ページに移動し、対応する QQ ボットを有効にして選択し、対応するボット設定ページから Webhook コールバックアドレスをコピーし、IP アドレスとポートを Caddy で設定したドメイン名に置き換えて、リクエストアドレスに入力します。
+
+画像に示されているように:
+
+
+
+たとえば、ドメインが `testlb.com` の場合、リクエストアドレスに `testlb.com/bots/xxxxxx-xxxxxx` を入力し、設定の確認をクリックします。コールバックアドレスが正常に保存された場合、デプロイは成功です。「検証失敗」が表示された場合は、上記の設定項目が正しく入力されているかどうかを注意深く確認してください。
+
+## 公開方法
+
+「ホーム」のリリースプロセスに入り、プロセスに従ってボットを公開して起動します。
diff --git a/ja/usage/platforms/readme.mdx b/ja/usage/platforms/readme.mdx
new file mode 100644
index 000000000..b81bacc1d
--- /dev/null
+++ b/ja/usage/platforms/readme.mdx
@@ -0,0 +1,24 @@
+---
+title: "ボットの設定(Bots)"
+---
+
+ボットは、メッセージングプラットフォームからメッセージイベントを受信し、パイプラインを呼び出してメッセージを処理するために使用されます。
+
+
+
+
+| プラットフォーム | ステータス | 備考 | チュートリアル |
+| ------ | ---- | ---- | ---- |
+| Discord | ✅ | | [チュートリアル](/ja/usage/platforms/discord) |
+| Telegram | ✅ | | [チュートリアル](/ja/usage/platforms/telegram) |
+| Slack | ✅ | | [チュートリアル](/ja/usage/platforms/slack) |
+| LINE | ✅ | | [チュートリアル](/ja/usage/platforms/line) |
+| KOOK | ✅ | | [チュートリアル](/ja/usage/platforms/kook) |
+| Lark | ✅ | | [チュートリアル](/ja/usage/platforms/lark) |
+| DingTalk | ✅ | | [チュートリアル](/ja/usage/platforms/dingtalk) |
+| WeCom(Enterprise WeChat) | ✅ | 企業内部ボット | [チュートリアル](/ja/usage/platforms/wecom/wecom) |
+| WeCom Intelligent Bot | ✅ | wecom インテリジェントボット | [チュートリアル](/ja/usage/platforms/wecom/wecombot) |
+| WeCom Customer Service | ✅ | 企業外部ボット | [チュートリアル](/ja/usage/platforms/wecom/wecomcs) |
+| WeChat Official Account | ✅ | WeChat 公式プラットフォームボット | [チュートリアル](/ja/usage/platforms/wxoa) |
+| OneBot v11 | ✅ | 個人 QQ アカウントをボットとして使用し、独立したプロトコルクライアントが必要です。OneBot v11 をサポートします | [NapCat](/ja/usage/platforms/qq/aiocqhttp/napcat)
[Lagrange](/ja/usage/platforms/qq/aiocqhttp/lagrange)
[LiteLoaderQQNT](/ja/usage/platforms/qq/aiocqhttp/llonebot) |
+| QQ Official Bot | ✅ | QQ Open Platform ボット API に接続します | [チュートリアル](/ja/usage/platforms/qq/official_webhook) |
diff --git a/ja/usage/platforms/slack.mdx b/ja/usage/platforms/slack.mdx
new file mode 100644
index 000000000..a4d6ecf2e
--- /dev/null
+++ b/ja/usage/platforms/slack.mdx
@@ -0,0 +1,55 @@
+---
+title: "Slack ボットに接続"
+---
+
+## ボットの作成
+
+[Slack App Platform](https://api.slack.com/apps)にアクセスします。
+
+
+
+右上の「Create New App」をクリックし、「from a manifest」を選択し、ボットをデプロイするワークスペースを選択し、next を選択して、ボットを作成します。
+
+左側の「Basic Information」オプションに入り、`signing_secret` を記録します。
+
+左側の「OAuth & Permissions」に入り、「Scopes」までスクロールダウンし、次のボット権限を追加します:
+
+
+
+
+
+
+上記の権限を追加した後、「Install to your workspace」をクリックし、`xoxb-xxxxx` で始まるトークンを記録します。
+
+**注意:**
+**すべての権限を一度に追加しなかった場合は、後で App を再インストールする必要があります。**
+
+左側の「App Home」タブに入り、一番下までスクロールして「Message Tab」を見つけ、オンにして
+「Allow users to send Slash commands and messages from the messages tab」をチェックします。
+
+## LangBot に接続
+
+左側の「Event Subscriptions」に入り、スイッチをオンにし、「Subscribe to bot events」をクリックし、
+次の権限を追加します:
+
+
+上記のすべての操作を完了した後、LangBot Webui 設定ページを開き、新しいボットを追加します
+
+
+
+## ボットの起動
+
+
+Slack 公式が https を要求しているため、まずドキュメント [HTTP リバースプロキシと SSL の設定](/en/workshop/production/proxy-and-ssl)に従ってリバースプロキシを設定してください。
+
+
+Slack 設定項目を入力した後、**LangBot を起動します**。
+LangBot ホームページで Slack ボットを有効にして開き、ボット設定ページから WebHook URL をコピーし、先ほど設定した Event Subscriptions の「Request URL」に WebHook URL を入力します。
+
+
+上記のすべての設定項目を入力した後、リンクを保存をクリックします。緑色の **Verified** が表示されれば、デプロイは成功です。
+それ以外の場合は、上記の設定項目が正しく入力されているかどうかを確認してください。
+
+## 効果のデモンストレーション
+
+
diff --git a/ja/usage/platforms/telegram.mdx b/ja/usage/platforms/telegram.mdx
new file mode 100644
index 000000000..0ff062245
--- /dev/null
+++ b/ja/usage/platforms/telegram.mdx
@@ -0,0 +1,31 @@
+---
+title: "Telegram ボットに接続"
+---
+
+## ボットの作成
+
+[Telegram Bot Creation Page](https://t.me/botfather)にアクセスし、プロンプトに従ってボットを作成します。
+
+
+
+
+
+作成後、BotFather は API Token を返しますので、安全に保管してください。次に、グループチャットで使用するために「Privacy Mode」をオフにします。
+
+
+
+## LangBot に接続
+
+LangBot Webui ページを開き、新しいボットを作成します
+
+
+
+入力後、LangBot を起動します。設定が成功した場合、ログに `[02-02 16:48:15.263] manager.py (68) - [INFO] : Initializing platform adapter 1: telegram` と表示されます。LangBot を実行し続けてください。
+
+## ボットの使用
+
+グループまたはプライベートメッセージでボットを通常どおり使用できるようになりました。
+
+
+
+
diff --git a/ja/usage/platforms/wecom/wecom.mdx b/ja/usage/platforms/wecom/wecom.mdx
new file mode 100644
index 000000000..961e400af
--- /dev/null
+++ b/ja/usage/platforms/wecom/wecom.mdx
@@ -0,0 +1,79 @@
+---
+title: "WeCom ボットのデプロイ"
+---
+
+WeCom(企業微信)ボットをデプロイして LangBot に接続します。
+
+
+- WeCom コールバックアドレスにはパブリック IP とドメイン名が必要です。まず [HTTP リバースプロキシの設定](/ja/workshop/production/proxy-and-ssl)を参照して LangBot コールバックアドレスを設定することをお勧めします。
+
+
+## 企業 ID の記録
+
+[WeCom 管理ポータル](https://work.weixin.qq.com/)を開き、`私の企業`をクリックして、一番下の`企業 ID`を記録します。
+
+
+
+## ボットの作成
+
+`アプリ管理`、`自社開発`、`アプリを作成`をクリックします。
+
+
+
+ボットの基本情報を入力します:
+
+
+
+ボットのシークレット(Secret)を確認して記録します:
+
+
+
+WeCom クライアントからプロンプトに従って取得します。
+
+## 連絡先同期権限の有効化
+
+
+- LangBot はまだ開発中であるため、この設定項目に関連する機能はまだ実装されていません。
+- この設定項目はランダムな文字で埋めることができますが、**空にすることはできません**。
+
+
+`セキュリティと管理`、`管理ツール`、`連絡先同期`をクリックします。まず信頼できる IP を設定し、LangBot がデプロイされているサーバーの IP を追加します。
+
+`Secret を表示`をクリックして記録します。これが contacts_secret(連絡先同期 Secret)です。
+
+
+
+## LangBot でボットを作成
+
+LangBot のボットページで、`ボットを作成`をクリックし、名前を入力し、`企業微信`を選択します。このステップでは、企業 ID、ボットシークレット、連絡先同期 Secret のみを入力する必要があります。
+
+
+
+送信をクリックして、ボット編集ページにジャンプし、有効化をクリックします。この時点で Webhook コールバックアドレスが表示されるので、コピーします:
+
+
+
+## コールバックアドレスの設定
+
+WeCom のボット管理ページに戻り、`メッセージを受信`、`API 受信を設定`をクリックし、LangBot の Webhook コールバックアドレスを`URL`に入力します:
+
+
+
+Token と EncodingAESKey の`ランダム生成`をクリックして記録し、**このページを開いたままにします**。LangBot の WeCom ボット設定ページに戻り、Token と EncodingAESKey を入力して、保存をクリックします。
+
+
+
+**先ほど Webhook コールバックアドレスを入力したページ**に戻り、保存をクリックして設定を完了します。**リクエスト URL 失敗**が表示された場合は、設定項目が正しく入力されているか再度確認してください。
+
+## アプリの企業信頼 IP の設定
+
+このアプリの管理ページに戻り、下部の`企業信頼 IP`を見つけ、LangBot がデプロイされているサーバーの IP を追加します。
+
+
+
+保存をクリックして完了です。
+
+## よくある質問
+
+Q: WeCom でボットのチャットが見つかりませんか?
+A: WeCom 管理ページのこのアプリの詳細ページに移動し、`機能`->`メッセージを送信`->`メッセージを送信`をクリックし、自分のアカウントを選択してメッセージを送信すると、自分のチャットウィンドウでボットが表示されます。
diff --git a/ja/usage/platforms/wecom/wecombot.mdx b/ja/usage/platforms/wecom/wecombot.mdx
new file mode 100644
index 000000000..0fb81d32c
--- /dev/null
+++ b/ja/usage/platforms/wecom/wecombot.mdx
@@ -0,0 +1,61 @@
+---
+title: "WeCom インテリジェントボットのデプロイ"
+---
+
+
+## ボットの作成
+
+まず、[WeCom Admin Console](https://work.weixin.qq.com/wework_admin/frame#/)にログインします。
+
+
+
+左側のサイドバーの「セキュリティと管理」をクリックし、次に「管理ツール」の下の「インテリジェントボット」をクリックします。
+
+以下のように:
+
+
+
+「ボットを作成」をクリックし、ページの一番下までスクロールして「API モードで作成」をクリックし、ページに入ります:
+
+
+
+Token と EncodingAESKey をランダムに生成するためにクリックし、次に上部に基本的なボット情報を入力します。**表示範囲の設定に注意してください**。
+
+左側のサイドバーの「私の会社」をクリックし、下部の会社 ID を保存します。
+
+## コールバック URL の設定
+
+LangBot メインプログラムを起動し、アダプター「WeCom Intelligent Bot」を選択し、設定項目を入力します。
+その中で、token は Token、Encoding-AESKey は EncodingAESKey、Bot ID は xxx として入力できます(またはランダムに入力でき、後で変更されます)。入力後、
+「保存」をクリックし、ロボットを「有効化」します。
+
+
+
+LangBot ホームページで、対応するボットを有効にして選択し、設定ページをクリックして入り、Webhook コールバックアドレスをコピーします
+
+
+まず、[HTTP リバースプロキシの設定](/en/workshop/production/proxy-and-ssl)を参照して LangBot コールバックアドレスを設定することをお勧めします。
+
+
+
+
+WeCom ロボット設定ページに戻り、コピーした webhook アドレスを「URL Callback」に入力します。作成が成功すると、詳細ページにジャンプします。「Request URL Failed」というメッセージが表示された場合は、上記の手順が 1 つずつ完了しているかどうかを再度確認してください。
+
+作成成功後の詳細ページ:
+
+
+WeCom ロボット詳細ページから「Bot ID」をコピーし、LangBot 管理ページに戻り、デプロイされたインテリジェントロボットの Bot ID をコピーした ID に変更し、ロボットを再起動します。
+
+## 使用開始
+
+WeCom に入り、「➕」をクリックします。以下のように:
+
+
+
+「会社作成」をクリックし、作成したボットを選択し、チャットインターフェイスに入ります。
+
+同様に、ボットをグループチャットに招待したい場合は、グループチャットでメンバーを追加ボタンをクリックし、そこからボットを追加します。
+
+## 効果の画像
+
+
diff --git a/ja/usage/platforms/wecom/wecomcs.mdx b/ja/usage/platforms/wecom/wecomcs.mdx
new file mode 100644
index 000000000..1104be262
--- /dev/null
+++ b/ja/usage/platforms/wecom/wecomcs.mdx
@@ -0,0 +1,25 @@
+---
+title: "WeCom Customer Service のデプロイ"
+---
+
+
+
+**WeCom カスタマーサービスアカウントのデプロイには企業資格が必要です**。[WeCom Customer Service 統合ガイド](https://developer.work.weixin.qq.com/document/path/94638)を確認し、このドキュメントに従って対応する企業資格証明書を提供してください。
+
+
+
+## 効果のデモンストレーション
+
+
+
+## LangBot に接続
+
+
+
+後続の設定方法と設定項目は [WeCom 内部アプリケーション](wecom)と同じですが、`contacts_secret` は必要ありません。
+
+## 注意事項
+
+1. 上記の WeCom 公式ドキュメントの手順に必ず従い、カスタマーサービスアカウントを「API 管理」に追加してください。
+2. 手順は WeCom 内部アプリケーションと同じです。何も見逃さないでください。基本的には WeCom 内部アプリケーションに他の権限を追加するだけなので、コールバックアドレスも保存する必要があります。
+3. LangBot は、チャット記録や企業資格コンテンツなどの機密情報を読み取りません。
diff --git a/ja/usage/platforms/wxoa.mdx b/ja/usage/platforms/wxoa.mdx
new file mode 100644
index 000000000..220f01afa
--- /dev/null
+++ b/ja/usage/platforms/wxoa.mdx
@@ -0,0 +1,53 @@
+---
+title: "WeChat Official Account ボットのデプロイ"
+---
+
+WeChat Official Account ボットをデプロイして LangBot に接続します。
+
+## LangBot WeChat Official Account 統合モード
+
+現在、LangBot は WeChat Official Accounts と統合する 2 つの方法を提供しています:
+
+1. **従来のメッセージ交換モード**
+ - 公式アカウントはリクエストを **15 秒**以内に処理する必要があり、このタイムアウトを超える AI 生成コンテンツは送信できません。
+ - AI コンテンツ生成のタイムアウトが発生すると、LangBot はコンソールにリクエストタイムアウト情報を出力します。
+
+2. **「任意のテキストを送信して返信を取得」モード**
+ - この方法は **15 秒**の制限を破ることができますが、**非常に長いテキスト**は正常に送信されない場合があります。
+ - この方法を使用する場合、公式アカウントにメッセージを送信すると、「AI が考えています。回答を得るには任意のコンテンツを送信してください」と返信されます。この時点で、回答を得るために任意のコンテンツを送信する必要があります。
+
+より複雑な機能については、カスタマイズされたサポートのために **LangBot チーム**にお問い合わせください。
+
+## ボットの作成
+
+[WeChat Official Account Platform](https://mp.weixin.qq.com/)に入り、すでに公式アカウントをお持ちの場合は、QR コードをスキャンしてログインしてコンソールに入ります。
+以前に公式アカウントを登録したことがない場合は、今すぐ登録をクリックし、「公式アカウント」を選択し、順番に情報を入力し、コンソールに入ります。コンソールは次のようになります:
+
+
+
+## コールバックアドレスの設定
+
+### 設定項目の取得
+
+「設定と開発」、「開発インターフェイス管理」をクリックすると、次のようなページが表示されます:
+
+
+「開発者 ID(AppID)」、「開発者パスワード(AppSecret)」を記録し、LangBot がデプロイされているサーバーを「IP ホワイトリスト」に追加します。
+
+### LangBot のリバースプロキシの設定
+
+WeChat Official Accounts は http(ポート 80)と https(ポート 443)のみをサポートしているため、ドキュメント [HTTP リバースプロキシと SSL の設定](/en/workshop/production/proxy-and-ssl)に従って設定してください。
+
+### コールバックアドレスの保存
+
+サーバー設定を設定をクリックし、「Token」、「EncodingAESKey」を入力し、メッセージの暗号化/復号化方式を「Safe Mode」に変更します。
+
+この時点で、LangBot Webui ページを開き、新しいボットを作成し、取得した 4 つの設定項目(AppID、AppSecret、token、EncodingAESKey)を入力します
+
+
+
+設定項目の「Mode」オプションは、選択された統合モードです。デフォルトは「drop」です。「drop」は従来のメッセージ交換モードで、「passive」は「任意のテキストを送信して返信を取得」モードです。
+
+「LoadingMessage」オプションはローディングメッセージで、他のコンテンツに変更でき、モードが「passive」の場合にのみ有効です。「enable」を「true」に設定します。
+
+正常に入力した後、LangBot ホームページで対応するボットを有効にして選択し、設定ページをクリックして入り、Webhook コールバックアドレスをコピーし、WeChat Official Account ボット設定ページに戻って「URL」に入力します。たとえば、URL を「https://your_domain_name/bots/xxxxx」として入力します。ここで「your_domain_name」は Caddy に入力したドメイン名です。保存をクリックします。正常に保存できれば、デプロイは成功です。**システムエラー、後でもう一度お試しください**が表示された場合は、上記の設定内容が正しく入力されているかどうかを再確認してください。
diff --git a/ja/workshop/302ai-integration.mdx b/ja/workshop/302ai-integration.mdx
new file mode 100644
index 000000000..4173b5a8a
--- /dev/null
+++ b/ja/workshop/302ai-integration.mdx
@@ -0,0 +1,7 @@
+---
+title: "302 AIとのモデル統合"
+---
+
+WebUIページを開き、モデルを追加する際に[302 AI](https://share.302.ai/SuTG99)を選択します。
+
+
diff --git a/ja/workshop/impl-platform-adapter.mdx b/ja/workshop/impl-platform-adapter.mdx
new file mode 100644
index 000000000..cf1494a18
--- /dev/null
+++ b/ja/workshop/impl-platform-adapter.mdx
@@ -0,0 +1,52 @@
+---
+title: "メッセージプラットフォームアダプターの実装"
+---
+
+この記事では、`aiocqhttp`アダプターを例として、LangBotの新しいメッセージプラットフォームアダプターを実装し、WhatsAppやDiscordなどの新しいメッセージプラットフォームプロトコルを統合する方法を説明します。
+
+## 登録
+
+```text
+新しいメッセージプラットフォームアダプターを追加します。例: WhatsApp、Discordなどを統合
+
+- 基底クラス: `pkg.platform.adapter.MessageSourceAdapter`
+- デコレーター: `pkg.platform.adapter.adapter_class(name: str)`
+- 参考実装: `pkg.platform.sources/`
+```
+
+メッセージプラットフォームアダプターを実装するには、基本的に`基底クラス`を継承するクラスを実装し、`デコレーター`を使用して登録する必要があります。最後に、実行時にユーザーが選択して使用できるようになります。
+
+### メインリポジトリへの貢献
+
+`pkg/platform/sources/`ディレクトリに新しいファイル`aiocqhttp.py`を作成します:
+
+```python
+from .. import adapter
+
+@adapter.adapter_class("aiocqhttp")
+class AiocqhttpAdapter(adapter.MessageSourceAdapter):
+ pass
+```
+
+また、`pkg/platform/manager.py`の40行目でこのモジュールをインポートします:
+
+```python
+ from .sources import nakuru, aiocqhttp, qqbotpy
+```
+
+最後に、他のアダプターのマニフェストファイルを参考にして、独自のマニフェストファイルを作成します。
+
+## イベントとメッセージコンバーター
+
+メッセージプラットフォームアダプターの主な作業は、`メッセージプラットフォームプロトコルからイベントを受信し、LangBotの形式に変換する`ことです。これをコアコンポーネントに渡し、LangBotのコアコンポーネントが処理した後、返信する必要のあるコンテンツをメッセージプラットフォームアダプターに渡します。次に、`コンテンツをプラットフォームプロトコル形式に変換してメッセージプラットフォームに送信します`。
+
+次の図は、2つのシナリオの処理パターンを示しています: SDKのないメッセージプラットフォームプロトコルと成熟したSDKを持つプロトコル。最初のケースでは、メッセージプラットフォームプロトコルのドキュメントに従って、接続管理とネットワーク形式データのLBメッセージPythonオブジェクトへの変換を実装する必要があります。2番目のケースでは、メッセージプラットフォームに成熟したSDKがあり、SDKドキュメントに従って接続を作成し、イベントリスナーを登録し、メッセージコンバーターを実装するだけです。
+
+
+
+`pkg.platform.sources.aiocqhttp`ファイルでは、`AiocqhttpAdapter`だけでなく、`class AiocqhttpMessageConverter(adapter.MessageConverter):`と`class AiocqhttpEventConverter(adapter.EventConverter):`も確認できます。
+
+- `MessageConverter`は、LangBotメッセージとプラットフォームメッセージ間の変換に使用されます。
+- `EventConverter`は、LangBotイベントとプラットフォームイベント間の変換に使用されます。
+
+TBC...
diff --git a/ja/workshop/mcp-details.mdx b/ja/workshop/mcp-details.mdx
new file mode 100644
index 000000000..87b0e15a4
--- /dev/null
+++ b/ja/workshop/mcp-details.mdx
@@ -0,0 +1,25 @@
+---
+title: "MCPエコシステムの詳細"
+---
+
+[MCPプロトコル](https://modelcontextprotocol.io/)は、アプリケーションとLLM間のインタラクションを記述するプロトコルであり、さまざまな製品で採用されています。LangBotはMCPクライアントとして動作し、MCPサーバーに接続して、ユーザーとの会話中にLLMが使用する広範なツールを提供できます。
+
+## MCPサーバーの検索
+
+LangBotでMCPツールを使用するには、既存のMCPサーバーを見つけて接続する必要があります。
+市場には2種類のMCPサーバーがあります:
+
+- NodeまたはPythonで実装された実行可能ファイルで、`stdio`(標準入出力)を通じてLangBotと通信します
+- HTTPプロトコルに基づくWebサービスで、HTTPプロトコルを通じてLangBotと通信します
+
+
+- オンラインでホストされているMCPサーバーについては、[Composio MCP](https://mcp.composio.dev/)で見つけることができます。
+- 独自のMCPサーバーを作成するには、[MCPプロトコルドキュメント](https://modelcontextprotocol.io/quickstart/server)および[MCPサーバーの例](https://modelcontextprotocol.io/examples)を参照してください。
+
+
+
+## MCPサーバーの設定
+
+[システム設定ドキュメント](/en/deploy/settings.html)を参照してください
+
+設定後、チャットで`!func`コマンドを使用して、登録されたMCPツールを表示できます。Function Callingをサポートするモデルとチャットする際、LangBotは自動的にMCPツールを呼び出します。
diff --git a/ja/workshop/network-details.mdx b/ja/workshop/network-details.mdx
new file mode 100644
index 000000000..7fab157c8
--- /dev/null
+++ b/ja/workshop/network-details.mdx
@@ -0,0 +1,63 @@
+---
+title: "ネットワーク設定の詳細"
+---
+
+
+同時に、LangBotインスタンスがコンテナで実行されている他のサービス(Ollamaなど)に接続する必要がある場合も、以下の設定を参照して、`メッセージングプラットフォーム`を`接続したいサービス`に置き換えてください。
+
+
+LangBotと一部のメッセージングプラットフォームは、どちらもDockerを使用してデプロイできます。以下は、4つの異なるシナリオのネットワーク設定の詳細です。
+
+
+[[toc]]
+
+
+## LangBotとメッセージングプラットフォームの両方がDockerコンテナで実行されている場合
+
+メッセージングプラットフォーム(NapCat/Lagrange)とLangBotの両方がDockerを使用して起動される場合、Dockerのネットワーク接続を設定する必要があります。
+
+新しいネットワークを作成します:
+
+```bash
+docker network create langbot-network
+```
+
+LangBotディレクトリの`docker-compose.yaml`ファイルにネットワーク設定を追加します(`services.langbot`フィールドに追加し、`networks`フィールドの下に`langbot-network`ネットワーク設定を追加します):
+
+```yaml
+services:
+ langbot:
+ ...
+ networks:
+ - langbot-network
+ ...
+
+networks:
+ langbot-network:
+ external: true
+```
+
+次に、メッセージングプラットフォームの`docker-compose.yaml`ファイルに同じネットワーク設定を追加します(docker runコマンドで直接起動する場合は、起動コマンドに`--network langbot-network`を追加します)。その後、メッセージングプラットフォームの設定ファイルで、WSリバース接続アドレスのIPアドレスを`langbot`に変更します(例: `ws://langbot:2280/ws`)。
+
+両方のコンテナを再起動します。
+
+
+
+## LangBotのみがDockerコンテナで実行されている場合
+
+LangBotのみがDockerを使用してデプロイされている場合、ポート2280から2290はデフォルトでコンテナの外部にマッピングされています。この場合、LangBotはWebSocketサーバーとしてのみ動作し、メッセージングプラットフォームからクライアントとしての接続を受け入れることができます。
+
+メッセージングプラットフォームをReverseWebSocket(`reverse ws`または`WebSocketクライアント`と呼ばれます)に設定し、LangBotのaiocqhttpアダプターによって有効にされたポートに対応するポートで、ローカル127.0.0.1に接続します。
+
+
+## LangBotもメッセージングプラットフォームもDockerデプロイを使用していない場合
+
+ドキュメントに従ってメッセージングプラットフォームとLangBotの設定を行い、両方のポートを同じ未使用のポートに設定し、両方ともローカル127.0.0.1に接続します。
+
+## メッセージングプラットフォームのみがDockerコンテナで実行されている場合(推奨されません)
+
+
+Linuxまたはホストモードのdockerネットワークをサポートする他のシステムのみサポートします。
+
+
+現在、LangBotのaiocqhttpアダプターはリバースWebSocket接続のみをサポートしています。メッセージングプラットフォームがDockerコンテナで実行され、LangBotがホストマシンで直接実行される場合、メッセージングプラットフォームはLangBotに接続するクライアントとして動作する必要があります。この場合、メッセージングプラットフォームのネットワークを`host`モードに設定し、そのWS接続アドレスを127.0.0.1に設定し、ポートをLangBotのaiocqhttpアダプターによって有効にされたポートに対応させることしかできません。
diff --git a/ja/workshop/newapi-integration.mdx b/ja/workshop/newapi-integration.mdx
new file mode 100644
index 000000000..df781fd4b
--- /dev/null
+++ b/ja/workshop/newapi-integration.mdx
@@ -0,0 +1,46 @@
+---
+title: "LangBotとNew APIの統合"
+---
+
+New APIは次世代の大規模モデルゲートウェイおよびAI資産管理システムであり、複数のAIサービスプロバイダーへの断片的なアクセス、コスト管理の難しさ、サービス安定性の不足などの問題に対処するように設計されています。その中心的な利点は、次の3つの側面に焦点を当てています:
+
+1. **マルチプロバイダー互換性**: **30以上のAIサービスプロバイダー**を統合し、**100% OpenAI互換**を実現しています(つまり、OpenAIインターフェース形式で他のサービスプロバイダーのモデルを呼び出すことをサポートし、開発コストを削減します)
+2. **高可用性**: **99.9%のサービス可用性**を約束し、エンタープライズレベルの安定性要件を満たします
+3. **使いやすさと制御性**: 迅速なアクセスのための「ワンクリックデプロイ」をサポートし、ユーザーがAI使用コストを管理するのに役立つ「柔軟な請求」機能も提供し、「セキュリティと安定性」機能も考慮しています
+
+## 1. New APIをローカルにデプロイする(Dockerコンテナ方式)
+
+> その他のデプロイ方法については、[New APIデプロイガイド](https://docs.newapi.pro/installation/)を参照してください
+
+このデプロイ方法はSQLiteデータベースを使用します(軽量で、追加のデプロイは不要です)。
+
+コマンドラインで次のように入力します:
+
+```bash
+docker run --name new-api -d --restart always \
+ -p 3000:3000 \
+ -e TZ=Asia/Shanghai \
+ -v ./new-api/data:/data \
+ calciumion/new-api:latest
+```
+
+> ⚠️ 注意:
+> - `./new-api/data`を使用したい実際のフォルダーに置き換えてください。
+
+デプロイ後、`http://server-IP:3000`を開いてNew APIを設定します。
+
+## 2. LangBotをローカルのNew APIに接続する
+
+1. **New APIモデルを追加**
+ - モデル名: New APIで設定されたモデル名を入力します
+ - モデルプロバイダー: New APIを選択します
+ - リクエストURL: `http://server-IP:3000/v1`を入力します
+ - APIキー: New APIで作成したトークンを入力します
+
+
+
+2. **パイプラインで新しく設定したモデルを選択**
+
+
+
+3. これで、New APIのモデルを使用できます。
diff --git a/ja/workshop/ppio-integration.mdx b/ja/workshop/ppio-integration.mdx
new file mode 100644
index 000000000..ea870879c
--- /dev/null
+++ b/ja/workshop/ppio-integration.mdx
@@ -0,0 +1,7 @@
+---
+title: "PPIO Cloud APIとのモデル統合"
+---
+
+WebUIページを開き、モデルを追加する際に[PPIO Cloud](https://ppio.cn/user/register?from=ppinfra&invited_by=QJKFYD&utm_source=github_langbot)を選択します。
+
+
diff --git a/ja/workshop/production/proxy-and-ssl.mdx b/ja/workshop/production/proxy-and-ssl.mdx
new file mode 100644
index 000000000..b9cecf3d5
--- /dev/null
+++ b/ja/workshop/production/proxy-and-ssl.mdx
@@ -0,0 +1,127 @@
+---
+title: "HTTPリバースプロキシの設定またはゲートウェイ経由でのLangBotへのアクセス"
+---
+
+LangBotにはHTTPSサービス用の組み込みSSLサポートがありません。ドメイン名をLangBotインスタンスに解決する必要がある場合、またはHTTPSを使用してLangBot WebUIとさまざまなボット用のWebhookアドレスにアクセスする必要がある場合は、このドキュメントを参照してNGINXまたはCaddyをデプロイし、HTTPリバースプロキシを実装してください。
+
+公開IPアドレスを持つホストにLangBotをデプロイし、ドメイン名を購入し、ドメイン名をホストの公開IPに解決する必要があります。
+
+
+QQ公式ボット、WeChat公式アカウント、WeCom、Slack、LINEなどのWebhookコールバックアドレスが必要なボットを使用する必要がある場合は、このドキュメントに従ってHTTPリバースプロキシを設定する必要があります。
+
+
+## Caddy
+
+Caddyは、自動HTTPS証明書申請と更新、リバースプロキシ、自動DNS解決設定をサポートする最新のHTTPサーバーです。
+
+[Caddyインストールドキュメント](https://caddy2.dengxiaolong.com/docs/install)。お使いのオペレーティングシステムに対応するインストール手順を選択して、インストールを進めてください。
+
+### Caddyfileの設定
+
+このドキュメントでは、LangBotをデプロイするためにUbuntuシステムを使用することを前提としています。システムでは、Caddyfileのデフォルトの場所は`/etc/caddy/Caddyfile`です。
+vimまたはnanoを使用してCaddyfileを編集し、次のようにCaddyfileに記入します:
+
+```json
+your.domain.com {
+ reverse_proxy 127.0.0.1:5300
+}
+```
+
+
+CaddyとLangBotがコンテナを使用してデプロイされている場合は、[コンテナネットワーク設定の詳細](/en/workshop/network-details)を確認してください
+
+
+これで、ブラウザを通じて`https://your.domain.com`でLangBot WebUIにアクセスできます。
+
+### ボットコールバックアドレスプレフィックスの設定
+
+QQ公式ボット、WeChat公式アカウント、WeCom、Slack、LINEなどのWebhookコールバックアドレスが必要なボットを使用する必要がある場合は、data/config.yamlファイルで`api.webhook_prefix`をドメイン名に設定してください。例: `https://your.domain.com`。
+
+その後、ボット管理ページに正しく表示されたコールバックアドレスが表示されます。
+
+## NGINX
+
+NGINXも一般的に使用されるHTTPサーバーおよびリバースプロキシツールであり、LangBotへのHTTPSアクセスを実装するために使用できます。
+
+### NGINXのインストール
+
+Ubuntuでは、次のコマンドでNGINXをインストールできます:
+
+```bash
+sudo apt update
+sudo apt install nginx
+```
+
+### SSL証明書の準備
+
+[Let's Encrypt](https://letsencrypt.org/)を使用して無料のSSL証明書を申請できます。証明書を取得するには、[Certbot](https://certbot.eff.org/)ツールの使用をお勧めします:
+
+```bash
+sudo apt install certbot python3-certbot-nginx
+sudo certbot --nginx
+```
+
+プロンプトに従ってドメイン名を入力すると、証明書の申請とNGINXの設定が自動的に完了します。以下の内容を参照してNGINX設定を完了してください。
+
+### NGINXリバースプロキシの設定
+
+LangBotのパイプラインデバッグ機能では、WebSocket接続を使用する必要があるため、NGINXをWebSocketをサポートするように設定する必要があります。
+
+NGINX設定ファイル`/etc/nginx/sites-available/langbot`を編集します(vimまたはnanoエディターを使用できます):
+
+```nginx
+# WebSocket接続アップグレードマッピング(serverブロックの外側に配置)
+map $http_upgrade $connection_upgrade {
+ default upgrade;
+ '' close;
+}
+
+server {
+ listen 80;
+ server_name your.domain.com;
+ # HTTPトラフィックをHTTPSにリダイレクト
+ return 301 https://$host$request_uri;
+}
+
+server {
+ listen 443 ssl;
+ server_name your.domain.com;
+
+ ssl_certificate /etc/letsencrypt/live/your.domain.com/fullchain.pem;
+ ssl_certificate_key /etc/letsencrypt/live/your.domain.com/privkey.pem;
+
+ ssl_protocols TLSv1.2 TLSv1.3;
+ ssl_ciphers HIGH:!aNULL:!MD5;
+
+ # LangBotインスタンスへのリバースプロキシ
+ location / {
+ proxy_pass http://127.0.0.1:5300;
+ proxy_set_header Host $host;
+ proxy_set_header X-Real-IP $remote_addr;
+ proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
+ proxy_set_header X-Forwarded-Proto $scheme;
+
+ # WebSocketサポート
+ proxy_http_version 1.1;
+ proxy_set_header Upgrade $http_upgrade;
+ proxy_set_header Connection $connection_upgrade;
+ proxy_read_timeout 86400;
+ }
+}
+```
+
+`your.domain.com`を実際のドメイン名に置き換えてください。
+
+この設定を有効にし、NGINXを再起動します:
+
+```bash
+sudo ln -s /etc/nginx/sites-available/langbot /etc/nginx/sites-enabled/langbot
+sudo nginx -t
+sudo systemctl reload nginx
+```
+
+### ボットコールバックアドレスプレフィックスの設定
+
+同様に、`data/config.yaml`設定ファイルで`api.webhook_prefix`を`https://your.domain.com`に設定すると、ボットWebhookコールバックアドレスが正しくなります。
+
+上記の設定を完了すると、`https://your.domain.com`を通じてLangBot WebUIとボットWebhookサービスに安全にアクセスできます。
diff --git a/docs/public/langbot-plugin-social.png b/langbot-plugin-social.png
similarity index 100%
rename from docs/public/langbot-plugin-social.png
rename to langbot-plugin-social.png
diff --git a/docs/public/langbot-logo-0.5x.png b/logo/langbot-logo-0.5x.png
similarity index 100%
rename from docs/public/langbot-logo-0.5x.png
rename to logo/langbot-logo-0.5x.png
diff --git a/docs/public/langbot-logo-block.png b/logo/langbot-logo-block.png
similarity index 100%
rename from docs/public/langbot-logo-block.png
rename to logo/langbot-logo-block.png
diff --git a/docs/public/langbot-logo-final.png b/logo/langbot-logo-final.png
similarity index 100%
rename from docs/public/langbot-logo-final.png
rename to logo/langbot-logo-final.png
diff --git a/docs/public/langbot-logo.png b/logo/langbot-logo.png
similarity index 100%
rename from docs/public/langbot-logo.png
rename to logo/langbot-logo.png
diff --git a/docs/assets/service-api-openapi-en.json b/openapi/service-api-en.json
similarity index 57%
rename from docs/assets/service-api-openapi-en.json
rename to openapi/service-api-en.json
index 1e81adee2..0a197414a 100644
--- a/docs/assets/service-api-openapi-en.json
+++ b/openapi/service-api-en.json
@@ -2,7 +2,7 @@
"openapi": "3.0.3",
"info": {
"title": "LangBot API with API Key Authentication",
- "description": "LangBot external service API documentation. These endpoints support API Key authentication \nfor external systems to programmatically access LangBot resources.\n\n**Authentication Methods:**\n- User Token (via `Authorization: Bearer `)\n- API Key (via `X-API-Key: ` or `Authorization: Bearer `)\n\nAll endpoints documented here accept BOTH authentication methods.\n",
+ "description": "LangBot External Service API Documentation. These interfaces support API key authentication for external systems to programmatically access LangBot resources.\n\n**Authentication Methods:**\n- User Token (via `Authorization: Bearer `)\n- API Key (via `X-API-Key: ` or `Authorization: Bearer `)\n\nAll interfaces in this documentation support both authentication methods.\n",
"version": "4.4.1",
"contact": {
"name": "LangBot",
@@ -25,7 +25,7 @@
"description": "Large Language Model management operations"
},
{
- "name": "Models - Embedding",
+ "name": "Models - Embeddings",
"description": "Embedding model management operations"
},
{
@@ -35,6 +35,18 @@
{
"name": "Pipelines",
"description": "Pipeline configuration management operations"
+ },
+ {
+ "name": "Knowledge Bases",
+ "description": "Built-in knowledge base management operations"
+ },
+ {
+ "name": "Files",
+ "description": "File upload and management operations"
+ },
+ {
+ "name": "Plugins",
+ "description": "Plugin installation and management operations"
}
],
"security": [
@@ -1486,6 +1498,1309 @@
}
}
}
+ },
+ "/api/v1/files/images": {
+ "post": {
+ "tags": [
+ "Files"
+ ],
+ "summary": "Upload Image",
+ "description": "Upload image file (supports jpg, jpeg, png, gif, webp, max 10MB)",
+ "operationId": "uploadImage",
+ "requestBody": {
+ "required": true,
+ "content": {
+ "multipart/form-data": {
+ "schema": {
+ "type": "object",
+ "required": [
+ "file"
+ ],
+ "properties": {
+ "file": {
+ "type": "string",
+ "format": "binary",
+ "description": "Image file"
+ }
+ }
+ }
+ }
+ }
+ },
+ "responses": {
+ "200": {
+ "description": "Upload successful",
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "object",
+ "properties": {
+ "code": {
+ "type": "integer",
+ "example": 0
+ },
+ "msg": {
+ "type": "string",
+ "example": "ok"
+ },
+ "data": {
+ "type": "object",
+ "properties": {
+ "file_key": {
+ "type": "string",
+ "description": "File key"
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ },
+ "security": [
+ {
+ "BearerAuth": []
+ }
+ ]
+ }
+ },
+ "/api/v1/files/documents": {
+ "post": {
+ "tags": [
+ "Files"
+ ],
+ "summary": "Upload Document",
+ "description": "Upload document file (max 10MB)",
+ "operationId": "uploadDocument",
+ "requestBody": {
+ "required": true,
+ "content": {
+ "multipart/form-data": {
+ "schema": {
+ "type": "object",
+ "required": [
+ "file"
+ ],
+ "properties": {
+ "file": {
+ "type": "string",
+ "format": "binary",
+ "description": "Document file"
+ }
+ }
+ }
+ }
+ }
+ },
+ "responses": {
+ "200": {
+ "description": "Upload successful",
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "object",
+ "properties": {
+ "code": {
+ "type": "integer",
+ "example": 0
+ },
+ "msg": {
+ "type": "string",
+ "example": "ok"
+ },
+ "data": {
+ "type": "object",
+ "properties": {
+ "file_id": {
+ "type": "string",
+ "description": "File ID"
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ },
+ "security": [
+ {
+ "BearerAuth": []
+ }
+ ]
+ }
+ },
+ "/api/v1/plugins": {
+ "get": {
+ "tags": [
+ "Plugins"
+ ],
+ "summary": "List All Plugins",
+ "description": "Get list of all installed plugins",
+ "operationId": "listPlugins",
+ "responses": {
+ "200": {
+ "description": "Success",
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "object",
+ "properties": {
+ "code": {
+ "type": "integer",
+ "example": 0
+ },
+ "msg": {
+ "type": "string",
+ "example": "ok"
+ },
+ "data": {
+ "type": "object",
+ "properties": {
+ "plugins": {
+ "type": "array",
+ "items": {
+ "type": "object"
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ },
+ "security": [
+ {
+ "BearerAuth": []
+ }
+ ]
+ }
+ },
+ "/api/v1/plugins/{author}/{plugin_name}": {
+ "get": {
+ "tags": [
+ "Plugins"
+ ],
+ "summary": "Get Plugin Details",
+ "description": "Get details of a specific plugin",
+ "operationId": "getPlugin",
+ "parameters": [
+ {
+ "name": "author",
+ "in": "path",
+ "required": true,
+ "schema": {
+ "type": "string"
+ },
+ "description": "Plugin author"
+ },
+ {
+ "name": "plugin_name",
+ "in": "path",
+ "required": true,
+ "schema": {
+ "type": "string"
+ },
+ "description": "Plugin name"
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "Success",
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "object",
+ "properties": {
+ "code": {
+ "type": "integer",
+ "example": 0
+ },
+ "msg": {
+ "type": "string",
+ "example": "ok"
+ },
+ "data": {
+ "type": "object",
+ "properties": {
+ "plugin": {
+ "type": "object"
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ },
+ "security": [
+ {
+ "BearerAuth": []
+ }
+ ]
+ },
+ "delete": {
+ "tags": [
+ "Plugins"
+ ],
+ "summary": "Delete Plugin",
+ "description": "Uninstall the specified plugin",
+ "operationId": "deletePlugin",
+ "parameters": [
+ {
+ "name": "author",
+ "in": "path",
+ "required": true,
+ "schema": {
+ "type": "string"
+ },
+ "description": "Plugin author"
+ },
+ {
+ "name": "plugin_name",
+ "in": "path",
+ "required": true,
+ "schema": {
+ "type": "string"
+ },
+ "description": "Plugin name"
+ },
+ {
+ "name": "delete_data",
+ "in": "query",
+ "required": false,
+ "schema": {
+ "type": "boolean",
+ "default": false
+ },
+ "description": "Whether to delete plugin data"
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "Deletion task created",
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "object",
+ "properties": {
+ "code": {
+ "type": "integer",
+ "example": 0
+ },
+ "msg": {
+ "type": "string",
+ "example": "ok"
+ },
+ "data": {
+ "type": "object",
+ "properties": {
+ "task_id": {
+ "type": "string"
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ },
+ "security": [
+ {
+ "BearerAuth": []
+ }
+ ]
+ }
+ },
+ "/api/v1/plugins/install/local": {
+ "post": {
+ "tags": [
+ "Plugins"
+ ],
+ "summary": "Install Plugin from Local File",
+ "description": "Upload and install plugin package file",
+ "operationId": "installPluginLocal",
+ "requestBody": {
+ "required": true,
+ "content": {
+ "multipart/form-data": {
+ "schema": {
+ "type": "object",
+ "required": [
+ "file"
+ ],
+ "properties": {
+ "file": {
+ "type": "string",
+ "format": "binary",
+ "description": "Plugin package file (.lbpkg format)"
+ }
+ }
+ }
+ }
+ }
+ },
+ "responses": {
+ "200": {
+ "description": "Installation task created",
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "object",
+ "properties": {
+ "code": {
+ "type": "integer",
+ "example": 0
+ },
+ "msg": {
+ "type": "string",
+ "example": "ok"
+ },
+ "data": {
+ "type": "object",
+ "properties": {
+ "task_id": {
+ "type": "string"
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ },
+ "security": [
+ {
+ "BearerAuth": []
+ }
+ ]
+ }
+ },
+ "/api/v1/plugins/install/github": {
+ "post": {
+ "tags": [
+ "Plugins"
+ ],
+ "summary": "Install Plugin from GitHub",
+ "description": "Install plugin from GitHub Release",
+ "operationId": "installPluginGitHub",
+ "requestBody": {
+ "required": true,
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "object",
+ "required": [
+ "asset_url"
+ ],
+ "properties": {
+ "asset_url": {
+ "type": "string",
+ "description": "GitHub Release asset download URL"
+ },
+ "owner": {
+ "type": "string",
+ "description": "Repository owner"
+ },
+ "repo": {
+ "type": "string",
+ "description": "Repository name"
+ },
+ "release_tag": {
+ "type": "string",
+ "description": "Release tag"
+ }
+ }
+ }
+ }
+ }
+ },
+ "responses": {
+ "200": {
+ "description": "Installation task created",
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "object",
+ "properties": {
+ "code": {
+ "type": "integer",
+ "example": 0
+ },
+ "msg": {
+ "type": "string",
+ "example": "ok"
+ },
+ "data": {
+ "type": "object",
+ "properties": {
+ "task_id": {
+ "type": "string"
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ },
+ "security": [
+ {
+ "BearerAuth": []
+ }
+ ]
+ }
+ },
+ "/api/v1/plugins/install/marketplace": {
+ "post": {
+ "tags": [
+ "Plugins"
+ ],
+ "summary": "Install from Marketplace",
+ "description": "Install plugin from LangBot plugin marketplace",
+ "operationId": "installPluginMarketplace",
+ "requestBody": {
+ "required": true,
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "object",
+ "properties": {
+ "plugin_id": {
+ "type": "string",
+ "description": "Plugin ID"
+ }
+ }
+ }
+ }
+ }
+ },
+ "responses": {
+ "200": {
+ "description": "Installation task created",
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "object",
+ "properties": {
+ "code": {
+ "type": "integer",
+ "example": 0
+ },
+ "msg": {
+ "type": "string",
+ "example": "ok"
+ },
+ "data": {
+ "type": "object",
+ "properties": {
+ "task_id": {
+ "type": "string"
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ },
+ "security": [
+ {
+ "BearerAuth": []
+ }
+ ]
+ }
+ },
+ "/api/v1/platform/bots/{bot_uuid}/send_message": {
+ "post": {
+ "tags": [
+ "Bots"
+ ],
+ "summary": "Send Message",
+ "description": "Send a message to a specific target via the specified bot",
+ "operationId": "sendMessage",
+ "parameters": [
+ {
+ "name": "bot_uuid",
+ "in": "path",
+ "required": true,
+ "schema": {
+ "type": "string"
+ },
+ "description": "Bot UUID"
+ }
+ ],
+ "requestBody": {
+ "required": true,
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "object",
+ "required": [
+ "target_type",
+ "target_id",
+ "message_chain"
+ ],
+ "properties": {
+ "target_type": {
+ "type": "string",
+ "enum": [
+ "person",
+ "group"
+ ],
+ "description": "Target type"
+ },
+ "target_id": {
+ "type": "string",
+ "description": "Target ID (user ID or group ID)"
+ },
+ "message_chain": {
+ "type": "array",
+ "items": {
+ "type": "object"
+ },
+ "description": "Message chain (array of MessageComponent)"
+ }
+ }
+ },
+ "examples": {
+ "Text Message": {
+ "value": {
+ "target_type": "group",
+ "target_id": "123456789",
+ "message_chain": [
+ {
+ "type": "Plain",
+ "text": "Hello, World!"
+ }
+ ]
+ }
+ },
+ "Text and Image": {
+ "value": {
+ "target_type": "person",
+ "target_id": "987654321",
+ "message_chain": [
+ {
+ "type": "Plain",
+ "text": "Check out this image:"
+ },
+ {
+ "type": "Image",
+ "url": "https://example.com/image.jpg"
+ }
+ ]
+ }
+ }
+ }
+ }
+ }
+ },
+ "responses": {
+ "200": {
+ "description": "Message sent successfully",
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "object",
+ "properties": {
+ "code": {
+ "type": "integer",
+ "example": 0
+ },
+ "msg": {
+ "type": "string",
+ "example": "ok"
+ },
+ "data": {
+ "type": "object",
+ "properties": {
+ "sent": {
+ "type": "boolean",
+ "example": true
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ },
+ "400": {
+ "description": "Bad request",
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "object",
+ "properties": {
+ "code": {
+ "type": "integer",
+ "example": -1
+ },
+ "msg": {
+ "type": "string",
+ "example": "target_type is required"
+ }
+ }
+ }
+ }
+ }
+ },
+ "500": {
+ "description": "Failed to send",
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "object",
+ "properties": {
+ "code": {
+ "type": "integer",
+ "example": -1
+ },
+ "msg": {
+ "type": "string",
+ "example": "Failed to send message: Bot not found"
+ }
+ }
+ }
+ }
+ }
+ }
+ },
+ "security": [
+ {
+ "ApiKeyAuth": []
+ }
+ ]
+ }
+ },
+ "/api/v1/knowledge/bases": {
+ "get": {
+ "tags": [
+ "Knowledge Bases"
+ ],
+ "summary": "Get All Knowledge Bases",
+ "description": "Get all builtin knowledge bases",
+ "operationId": "listKnowledgeBases",
+ "responses": {
+ "200": {
+ "description": "Success",
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "object",
+ "properties": {
+ "code": {
+ "type": "integer",
+ "example": 0
+ },
+ "msg": {
+ "type": "string",
+ "example": "ok"
+ },
+ "data": {
+ "type": "object",
+ "properties": {
+ "bases": {
+ "type": "array",
+ "items": {
+ "type": "object"
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ },
+ "security": [
+ {
+ "ApiKeyAuth": []
+ },
+ {
+ "BearerAuth": []
+ }
+ ]
+ },
+ "post": {
+ "tags": [
+ "Knowledge Bases"
+ ],
+ "summary": "Create Knowledge Base",
+ "description": "Create a new knowledge base",
+ "operationId": "createKnowledgeBase",
+ "requestBody": {
+ "required": true,
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "object",
+ "required": [
+ "name",
+ "embedding_model_uuid"
+ ],
+ "properties": {
+ "name": {
+ "type": "string",
+ "description": "name"
+ },
+ "description": {
+ "type": "string",
+ "description": "description"
+ },
+ "embedding_model_uuid": {
+ "type": "string",
+ "description": "Embedding model UUID"
+ }
+ }
+ },
+ "example": {
+ "name": "技术文档库",
+ "description": "存储技术文档和API参考",
+ "embedding_model_uuid": "uuid-of-embedding-model"
+ }
+ }
+ }
+ },
+ "responses": {
+ "200": {
+ "description": "Knowledge base created successfully",
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "object",
+ "properties": {
+ "code": {
+ "type": "integer",
+ "example": 0
+ },
+ "msg": {
+ "type": "string",
+ "example": "ok"
+ },
+ "data": {
+ "type": "object",
+ "properties": {
+ "uuid": {
+ "type": "string"
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ },
+ "security": [
+ {
+ "ApiKeyAuth": []
+ },
+ {
+ "BearerAuth": []
+ }
+ ]
+ }
+ },
+ "/api/v1/knowledge/bases/{kb_uuid}": {
+ "get": {
+ "tags": [
+ "Knowledge Bases"
+ ],
+ "summary": "Get Knowledge Base Details",
+ "description": "Get details info of specified knowledge base",
+ "operationId": "getKnowledgeBase",
+ "parameters": [
+ {
+ "name": "kb_uuid",
+ "in": "path",
+ "required": true,
+ "schema": {
+ "type": "string"
+ },
+ "description": "Knowledge Base UUID"
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "Success",
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "object",
+ "properties": {
+ "code": {
+ "type": "integer",
+ "example": 0
+ },
+ "msg": {
+ "type": "string",
+ "example": "ok"
+ },
+ "data": {
+ "type": "object",
+ "properties": {
+ "base": {
+ "type": "object"
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ },
+ "404": {
+ "description": "Knowledge base not found",
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "object",
+ "properties": {
+ "code": {
+ "type": "integer",
+ "example": -1
+ },
+ "msg": {
+ "type": "string",
+ "example": "knowledge base not found"
+ }
+ }
+ }
+ }
+ }
+ }
+ },
+ "security": [
+ {
+ "ApiKeyAuth": []
+ },
+ {
+ "BearerAuth": []
+ }
+ ]
+ },
+ "put": {
+ "tags": [
+ "Knowledge Bases"
+ ],
+ "summary": "Update Knowledge Base Info",
+ "description": "Update knowledge base information",
+ "operationId": "updateKnowledgeBase",
+ "parameters": [
+ {
+ "name": "kb_uuid",
+ "in": "path",
+ "required": true,
+ "schema": {
+ "type": "string"
+ },
+ "description": "Knowledge Base UUID"
+ }
+ ],
+ "requestBody": {
+ "required": true,
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "object",
+ "properties": {
+ "name": {
+ "type": "string"
+ },
+ "description": {
+ "type": "string"
+ }
+ }
+ }
+ }
+ }
+ },
+ "responses": {
+ "200": {
+ "description": "Update successful",
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "object",
+ "properties": {
+ "code": {
+ "type": "integer",
+ "example": 0
+ },
+ "msg": {
+ "type": "string",
+ "example": "ok"
+ },
+ "data": {
+ "type": "object"
+ }
+ }
+ }
+ }
+ }
+ }
+ },
+ "security": [
+ {
+ "ApiKeyAuth": []
+ },
+ {
+ "BearerAuth": []
+ }
+ ]
+ },
+ "delete": {
+ "tags": [
+ "Knowledge Bases"
+ ],
+ "summary": "Delete Knowledge Base",
+ "description": "Delete a specified knowledge base",
+ "operationId": "deleteKnowledgeBase",
+ "parameters": [
+ {
+ "name": "kb_uuid",
+ "in": "path",
+ "required": true,
+ "schema": {
+ "type": "string"
+ },
+ "description": "Knowledge Base UUID"
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "Deletion successful",
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "object",
+ "properties": {
+ "code": {
+ "type": "integer",
+ "example": 0
+ },
+ "msg": {
+ "type": "string",
+ "example": "ok"
+ },
+ "data": {
+ "type": "object"
+ }
+ }
+ }
+ }
+ }
+ }
+ },
+ "security": [
+ {
+ "ApiKeyAuth": []
+ },
+ {
+ "BearerAuth": []
+ }
+ ]
+ }
+ },
+ "/api/v1/knowledge/bases/{kb_uuid}/files": {
+ "get": {
+ "tags": [
+ "Knowledge Bases"
+ ],
+ "summary": "List Knowledge Base Files",
+ "description": "Get all files in the specified knowledge base",
+ "operationId": "listKnowledgeBaseFiles",
+ "parameters": [
+ {
+ "name": "kb_uuid",
+ "in": "path",
+ "required": true,
+ "schema": {
+ "type": "string"
+ },
+ "description": "Knowledge Base UUID"
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "成功",
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "object",
+ "properties": {
+ "code": {
+ "type": "integer",
+ "example": 0
+ },
+ "msg": {
+ "type": "string",
+ "example": "ok"
+ },
+ "data": {
+ "type": "object",
+ "properties": {
+ "files": {
+ "type": "array",
+ "items": {
+ "type": "object"
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ },
+ "security": [
+ {
+ "ApiKeyAuth": []
+ },
+ {
+ "BearerAuth": []
+ }
+ ]
+ },
+ "post": {
+ "tags": [
+ "Knowledge Bases"
+ ],
+ "summary": "Add File to Knowledge Base",
+ "description": "Add uploaded file to knowledge base for processing",
+ "operationId": "addFileToKnowledgeBase",
+ "parameters": [
+ {
+ "name": "kb_uuid",
+ "in": "path",
+ "required": true,
+ "schema": {
+ "type": "string"
+ },
+ "description": "Knowledge Base UUID"
+ }
+ ],
+ "requestBody": {
+ "required": true,
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "object",
+ "required": [
+ "file_id"
+ ],
+ "properties": {
+ "file_id": {
+ "type": "string",
+ "description": "File ID(从文件上传接口获取)"
+ }
+ }
+ },
+ "example": {
+ "file_id": "document_abc123.pdf"
+ }
+ }
+ }
+ },
+ "responses": {
+ "200": {
+ "description": "Addition successful",
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "object",
+ "properties": {
+ "code": {
+ "type": "integer",
+ "example": 0
+ },
+ "msg": {
+ "type": "string",
+ "example": "ok"
+ },
+ "data": {
+ "type": "object",
+ "properties": {
+ "task_id": {
+ "type": "string",
+ "description": "Processing task ID"
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ },
+ "security": [
+ {
+ "ApiKeyAuth": []
+ },
+ {
+ "BearerAuth": []
+ }
+ ]
+ }
+ },
+ "/api/v1/knowledge/bases/{kb_uuid}/files/{file_id}": {
+ "delete": {
+ "tags": [
+ "Knowledge Bases"
+ ],
+ "summary": "Delete File from Knowledge Base",
+ "description": "Delete file from the specified knowledge base",
+ "operationId": "deleteFileFromKnowledgeBase",
+ "parameters": [
+ {
+ "name": "kb_uuid",
+ "in": "path",
+ "required": true,
+ "schema": {
+ "type": "string"
+ },
+ "description": "Knowledge Base UUID"
+ },
+ {
+ "name": "file_id",
+ "in": "path",
+ "required": true,
+ "schema": {
+ "type": "string"
+ },
+ "description": "File ID"
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "Deletion successful",
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "object",
+ "properties": {
+ "code": {
+ "type": "integer",
+ "example": 0
+ },
+ "msg": {
+ "type": "string",
+ "example": "ok"
+ },
+ "data": {
+ "type": "object"
+ }
+ }
+ }
+ }
+ }
+ }
+ },
+ "security": [
+ {
+ "ApiKeyAuth": []
+ },
+ {
+ "BearerAuth": []
+ }
+ ]
+ }
+ },
+ "/api/v1/knowledge/bases/{kb_uuid}/retrieve": {
+ "post": {
+ "tags": [
+ "Knowledge Bases"
+ ],
+ "summary": "Retrieve Knowledge",
+ "description": "Search for relevant knowledge in the knowledge base",
+ "operationId": "retrieveKnowledge",
+ "parameters": [
+ {
+ "name": "kb_uuid",
+ "in": "path",
+ "required": true,
+ "schema": {
+ "type": "string"
+ },
+ "description": "Knowledge Base UUID"
+ }
+ ],
+ "requestBody": {
+ "required": true,
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "object",
+ "required": [
+ "query"
+ ],
+ "properties": {
+ "query": {
+ "type": "string",
+ "description": "Query text"
+ }
+ }
+ },
+ "example": {
+ "query": "如何使用 LangBot 创建机器人?"
+ }
+ }
+ }
+ },
+ "responses": {
+ "200": {
+ "description": "Retrieval successful",
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "object",
+ "properties": {
+ "code": {
+ "type": "integer",
+ "example": 0
+ },
+ "msg": {
+ "type": "string",
+ "example": "ok"
+ },
+ "data": {
+ "type": "object",
+ "properties": {
+ "results": {
+ "type": "array",
+ "items": {
+ "type": "object"
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ },
+ "security": [
+ {
+ "ApiKeyAuth": []
+ },
+ {
+ "BearerAuth": []
+ }
+ ]
+ }
}
},
"components": {
diff --git a/openapi/service-api-ja.json b/openapi/service-api-ja.json
new file mode 100644
index 000000000..0a197414a
--- /dev/null
+++ b/openapi/service-api-ja.json
@@ -0,0 +1,3259 @@
+{
+ "openapi": "3.0.3",
+ "info": {
+ "title": "LangBot API with API Key Authentication",
+ "description": "LangBot External Service API Documentation. These interfaces support API key authentication for external systems to programmatically access LangBot resources.\n\n**Authentication Methods:**\n- User Token (via `Authorization: Bearer `)\n- API Key (via `X-API-Key: ` or `Authorization: Bearer `)\n\nAll interfaces in this documentation support both authentication methods.\n",
+ "version": "4.4.1",
+ "contact": {
+ "name": "LangBot",
+ "url": "https://langbot.app"
+ },
+ "license": {
+ "name": "AGPL-3.0",
+ "url": "https://github.com/langbot-app/LangBot/blob/master/LICENSE"
+ }
+ },
+ "servers": [
+ {
+ "url": "http://localhost:5300",
+ "description": "Local development server"
+ }
+ ],
+ "tags": [
+ {
+ "name": "Models - LLM",
+ "description": "Large Language Model management operations"
+ },
+ {
+ "name": "Models - Embeddings",
+ "description": "Embedding model management operations"
+ },
+ {
+ "name": "Bots",
+ "description": "Bot instance management operations"
+ },
+ {
+ "name": "Pipelines",
+ "description": "Pipeline configuration management operations"
+ },
+ {
+ "name": "Knowledge Bases",
+ "description": "Built-in knowledge base management operations"
+ },
+ {
+ "name": "Files",
+ "description": "File upload and management operations"
+ },
+ {
+ "name": "Plugins",
+ "description": "Plugin installation and management operations"
+ }
+ ],
+ "security": [
+ {
+ "ApiKeyAuth": []
+ },
+ {
+ "BearerAuth": []
+ }
+ ],
+ "paths": {
+ "/api/v1/provider/models/llm": {
+ "get": {
+ "tags": [
+ "Models - LLM"
+ ],
+ "summary": "List all LLM models",
+ "description": "Retrieve a list of all configured LLM models",
+ "security": [
+ {
+ "ApiKeyAuth": []
+ },
+ {
+ "BearerAuth": []
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "Successful response",
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "object",
+ "properties": {
+ "code": {
+ "type": "integer",
+ "example": 0
+ },
+ "msg": {
+ "type": "string",
+ "example": "ok"
+ },
+ "data": {
+ "type": "object",
+ "properties": {
+ "models": {
+ "type": "array",
+ "items": {
+ "$ref": "#/components/schemas/LLMModel"
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ },
+ "401": {
+ "$ref": "#/components/responses/UnauthorizedError"
+ }
+ }
+ },
+ "post": {
+ "tags": [
+ "Models - LLM"
+ ],
+ "summary": "Create a new LLM model",
+ "description": "Create and configure a new LLM model",
+ "security": [
+ {
+ "ApiKeyAuth": []
+ },
+ {
+ "BearerAuth": []
+ }
+ ],
+ "requestBody": {
+ "required": true,
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/LLMModelCreate"
+ }
+ }
+ }
+ },
+ "responses": {
+ "200": {
+ "description": "Model created successfully",
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "object",
+ "properties": {
+ "code": {
+ "type": "integer",
+ "example": 0
+ },
+ "msg": {
+ "type": "string",
+ "example": "ok"
+ },
+ "data": {
+ "type": "object",
+ "properties": {
+ "uuid": {
+ "type": "string",
+ "format": "uuid",
+ "example": "550e8400-e29b-41d4-a716-446655440000"
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ },
+ "401": {
+ "$ref": "#/components/responses/UnauthorizedError"
+ },
+ "500": {
+ "$ref": "#/components/responses/InternalServerError"
+ }
+ }
+ }
+ },
+ "/api/v1/provider/models/llm/{model_uuid}": {
+ "get": {
+ "tags": [
+ "Models - LLM"
+ ],
+ "summary": "Get a specific LLM model",
+ "description": "Retrieve details of a specific LLM model by UUID",
+ "security": [
+ {
+ "ApiKeyAuth": []
+ },
+ {
+ "BearerAuth": []
+ }
+ ],
+ "parameters": [
+ {
+ "$ref": "#/components/parameters/ModelUUID"
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "Successful response",
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "object",
+ "properties": {
+ "code": {
+ "type": "integer",
+ "example": 0
+ },
+ "msg": {
+ "type": "string",
+ "example": "ok"
+ },
+ "data": {
+ "type": "object",
+ "properties": {
+ "model": {
+ "$ref": "#/components/schemas/LLMModel"
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ },
+ "401": {
+ "$ref": "#/components/responses/UnauthorizedError"
+ },
+ "404": {
+ "$ref": "#/components/responses/NotFoundError"
+ }
+ }
+ },
+ "put": {
+ "tags": [
+ "Models - LLM"
+ ],
+ "summary": "Update an LLM model",
+ "description": "Update the configuration of an existing LLM model",
+ "security": [
+ {
+ "ApiKeyAuth": []
+ },
+ {
+ "BearerAuth": []
+ }
+ ],
+ "parameters": [
+ {
+ "$ref": "#/components/parameters/ModelUUID"
+ }
+ ],
+ "requestBody": {
+ "required": true,
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/LLMModelUpdate"
+ }
+ }
+ }
+ },
+ "responses": {
+ "200": {
+ "description": "Model updated successfully",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/SuccessResponse"
+ }
+ }
+ }
+ },
+ "401": {
+ "$ref": "#/components/responses/UnauthorizedError"
+ },
+ "404": {
+ "$ref": "#/components/responses/NotFoundError"
+ }
+ }
+ },
+ "delete": {
+ "tags": [
+ "Models - LLM"
+ ],
+ "summary": "Delete an LLM model",
+ "description": "Remove an LLM model from the system",
+ "security": [
+ {
+ "ApiKeyAuth": []
+ },
+ {
+ "BearerAuth": []
+ }
+ ],
+ "parameters": [
+ {
+ "$ref": "#/components/parameters/ModelUUID"
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "Model deleted successfully",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/SuccessResponse"
+ }
+ }
+ }
+ },
+ "401": {
+ "$ref": "#/components/responses/UnauthorizedError"
+ },
+ "404": {
+ "$ref": "#/components/responses/NotFoundError"
+ }
+ }
+ }
+ },
+ "/api/v1/provider/models/llm/{model_uuid}/test": {
+ "post": {
+ "tags": [
+ "Models - LLM"
+ ],
+ "summary": "Test an LLM model",
+ "description": "Test the connectivity and functionality of an LLM model",
+ "security": [
+ {
+ "ApiKeyAuth": []
+ },
+ {
+ "BearerAuth": []
+ }
+ ],
+ "parameters": [
+ {
+ "$ref": "#/components/parameters/ModelUUID"
+ }
+ ],
+ "requestBody": {
+ "required": true,
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "object",
+ "description": "Model configuration to test"
+ }
+ }
+ }
+ },
+ "responses": {
+ "200": {
+ "description": "Model test successful",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/SuccessResponse"
+ }
+ }
+ }
+ },
+ "401": {
+ "$ref": "#/components/responses/UnauthorizedError"
+ },
+ "404": {
+ "$ref": "#/components/responses/NotFoundError"
+ },
+ "500": {
+ "$ref": "#/components/responses/InternalServerError"
+ }
+ }
+ }
+ },
+ "/api/v1/provider/models/embedding": {
+ "get": {
+ "tags": [
+ "Models - Embedding"
+ ],
+ "summary": "List all embedding models",
+ "description": "Retrieve a list of all configured embedding models",
+ "security": [
+ {
+ "ApiKeyAuth": []
+ },
+ {
+ "BearerAuth": []
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "Successful response",
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "object",
+ "properties": {
+ "code": {
+ "type": "integer",
+ "example": 0
+ },
+ "msg": {
+ "type": "string",
+ "example": "ok"
+ },
+ "data": {
+ "type": "object",
+ "properties": {
+ "models": {
+ "type": "array",
+ "items": {
+ "$ref": "#/components/schemas/EmbeddingModel"
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ },
+ "401": {
+ "$ref": "#/components/responses/UnauthorizedError"
+ }
+ }
+ },
+ "post": {
+ "tags": [
+ "Models - Embedding"
+ ],
+ "summary": "Create a new embedding model",
+ "description": "Create and configure a new embedding model",
+ "security": [
+ {
+ "ApiKeyAuth": []
+ },
+ {
+ "BearerAuth": []
+ }
+ ],
+ "requestBody": {
+ "required": true,
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/EmbeddingModelCreate"
+ }
+ }
+ }
+ },
+ "responses": {
+ "200": {
+ "description": "Model created successfully",
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "object",
+ "properties": {
+ "code": {
+ "type": "integer",
+ "example": 0
+ },
+ "msg": {
+ "type": "string",
+ "example": "ok"
+ },
+ "data": {
+ "type": "object",
+ "properties": {
+ "uuid": {
+ "type": "string",
+ "format": "uuid"
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ },
+ "401": {
+ "$ref": "#/components/responses/UnauthorizedError"
+ }
+ }
+ }
+ },
+ "/api/v1/provider/models/embedding/{model_uuid}": {
+ "get": {
+ "tags": [
+ "Models - Embedding"
+ ],
+ "summary": "Get a specific embedding model",
+ "security": [
+ {
+ "ApiKeyAuth": []
+ },
+ {
+ "BearerAuth": []
+ }
+ ],
+ "parameters": [
+ {
+ "$ref": "#/components/parameters/ModelUUID"
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "Successful response",
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "object",
+ "properties": {
+ "code": {
+ "type": "integer",
+ "example": 0
+ },
+ "msg": {
+ "type": "string",
+ "example": "ok"
+ },
+ "data": {
+ "type": "object",
+ "properties": {
+ "model": {
+ "$ref": "#/components/schemas/EmbeddingModel"
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ },
+ "401": {
+ "$ref": "#/components/responses/UnauthorizedError"
+ },
+ "404": {
+ "$ref": "#/components/responses/NotFoundError"
+ }
+ }
+ },
+ "put": {
+ "tags": [
+ "Models - Embedding"
+ ],
+ "summary": "Update an embedding model",
+ "security": [
+ {
+ "ApiKeyAuth": []
+ },
+ {
+ "BearerAuth": []
+ }
+ ],
+ "parameters": [
+ {
+ "$ref": "#/components/parameters/ModelUUID"
+ }
+ ],
+ "requestBody": {
+ "required": true,
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/EmbeddingModelUpdate"
+ }
+ }
+ }
+ },
+ "responses": {
+ "200": {
+ "description": "Model updated successfully",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/SuccessResponse"
+ }
+ }
+ }
+ },
+ "401": {
+ "$ref": "#/components/responses/UnauthorizedError"
+ },
+ "404": {
+ "$ref": "#/components/responses/NotFoundError"
+ }
+ }
+ },
+ "delete": {
+ "tags": [
+ "Models - Embedding"
+ ],
+ "summary": "Delete an embedding model",
+ "security": [
+ {
+ "ApiKeyAuth": []
+ },
+ {
+ "BearerAuth": []
+ }
+ ],
+ "parameters": [
+ {
+ "$ref": "#/components/parameters/ModelUUID"
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "Model deleted successfully",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/SuccessResponse"
+ }
+ }
+ }
+ },
+ "401": {
+ "$ref": "#/components/responses/UnauthorizedError"
+ },
+ "404": {
+ "$ref": "#/components/responses/NotFoundError"
+ }
+ }
+ }
+ },
+ "/api/v1/provider/models/embedding/{model_uuid}/test": {
+ "post": {
+ "tags": [
+ "Models - Embedding"
+ ],
+ "summary": "Test an embedding model",
+ "security": [
+ {
+ "ApiKeyAuth": []
+ },
+ {
+ "BearerAuth": []
+ }
+ ],
+ "parameters": [
+ {
+ "$ref": "#/components/parameters/ModelUUID"
+ }
+ ],
+ "requestBody": {
+ "required": true,
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "object"
+ }
+ }
+ }
+ },
+ "responses": {
+ "200": {
+ "description": "Model test successful",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/SuccessResponse"
+ }
+ }
+ }
+ },
+ "401": {
+ "$ref": "#/components/responses/UnauthorizedError"
+ },
+ "404": {
+ "$ref": "#/components/responses/NotFoundError"
+ }
+ }
+ }
+ },
+ "/api/v1/platform/bots": {
+ "get": {
+ "tags": [
+ "Bots"
+ ],
+ "summary": "List all bots",
+ "description": "Retrieve a list of all configured bot instances",
+ "security": [
+ {
+ "ApiKeyAuth": []
+ },
+ {
+ "BearerAuth": []
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "Successful response",
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "object",
+ "properties": {
+ "code": {
+ "type": "integer",
+ "example": 0
+ },
+ "msg": {
+ "type": "string",
+ "example": "ok"
+ },
+ "data": {
+ "type": "object",
+ "properties": {
+ "bots": {
+ "type": "array",
+ "items": {
+ "$ref": "#/components/schemas/Bot"
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ },
+ "401": {
+ "$ref": "#/components/responses/UnauthorizedError"
+ }
+ }
+ },
+ "post": {
+ "tags": [
+ "Bots"
+ ],
+ "summary": "Create a new bot",
+ "description": "Create and configure a new bot instance",
+ "security": [
+ {
+ "ApiKeyAuth": []
+ },
+ {
+ "BearerAuth": []
+ }
+ ],
+ "requestBody": {
+ "required": true,
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/BotCreate"
+ }
+ }
+ }
+ },
+ "responses": {
+ "200": {
+ "description": "Bot created successfully",
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "object",
+ "properties": {
+ "code": {
+ "type": "integer",
+ "example": 0
+ },
+ "msg": {
+ "type": "string",
+ "example": "ok"
+ },
+ "data": {
+ "type": "object",
+ "properties": {
+ "uuid": {
+ "type": "string",
+ "format": "uuid"
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ },
+ "401": {
+ "$ref": "#/components/responses/UnauthorizedError"
+ }
+ }
+ }
+ },
+ "/api/v1/platform/bots/{bot_uuid}": {
+ "get": {
+ "tags": [
+ "Bots"
+ ],
+ "summary": "Get a specific bot",
+ "description": "Retrieve details of a specific bot instance",
+ "security": [
+ {
+ "ApiKeyAuth": []
+ },
+ {
+ "BearerAuth": []
+ }
+ ],
+ "parameters": [
+ {
+ "name": "bot_uuid",
+ "in": "path",
+ "required": true,
+ "schema": {
+ "type": "string",
+ "format": "uuid"
+ },
+ "description": "Bot UUID"
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "Successful response",
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "object",
+ "properties": {
+ "code": {
+ "type": "integer",
+ "example": 0
+ },
+ "msg": {
+ "type": "string",
+ "example": "ok"
+ },
+ "data": {
+ "type": "object",
+ "properties": {
+ "bot": {
+ "$ref": "#/components/schemas/Bot"
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ },
+ "401": {
+ "$ref": "#/components/responses/UnauthorizedError"
+ },
+ "404": {
+ "$ref": "#/components/responses/NotFoundError"
+ }
+ }
+ },
+ "put": {
+ "tags": [
+ "Bots"
+ ],
+ "summary": "Update a bot",
+ "description": "Update the configuration of an existing bot instance",
+ "security": [
+ {
+ "ApiKeyAuth": []
+ },
+ {
+ "BearerAuth": []
+ }
+ ],
+ "parameters": [
+ {
+ "name": "bot_uuid",
+ "in": "path",
+ "required": true,
+ "schema": {
+ "type": "string",
+ "format": "uuid"
+ }
+ }
+ ],
+ "requestBody": {
+ "required": true,
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/BotUpdate"
+ }
+ }
+ }
+ },
+ "responses": {
+ "200": {
+ "description": "Bot updated successfully",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/SuccessResponse"
+ }
+ }
+ }
+ },
+ "401": {
+ "$ref": "#/components/responses/UnauthorizedError"
+ },
+ "404": {
+ "$ref": "#/components/responses/NotFoundError"
+ }
+ }
+ },
+ "delete": {
+ "tags": [
+ "Bots"
+ ],
+ "summary": "Delete a bot",
+ "description": "Remove a bot instance from the system",
+ "security": [
+ {
+ "ApiKeyAuth": []
+ },
+ {
+ "BearerAuth": []
+ }
+ ],
+ "parameters": [
+ {
+ "name": "bot_uuid",
+ "in": "path",
+ "required": true,
+ "schema": {
+ "type": "string",
+ "format": "uuid"
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "Bot deleted successfully",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/SuccessResponse"
+ }
+ }
+ }
+ },
+ "401": {
+ "$ref": "#/components/responses/UnauthorizedError"
+ },
+ "404": {
+ "$ref": "#/components/responses/NotFoundError"
+ }
+ }
+ }
+ },
+ "/api/v1/platform/bots/{bot_uuid}/logs": {
+ "post": {
+ "tags": [
+ "Bots"
+ ],
+ "summary": "Get bot event logs",
+ "description": "Retrieve event logs for a specific bot",
+ "security": [
+ {
+ "ApiKeyAuth": []
+ },
+ {
+ "BearerAuth": []
+ }
+ ],
+ "parameters": [
+ {
+ "name": "bot_uuid",
+ "in": "path",
+ "required": true,
+ "schema": {
+ "type": "string",
+ "format": "uuid"
+ }
+ }
+ ],
+ "requestBody": {
+ "required": true,
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "object",
+ "properties": {
+ "from_index": {
+ "type": "integer",
+ "default": -1,
+ "description": "Starting index for logs (-1 for latest)"
+ },
+ "max_count": {
+ "type": "integer",
+ "default": 10,
+ "description": "Maximum number of logs to retrieve"
+ }
+ }
+ }
+ }
+ }
+ },
+ "responses": {
+ "200": {
+ "description": "Successful response",
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "object",
+ "properties": {
+ "code": {
+ "type": "integer",
+ "example": 0
+ },
+ "msg": {
+ "type": "string",
+ "example": "ok"
+ },
+ "data": {
+ "type": "object",
+ "properties": {
+ "logs": {
+ "type": "array",
+ "items": {
+ "type": "object"
+ }
+ },
+ "total_count": {
+ "type": "integer"
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ },
+ "401": {
+ "$ref": "#/components/responses/UnauthorizedError"
+ }
+ }
+ }
+ },
+ "/api/v1/pipelines": {
+ "get": {
+ "tags": [
+ "Pipelines"
+ ],
+ "summary": "List all pipelines",
+ "description": "Retrieve a list of all configured pipelines",
+ "security": [
+ {
+ "ApiKeyAuth": []
+ },
+ {
+ "BearerAuth": []
+ }
+ ],
+ "parameters": [
+ {
+ "name": "sort_by",
+ "in": "query",
+ "schema": {
+ "type": "string",
+ "default": "created_at"
+ },
+ "description": "Field to sort by"
+ },
+ {
+ "name": "sort_order",
+ "in": "query",
+ "schema": {
+ "type": "string",
+ "enum": [
+ "ASC",
+ "DESC"
+ ],
+ "default": "DESC"
+ },
+ "description": "Sort order"
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "Successful response",
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "object",
+ "properties": {
+ "code": {
+ "type": "integer",
+ "example": 0
+ },
+ "msg": {
+ "type": "string",
+ "example": "ok"
+ },
+ "data": {
+ "type": "object",
+ "properties": {
+ "pipelines": {
+ "type": "array",
+ "items": {
+ "$ref": "#/components/schemas/Pipeline"
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ },
+ "401": {
+ "$ref": "#/components/responses/UnauthorizedError"
+ }
+ }
+ },
+ "post": {
+ "tags": [
+ "Pipelines"
+ ],
+ "summary": "Create a new pipeline",
+ "description": "Create and configure a new pipeline",
+ "security": [
+ {
+ "ApiKeyAuth": []
+ },
+ {
+ "BearerAuth": []
+ }
+ ],
+ "requestBody": {
+ "required": true,
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/PipelineCreate"
+ }
+ }
+ }
+ },
+ "responses": {
+ "200": {
+ "description": "Pipeline created successfully",
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "object",
+ "properties": {
+ "code": {
+ "type": "integer",
+ "example": 0
+ },
+ "msg": {
+ "type": "string",
+ "example": "ok"
+ },
+ "data": {
+ "type": "object",
+ "properties": {
+ "uuid": {
+ "type": "string",
+ "format": "uuid"
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ },
+ "401": {
+ "$ref": "#/components/responses/UnauthorizedError"
+ }
+ }
+ }
+ },
+ "/api/v1/pipelines/_/metadata": {
+ "get": {
+ "tags": [
+ "Pipelines"
+ ],
+ "summary": "Get pipeline metadata",
+ "description": "Retrieve metadata and configuration options for pipelines",
+ "security": [
+ {
+ "ApiKeyAuth": []
+ },
+ {
+ "BearerAuth": []
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "Successful response",
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "object",
+ "properties": {
+ "code": {
+ "type": "integer",
+ "example": 0
+ },
+ "msg": {
+ "type": "string",
+ "example": "ok"
+ },
+ "data": {
+ "type": "object",
+ "properties": {
+ "configs": {
+ "type": "object"
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ },
+ "401": {
+ "$ref": "#/components/responses/UnauthorizedError"
+ }
+ }
+ }
+ },
+ "/api/v1/pipelines/{pipeline_uuid}": {
+ "get": {
+ "tags": [
+ "Pipelines"
+ ],
+ "summary": "Get a specific pipeline",
+ "description": "Retrieve details of a specific pipeline",
+ "security": [
+ {
+ "ApiKeyAuth": []
+ },
+ {
+ "BearerAuth": []
+ }
+ ],
+ "parameters": [
+ {
+ "name": "pipeline_uuid",
+ "in": "path",
+ "required": true,
+ "schema": {
+ "type": "string",
+ "format": "uuid"
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "Successful response",
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "object",
+ "properties": {
+ "code": {
+ "type": "integer",
+ "example": 0
+ },
+ "msg": {
+ "type": "string",
+ "example": "ok"
+ },
+ "data": {
+ "type": "object",
+ "properties": {
+ "pipeline": {
+ "$ref": "#/components/schemas/Pipeline"
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ },
+ "401": {
+ "$ref": "#/components/responses/UnauthorizedError"
+ },
+ "404": {
+ "$ref": "#/components/responses/NotFoundError"
+ }
+ }
+ },
+ "put": {
+ "tags": [
+ "Pipelines"
+ ],
+ "summary": "Update a pipeline",
+ "description": "Update the configuration of an existing pipeline",
+ "security": [
+ {
+ "ApiKeyAuth": []
+ },
+ {
+ "BearerAuth": []
+ }
+ ],
+ "parameters": [
+ {
+ "name": "pipeline_uuid",
+ "in": "path",
+ "required": true,
+ "schema": {
+ "type": "string",
+ "format": "uuid"
+ }
+ }
+ ],
+ "requestBody": {
+ "required": true,
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/PipelineUpdate"
+ }
+ }
+ }
+ },
+ "responses": {
+ "200": {
+ "description": "Pipeline updated successfully",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/SuccessResponse"
+ }
+ }
+ }
+ },
+ "401": {
+ "$ref": "#/components/responses/UnauthorizedError"
+ },
+ "404": {
+ "$ref": "#/components/responses/NotFoundError"
+ }
+ }
+ },
+ "delete": {
+ "tags": [
+ "Pipelines"
+ ],
+ "summary": "Delete a pipeline",
+ "description": "Remove a pipeline from the system",
+ "security": [
+ {
+ "ApiKeyAuth": []
+ },
+ {
+ "BearerAuth": []
+ }
+ ],
+ "parameters": [
+ {
+ "name": "pipeline_uuid",
+ "in": "path",
+ "required": true,
+ "schema": {
+ "type": "string",
+ "format": "uuid"
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "Pipeline deleted successfully",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/SuccessResponse"
+ }
+ }
+ }
+ },
+ "401": {
+ "$ref": "#/components/responses/UnauthorizedError"
+ },
+ "404": {
+ "$ref": "#/components/responses/NotFoundError"
+ }
+ }
+ }
+ },
+ "/api/v1/pipelines/{pipeline_uuid}/extensions": {
+ "get": {
+ "tags": [
+ "Pipelines"
+ ],
+ "summary": "Get pipeline extensions",
+ "description": "Retrieve extensions and plugins configured for a pipeline",
+ "security": [
+ {
+ "ApiKeyAuth": []
+ },
+ {
+ "BearerAuth": []
+ }
+ ],
+ "parameters": [
+ {
+ "name": "pipeline_uuid",
+ "in": "path",
+ "required": true,
+ "schema": {
+ "type": "string",
+ "format": "uuid"
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "Successful response",
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "object",
+ "properties": {
+ "code": {
+ "type": "integer",
+ "example": 0
+ },
+ "msg": {
+ "type": "string",
+ "example": "ok"
+ },
+ "data": {
+ "type": "object"
+ }
+ }
+ }
+ }
+ }
+ },
+ "401": {
+ "$ref": "#/components/responses/UnauthorizedError"
+ },
+ "404": {
+ "$ref": "#/components/responses/NotFoundError"
+ }
+ }
+ },
+ "put": {
+ "tags": [
+ "Pipelines"
+ ],
+ "summary": "Update pipeline extensions",
+ "description": "Update the extensions configuration for a pipeline",
+ "security": [
+ {
+ "ApiKeyAuth": []
+ },
+ {
+ "BearerAuth": []
+ }
+ ],
+ "parameters": [
+ {
+ "name": "pipeline_uuid",
+ "in": "path",
+ "required": true,
+ "schema": {
+ "type": "string",
+ "format": "uuid"
+ }
+ }
+ ],
+ "requestBody": {
+ "required": true,
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "object"
+ }
+ }
+ }
+ },
+ "responses": {
+ "200": {
+ "description": "Extensions updated successfully",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/SuccessResponse"
+ }
+ }
+ }
+ },
+ "401": {
+ "$ref": "#/components/responses/UnauthorizedError"
+ },
+ "404": {
+ "$ref": "#/components/responses/NotFoundError"
+ }
+ }
+ }
+ },
+ "/api/v1/files/images": {
+ "post": {
+ "tags": [
+ "Files"
+ ],
+ "summary": "Upload Image",
+ "description": "Upload image file (supports jpg, jpeg, png, gif, webp, max 10MB)",
+ "operationId": "uploadImage",
+ "requestBody": {
+ "required": true,
+ "content": {
+ "multipart/form-data": {
+ "schema": {
+ "type": "object",
+ "required": [
+ "file"
+ ],
+ "properties": {
+ "file": {
+ "type": "string",
+ "format": "binary",
+ "description": "Image file"
+ }
+ }
+ }
+ }
+ }
+ },
+ "responses": {
+ "200": {
+ "description": "Upload successful",
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "object",
+ "properties": {
+ "code": {
+ "type": "integer",
+ "example": 0
+ },
+ "msg": {
+ "type": "string",
+ "example": "ok"
+ },
+ "data": {
+ "type": "object",
+ "properties": {
+ "file_key": {
+ "type": "string",
+ "description": "File key"
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ },
+ "security": [
+ {
+ "BearerAuth": []
+ }
+ ]
+ }
+ },
+ "/api/v1/files/documents": {
+ "post": {
+ "tags": [
+ "Files"
+ ],
+ "summary": "Upload Document",
+ "description": "Upload document file (max 10MB)",
+ "operationId": "uploadDocument",
+ "requestBody": {
+ "required": true,
+ "content": {
+ "multipart/form-data": {
+ "schema": {
+ "type": "object",
+ "required": [
+ "file"
+ ],
+ "properties": {
+ "file": {
+ "type": "string",
+ "format": "binary",
+ "description": "Document file"
+ }
+ }
+ }
+ }
+ }
+ },
+ "responses": {
+ "200": {
+ "description": "Upload successful",
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "object",
+ "properties": {
+ "code": {
+ "type": "integer",
+ "example": 0
+ },
+ "msg": {
+ "type": "string",
+ "example": "ok"
+ },
+ "data": {
+ "type": "object",
+ "properties": {
+ "file_id": {
+ "type": "string",
+ "description": "File ID"
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ },
+ "security": [
+ {
+ "BearerAuth": []
+ }
+ ]
+ }
+ },
+ "/api/v1/plugins": {
+ "get": {
+ "tags": [
+ "Plugins"
+ ],
+ "summary": "List All Plugins",
+ "description": "Get list of all installed plugins",
+ "operationId": "listPlugins",
+ "responses": {
+ "200": {
+ "description": "Success",
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "object",
+ "properties": {
+ "code": {
+ "type": "integer",
+ "example": 0
+ },
+ "msg": {
+ "type": "string",
+ "example": "ok"
+ },
+ "data": {
+ "type": "object",
+ "properties": {
+ "plugins": {
+ "type": "array",
+ "items": {
+ "type": "object"
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ },
+ "security": [
+ {
+ "BearerAuth": []
+ }
+ ]
+ }
+ },
+ "/api/v1/plugins/{author}/{plugin_name}": {
+ "get": {
+ "tags": [
+ "Plugins"
+ ],
+ "summary": "Get Plugin Details",
+ "description": "Get details of a specific plugin",
+ "operationId": "getPlugin",
+ "parameters": [
+ {
+ "name": "author",
+ "in": "path",
+ "required": true,
+ "schema": {
+ "type": "string"
+ },
+ "description": "Plugin author"
+ },
+ {
+ "name": "plugin_name",
+ "in": "path",
+ "required": true,
+ "schema": {
+ "type": "string"
+ },
+ "description": "Plugin name"
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "Success",
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "object",
+ "properties": {
+ "code": {
+ "type": "integer",
+ "example": 0
+ },
+ "msg": {
+ "type": "string",
+ "example": "ok"
+ },
+ "data": {
+ "type": "object",
+ "properties": {
+ "plugin": {
+ "type": "object"
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ },
+ "security": [
+ {
+ "BearerAuth": []
+ }
+ ]
+ },
+ "delete": {
+ "tags": [
+ "Plugins"
+ ],
+ "summary": "Delete Plugin",
+ "description": "Uninstall the specified plugin",
+ "operationId": "deletePlugin",
+ "parameters": [
+ {
+ "name": "author",
+ "in": "path",
+ "required": true,
+ "schema": {
+ "type": "string"
+ },
+ "description": "Plugin author"
+ },
+ {
+ "name": "plugin_name",
+ "in": "path",
+ "required": true,
+ "schema": {
+ "type": "string"
+ },
+ "description": "Plugin name"
+ },
+ {
+ "name": "delete_data",
+ "in": "query",
+ "required": false,
+ "schema": {
+ "type": "boolean",
+ "default": false
+ },
+ "description": "Whether to delete plugin data"
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "Deletion task created",
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "object",
+ "properties": {
+ "code": {
+ "type": "integer",
+ "example": 0
+ },
+ "msg": {
+ "type": "string",
+ "example": "ok"
+ },
+ "data": {
+ "type": "object",
+ "properties": {
+ "task_id": {
+ "type": "string"
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ },
+ "security": [
+ {
+ "BearerAuth": []
+ }
+ ]
+ }
+ },
+ "/api/v1/plugins/install/local": {
+ "post": {
+ "tags": [
+ "Plugins"
+ ],
+ "summary": "Install Plugin from Local File",
+ "description": "Upload and install plugin package file",
+ "operationId": "installPluginLocal",
+ "requestBody": {
+ "required": true,
+ "content": {
+ "multipart/form-data": {
+ "schema": {
+ "type": "object",
+ "required": [
+ "file"
+ ],
+ "properties": {
+ "file": {
+ "type": "string",
+ "format": "binary",
+ "description": "Plugin package file (.lbpkg format)"
+ }
+ }
+ }
+ }
+ }
+ },
+ "responses": {
+ "200": {
+ "description": "Installation task created",
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "object",
+ "properties": {
+ "code": {
+ "type": "integer",
+ "example": 0
+ },
+ "msg": {
+ "type": "string",
+ "example": "ok"
+ },
+ "data": {
+ "type": "object",
+ "properties": {
+ "task_id": {
+ "type": "string"
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ },
+ "security": [
+ {
+ "BearerAuth": []
+ }
+ ]
+ }
+ },
+ "/api/v1/plugins/install/github": {
+ "post": {
+ "tags": [
+ "Plugins"
+ ],
+ "summary": "Install Plugin from GitHub",
+ "description": "Install plugin from GitHub Release",
+ "operationId": "installPluginGitHub",
+ "requestBody": {
+ "required": true,
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "object",
+ "required": [
+ "asset_url"
+ ],
+ "properties": {
+ "asset_url": {
+ "type": "string",
+ "description": "GitHub Release asset download URL"
+ },
+ "owner": {
+ "type": "string",
+ "description": "Repository owner"
+ },
+ "repo": {
+ "type": "string",
+ "description": "Repository name"
+ },
+ "release_tag": {
+ "type": "string",
+ "description": "Release tag"
+ }
+ }
+ }
+ }
+ }
+ },
+ "responses": {
+ "200": {
+ "description": "Installation task created",
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "object",
+ "properties": {
+ "code": {
+ "type": "integer",
+ "example": 0
+ },
+ "msg": {
+ "type": "string",
+ "example": "ok"
+ },
+ "data": {
+ "type": "object",
+ "properties": {
+ "task_id": {
+ "type": "string"
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ },
+ "security": [
+ {
+ "BearerAuth": []
+ }
+ ]
+ }
+ },
+ "/api/v1/plugins/install/marketplace": {
+ "post": {
+ "tags": [
+ "Plugins"
+ ],
+ "summary": "Install from Marketplace",
+ "description": "Install plugin from LangBot plugin marketplace",
+ "operationId": "installPluginMarketplace",
+ "requestBody": {
+ "required": true,
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "object",
+ "properties": {
+ "plugin_id": {
+ "type": "string",
+ "description": "Plugin ID"
+ }
+ }
+ }
+ }
+ }
+ },
+ "responses": {
+ "200": {
+ "description": "Installation task created",
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "object",
+ "properties": {
+ "code": {
+ "type": "integer",
+ "example": 0
+ },
+ "msg": {
+ "type": "string",
+ "example": "ok"
+ },
+ "data": {
+ "type": "object",
+ "properties": {
+ "task_id": {
+ "type": "string"
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ },
+ "security": [
+ {
+ "BearerAuth": []
+ }
+ ]
+ }
+ },
+ "/api/v1/platform/bots/{bot_uuid}/send_message": {
+ "post": {
+ "tags": [
+ "Bots"
+ ],
+ "summary": "Send Message",
+ "description": "Send a message to a specific target via the specified bot",
+ "operationId": "sendMessage",
+ "parameters": [
+ {
+ "name": "bot_uuid",
+ "in": "path",
+ "required": true,
+ "schema": {
+ "type": "string"
+ },
+ "description": "Bot UUID"
+ }
+ ],
+ "requestBody": {
+ "required": true,
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "object",
+ "required": [
+ "target_type",
+ "target_id",
+ "message_chain"
+ ],
+ "properties": {
+ "target_type": {
+ "type": "string",
+ "enum": [
+ "person",
+ "group"
+ ],
+ "description": "Target type"
+ },
+ "target_id": {
+ "type": "string",
+ "description": "Target ID (user ID or group ID)"
+ },
+ "message_chain": {
+ "type": "array",
+ "items": {
+ "type": "object"
+ },
+ "description": "Message chain (array of MessageComponent)"
+ }
+ }
+ },
+ "examples": {
+ "Text Message": {
+ "value": {
+ "target_type": "group",
+ "target_id": "123456789",
+ "message_chain": [
+ {
+ "type": "Plain",
+ "text": "Hello, World!"
+ }
+ ]
+ }
+ },
+ "Text and Image": {
+ "value": {
+ "target_type": "person",
+ "target_id": "987654321",
+ "message_chain": [
+ {
+ "type": "Plain",
+ "text": "Check out this image:"
+ },
+ {
+ "type": "Image",
+ "url": "https://example.com/image.jpg"
+ }
+ ]
+ }
+ }
+ }
+ }
+ }
+ },
+ "responses": {
+ "200": {
+ "description": "Message sent successfully",
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "object",
+ "properties": {
+ "code": {
+ "type": "integer",
+ "example": 0
+ },
+ "msg": {
+ "type": "string",
+ "example": "ok"
+ },
+ "data": {
+ "type": "object",
+ "properties": {
+ "sent": {
+ "type": "boolean",
+ "example": true
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ },
+ "400": {
+ "description": "Bad request",
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "object",
+ "properties": {
+ "code": {
+ "type": "integer",
+ "example": -1
+ },
+ "msg": {
+ "type": "string",
+ "example": "target_type is required"
+ }
+ }
+ }
+ }
+ }
+ },
+ "500": {
+ "description": "Failed to send",
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "object",
+ "properties": {
+ "code": {
+ "type": "integer",
+ "example": -1
+ },
+ "msg": {
+ "type": "string",
+ "example": "Failed to send message: Bot not found"
+ }
+ }
+ }
+ }
+ }
+ }
+ },
+ "security": [
+ {
+ "ApiKeyAuth": []
+ }
+ ]
+ }
+ },
+ "/api/v1/knowledge/bases": {
+ "get": {
+ "tags": [
+ "Knowledge Bases"
+ ],
+ "summary": "Get All Knowledge Bases",
+ "description": "Get all builtin knowledge bases",
+ "operationId": "listKnowledgeBases",
+ "responses": {
+ "200": {
+ "description": "Success",
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "object",
+ "properties": {
+ "code": {
+ "type": "integer",
+ "example": 0
+ },
+ "msg": {
+ "type": "string",
+ "example": "ok"
+ },
+ "data": {
+ "type": "object",
+ "properties": {
+ "bases": {
+ "type": "array",
+ "items": {
+ "type": "object"
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ },
+ "security": [
+ {
+ "ApiKeyAuth": []
+ },
+ {
+ "BearerAuth": []
+ }
+ ]
+ },
+ "post": {
+ "tags": [
+ "Knowledge Bases"
+ ],
+ "summary": "Create Knowledge Base",
+ "description": "Create a new knowledge base",
+ "operationId": "createKnowledgeBase",
+ "requestBody": {
+ "required": true,
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "object",
+ "required": [
+ "name",
+ "embedding_model_uuid"
+ ],
+ "properties": {
+ "name": {
+ "type": "string",
+ "description": "name"
+ },
+ "description": {
+ "type": "string",
+ "description": "description"
+ },
+ "embedding_model_uuid": {
+ "type": "string",
+ "description": "Embedding model UUID"
+ }
+ }
+ },
+ "example": {
+ "name": "技术文档库",
+ "description": "存储技术文档和API参考",
+ "embedding_model_uuid": "uuid-of-embedding-model"
+ }
+ }
+ }
+ },
+ "responses": {
+ "200": {
+ "description": "Knowledge base created successfully",
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "object",
+ "properties": {
+ "code": {
+ "type": "integer",
+ "example": 0
+ },
+ "msg": {
+ "type": "string",
+ "example": "ok"
+ },
+ "data": {
+ "type": "object",
+ "properties": {
+ "uuid": {
+ "type": "string"
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ },
+ "security": [
+ {
+ "ApiKeyAuth": []
+ },
+ {
+ "BearerAuth": []
+ }
+ ]
+ }
+ },
+ "/api/v1/knowledge/bases/{kb_uuid}": {
+ "get": {
+ "tags": [
+ "Knowledge Bases"
+ ],
+ "summary": "Get Knowledge Base Details",
+ "description": "Get details info of specified knowledge base",
+ "operationId": "getKnowledgeBase",
+ "parameters": [
+ {
+ "name": "kb_uuid",
+ "in": "path",
+ "required": true,
+ "schema": {
+ "type": "string"
+ },
+ "description": "Knowledge Base UUID"
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "Success",
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "object",
+ "properties": {
+ "code": {
+ "type": "integer",
+ "example": 0
+ },
+ "msg": {
+ "type": "string",
+ "example": "ok"
+ },
+ "data": {
+ "type": "object",
+ "properties": {
+ "base": {
+ "type": "object"
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ },
+ "404": {
+ "description": "Knowledge base not found",
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "object",
+ "properties": {
+ "code": {
+ "type": "integer",
+ "example": -1
+ },
+ "msg": {
+ "type": "string",
+ "example": "knowledge base not found"
+ }
+ }
+ }
+ }
+ }
+ }
+ },
+ "security": [
+ {
+ "ApiKeyAuth": []
+ },
+ {
+ "BearerAuth": []
+ }
+ ]
+ },
+ "put": {
+ "tags": [
+ "Knowledge Bases"
+ ],
+ "summary": "Update Knowledge Base Info",
+ "description": "Update knowledge base information",
+ "operationId": "updateKnowledgeBase",
+ "parameters": [
+ {
+ "name": "kb_uuid",
+ "in": "path",
+ "required": true,
+ "schema": {
+ "type": "string"
+ },
+ "description": "Knowledge Base UUID"
+ }
+ ],
+ "requestBody": {
+ "required": true,
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "object",
+ "properties": {
+ "name": {
+ "type": "string"
+ },
+ "description": {
+ "type": "string"
+ }
+ }
+ }
+ }
+ }
+ },
+ "responses": {
+ "200": {
+ "description": "Update successful",
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "object",
+ "properties": {
+ "code": {
+ "type": "integer",
+ "example": 0
+ },
+ "msg": {
+ "type": "string",
+ "example": "ok"
+ },
+ "data": {
+ "type": "object"
+ }
+ }
+ }
+ }
+ }
+ }
+ },
+ "security": [
+ {
+ "ApiKeyAuth": []
+ },
+ {
+ "BearerAuth": []
+ }
+ ]
+ },
+ "delete": {
+ "tags": [
+ "Knowledge Bases"
+ ],
+ "summary": "Delete Knowledge Base",
+ "description": "Delete a specified knowledge base",
+ "operationId": "deleteKnowledgeBase",
+ "parameters": [
+ {
+ "name": "kb_uuid",
+ "in": "path",
+ "required": true,
+ "schema": {
+ "type": "string"
+ },
+ "description": "Knowledge Base UUID"
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "Deletion successful",
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "object",
+ "properties": {
+ "code": {
+ "type": "integer",
+ "example": 0
+ },
+ "msg": {
+ "type": "string",
+ "example": "ok"
+ },
+ "data": {
+ "type": "object"
+ }
+ }
+ }
+ }
+ }
+ }
+ },
+ "security": [
+ {
+ "ApiKeyAuth": []
+ },
+ {
+ "BearerAuth": []
+ }
+ ]
+ }
+ },
+ "/api/v1/knowledge/bases/{kb_uuid}/files": {
+ "get": {
+ "tags": [
+ "Knowledge Bases"
+ ],
+ "summary": "List Knowledge Base Files",
+ "description": "Get all files in the specified knowledge base",
+ "operationId": "listKnowledgeBaseFiles",
+ "parameters": [
+ {
+ "name": "kb_uuid",
+ "in": "path",
+ "required": true,
+ "schema": {
+ "type": "string"
+ },
+ "description": "Knowledge Base UUID"
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "成功",
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "object",
+ "properties": {
+ "code": {
+ "type": "integer",
+ "example": 0
+ },
+ "msg": {
+ "type": "string",
+ "example": "ok"
+ },
+ "data": {
+ "type": "object",
+ "properties": {
+ "files": {
+ "type": "array",
+ "items": {
+ "type": "object"
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ },
+ "security": [
+ {
+ "ApiKeyAuth": []
+ },
+ {
+ "BearerAuth": []
+ }
+ ]
+ },
+ "post": {
+ "tags": [
+ "Knowledge Bases"
+ ],
+ "summary": "Add File to Knowledge Base",
+ "description": "Add uploaded file to knowledge base for processing",
+ "operationId": "addFileToKnowledgeBase",
+ "parameters": [
+ {
+ "name": "kb_uuid",
+ "in": "path",
+ "required": true,
+ "schema": {
+ "type": "string"
+ },
+ "description": "Knowledge Base UUID"
+ }
+ ],
+ "requestBody": {
+ "required": true,
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "object",
+ "required": [
+ "file_id"
+ ],
+ "properties": {
+ "file_id": {
+ "type": "string",
+ "description": "File ID(从文件上传接口获取)"
+ }
+ }
+ },
+ "example": {
+ "file_id": "document_abc123.pdf"
+ }
+ }
+ }
+ },
+ "responses": {
+ "200": {
+ "description": "Addition successful",
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "object",
+ "properties": {
+ "code": {
+ "type": "integer",
+ "example": 0
+ },
+ "msg": {
+ "type": "string",
+ "example": "ok"
+ },
+ "data": {
+ "type": "object",
+ "properties": {
+ "task_id": {
+ "type": "string",
+ "description": "Processing task ID"
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ },
+ "security": [
+ {
+ "ApiKeyAuth": []
+ },
+ {
+ "BearerAuth": []
+ }
+ ]
+ }
+ },
+ "/api/v1/knowledge/bases/{kb_uuid}/files/{file_id}": {
+ "delete": {
+ "tags": [
+ "Knowledge Bases"
+ ],
+ "summary": "Delete File from Knowledge Base",
+ "description": "Delete file from the specified knowledge base",
+ "operationId": "deleteFileFromKnowledgeBase",
+ "parameters": [
+ {
+ "name": "kb_uuid",
+ "in": "path",
+ "required": true,
+ "schema": {
+ "type": "string"
+ },
+ "description": "Knowledge Base UUID"
+ },
+ {
+ "name": "file_id",
+ "in": "path",
+ "required": true,
+ "schema": {
+ "type": "string"
+ },
+ "description": "File ID"
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "Deletion successful",
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "object",
+ "properties": {
+ "code": {
+ "type": "integer",
+ "example": 0
+ },
+ "msg": {
+ "type": "string",
+ "example": "ok"
+ },
+ "data": {
+ "type": "object"
+ }
+ }
+ }
+ }
+ }
+ }
+ },
+ "security": [
+ {
+ "ApiKeyAuth": []
+ },
+ {
+ "BearerAuth": []
+ }
+ ]
+ }
+ },
+ "/api/v1/knowledge/bases/{kb_uuid}/retrieve": {
+ "post": {
+ "tags": [
+ "Knowledge Bases"
+ ],
+ "summary": "Retrieve Knowledge",
+ "description": "Search for relevant knowledge in the knowledge base",
+ "operationId": "retrieveKnowledge",
+ "parameters": [
+ {
+ "name": "kb_uuid",
+ "in": "path",
+ "required": true,
+ "schema": {
+ "type": "string"
+ },
+ "description": "Knowledge Base UUID"
+ }
+ ],
+ "requestBody": {
+ "required": true,
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "object",
+ "required": [
+ "query"
+ ],
+ "properties": {
+ "query": {
+ "type": "string",
+ "description": "Query text"
+ }
+ }
+ },
+ "example": {
+ "query": "如何使用 LangBot 创建机器人?"
+ }
+ }
+ }
+ },
+ "responses": {
+ "200": {
+ "description": "Retrieval successful",
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "object",
+ "properties": {
+ "code": {
+ "type": "integer",
+ "example": 0
+ },
+ "msg": {
+ "type": "string",
+ "example": "ok"
+ },
+ "data": {
+ "type": "object",
+ "properties": {
+ "results": {
+ "type": "array",
+ "items": {
+ "type": "object"
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ },
+ "security": [
+ {
+ "ApiKeyAuth": []
+ },
+ {
+ "BearerAuth": []
+ }
+ ]
+ }
+ }
+ },
+ "components": {
+ "securitySchemes": {
+ "ApiKeyAuth": {
+ "type": "apiKey",
+ "in": "header",
+ "name": "X-API-Key",
+ "description": "API Key authentication using X-API-Key header.\nExample: `X-API-Key: lbk_your_api_key_here`\n"
+ },
+ "BearerAuth": {
+ "type": "http",
+ "scheme": "bearer",
+ "description": "Bearer token authentication. Can be either a user JWT token or an API key.\nExample: `Authorization: Bearer `\n"
+ }
+ },
+ "parameters": {
+ "ModelUUID": {
+ "name": "model_uuid",
+ "in": "path",
+ "required": true,
+ "schema": {
+ "type": "string",
+ "format": "uuid"
+ },
+ "description": "Model UUID"
+ }
+ },
+ "schemas": {
+ "LLMModel": {
+ "type": "object",
+ "properties": {
+ "uuid": {
+ "type": "string",
+ "format": "uuid"
+ },
+ "name": {
+ "type": "string",
+ "example": "GPT-4"
+ },
+ "description": {
+ "type": "string",
+ "example": "OpenAI GPT-4 model"
+ },
+ "requester": {
+ "type": "string",
+ "example": "openai-chat-completions"
+ },
+ "requester_config": {
+ "type": "object",
+ "properties": {
+ "model": {
+ "type": "string",
+ "example": "gpt-4"
+ },
+ "args": {
+ "type": "object"
+ }
+ }
+ },
+ "api_keys": {
+ "type": "array",
+ "items": {
+ "type": "object",
+ "properties": {
+ "name": {
+ "type": "string"
+ },
+ "keys": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ }
+ }
+ }
+ },
+ "abilities": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ },
+ "example": [
+ "chat",
+ "vision"
+ ]
+ },
+ "extra_args": {
+ "type": "object"
+ },
+ "created_at": {
+ "type": "string",
+ "format": "date-time"
+ },
+ "updated_at": {
+ "type": "string",
+ "format": "date-time"
+ }
+ }
+ },
+ "LLMModelCreate": {
+ "type": "object",
+ "required": [
+ "name",
+ "requester",
+ "requester_config",
+ "api_keys"
+ ],
+ "properties": {
+ "name": {
+ "type": "string"
+ },
+ "description": {
+ "type": "string"
+ },
+ "requester": {
+ "type": "string"
+ },
+ "requester_config": {
+ "type": "object"
+ },
+ "api_keys": {
+ "type": "array",
+ "items": {
+ "type": "object"
+ }
+ },
+ "abilities": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ },
+ "extra_args": {
+ "type": "object"
+ }
+ }
+ },
+ "LLMModelUpdate": {
+ "type": "object",
+ "properties": {
+ "name": {
+ "type": "string"
+ },
+ "description": {
+ "type": "string"
+ },
+ "requester_config": {
+ "type": "object"
+ },
+ "api_keys": {
+ "type": "array",
+ "items": {
+ "type": "object"
+ }
+ },
+ "abilities": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ },
+ "extra_args": {
+ "type": "object"
+ }
+ }
+ },
+ "EmbeddingModel": {
+ "type": "object",
+ "properties": {
+ "uuid": {
+ "type": "string",
+ "format": "uuid"
+ },
+ "name": {
+ "type": "string"
+ },
+ "description": {
+ "type": "string"
+ },
+ "requester": {
+ "type": "string"
+ },
+ "requester_config": {
+ "type": "object"
+ },
+ "api_keys": {
+ "type": "array",
+ "items": {
+ "type": "object"
+ }
+ },
+ "extra_args": {
+ "type": "object"
+ },
+ "created_at": {
+ "type": "string",
+ "format": "date-time"
+ },
+ "updated_at": {
+ "type": "string",
+ "format": "date-time"
+ }
+ }
+ },
+ "EmbeddingModelCreate": {
+ "type": "object",
+ "required": [
+ "name",
+ "requester",
+ "requester_config",
+ "api_keys"
+ ],
+ "properties": {
+ "name": {
+ "type": "string"
+ },
+ "description": {
+ "type": "string"
+ },
+ "requester": {
+ "type": "string"
+ },
+ "requester_config": {
+ "type": "object"
+ },
+ "api_keys": {
+ "type": "array",
+ "items": {
+ "type": "object"
+ }
+ },
+ "extra_args": {
+ "type": "object"
+ }
+ }
+ },
+ "EmbeddingModelUpdate": {
+ "type": "object",
+ "properties": {
+ "name": {
+ "type": "string"
+ },
+ "description": {
+ "type": "string"
+ },
+ "requester_config": {
+ "type": "object"
+ },
+ "api_keys": {
+ "type": "array",
+ "items": {
+ "type": "object"
+ }
+ },
+ "extra_args": {
+ "type": "object"
+ }
+ }
+ },
+ "Bot": {
+ "type": "object",
+ "properties": {
+ "uuid": {
+ "type": "string",
+ "format": "uuid"
+ },
+ "name": {
+ "type": "string"
+ },
+ "adapter": {
+ "type": "string",
+ "example": "telegram"
+ },
+ "config": {
+ "type": "object"
+ },
+ "created_at": {
+ "type": "string",
+ "format": "date-time"
+ },
+ "updated_at": {
+ "type": "string",
+ "format": "date-time"
+ }
+ }
+ },
+ "BotCreate": {
+ "type": "object",
+ "required": [
+ "name",
+ "adapter",
+ "config"
+ ],
+ "properties": {
+ "name": {
+ "type": "string"
+ },
+ "adapter": {
+ "type": "string"
+ },
+ "config": {
+ "type": "object"
+ }
+ }
+ },
+ "BotUpdate": {
+ "type": "object",
+ "properties": {
+ "name": {
+ "type": "string"
+ },
+ "config": {
+ "type": "object"
+ }
+ }
+ },
+ "Pipeline": {
+ "type": "object",
+ "properties": {
+ "uuid": {
+ "type": "string",
+ "format": "uuid"
+ },
+ "name": {
+ "type": "string"
+ },
+ "config": {
+ "type": "object"
+ },
+ "is_default": {
+ "type": "boolean"
+ },
+ "created_at": {
+ "type": "string",
+ "format": "date-time"
+ },
+ "updated_at": {
+ "type": "string",
+ "format": "date-time"
+ }
+ }
+ },
+ "PipelineCreate": {
+ "type": "object",
+ "required": [
+ "name",
+ "config"
+ ],
+ "properties": {
+ "name": {
+ "type": "string"
+ },
+ "config": {
+ "type": "object"
+ }
+ }
+ },
+ "PipelineUpdate": {
+ "type": "object",
+ "properties": {
+ "name": {
+ "type": "string"
+ },
+ "config": {
+ "type": "object"
+ }
+ }
+ },
+ "SuccessResponse": {
+ "type": "object",
+ "properties": {
+ "code": {
+ "type": "integer",
+ "example": 0
+ },
+ "msg": {
+ "type": "string",
+ "example": "ok"
+ },
+ "data": {
+ "type": "object",
+ "nullable": true
+ }
+ }
+ },
+ "ErrorResponse": {
+ "type": "object",
+ "properties": {
+ "code": {
+ "type": "integer",
+ "example": -1
+ },
+ "msg": {
+ "type": "string",
+ "example": "Error message"
+ }
+ }
+ }
+ },
+ "responses": {
+ "UnauthorizedError": {
+ "description": "Authentication required or invalid credentials",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/ErrorResponse"
+ },
+ "examples": {
+ "no_auth": {
+ "value": {
+ "code": -1,
+ "msg": "No valid authentication provided (user token or API key required)"
+ }
+ },
+ "invalid_key": {
+ "value": {
+ "code": -1,
+ "msg": "Invalid API key"
+ }
+ }
+ }
+ }
+ }
+ },
+ "NotFoundError": {
+ "description": "Resource not found",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/ErrorResponse"
+ },
+ "example": {
+ "code": -1,
+ "msg": "Resource not found"
+ }
+ }
+ }
+ },
+ "InternalServerError": {
+ "description": "Internal server error",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/ErrorResponse"
+ },
+ "example": {
+ "code": -2,
+ "msg": "Internal server error"
+ }
+ }
+ }
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/docs/assets/service-api-openapi-zh.json b/openapi/service-api-zh.json
similarity index 58%
rename from docs/assets/service-api-openapi-zh.json
rename to openapi/service-api-zh.json
index 28dfb2508..817c8aa74 100644
--- a/docs/assets/service-api-openapi-zh.json
+++ b/openapi/service-api-zh.json
@@ -35,6 +35,18 @@
{
"name": "流水线",
"description": "流水线配置管理操作"
+ },
+ {
+ "name": "知识库",
+ "description": "内置知识库管理操作"
+ },
+ {
+ "name": "文件",
+ "description": "文件上传和管理操作"
+ },
+ {
+ "name": "插件",
+ "description": "插件安装和管理操作"
}
],
"security": [
@@ -1486,6 +1498,1309 @@
}
}
}
+ },
+ "/api/v1/platform/bots/{bot_uuid}/send_message": {
+ "post": {
+ "tags": [
+ "机器人"
+ ],
+ "summary": "发送消息",
+ "description": "通过指定机器人向指定目标发送消息",
+ "operationId": "sendMessage",
+ "parameters": [
+ {
+ "name": "bot_uuid",
+ "in": "path",
+ "required": true,
+ "schema": {
+ "type": "string"
+ },
+ "description": "机器人 UUID"
+ }
+ ],
+ "requestBody": {
+ "required": true,
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "object",
+ "required": [
+ "target_type",
+ "target_id",
+ "message_chain"
+ ],
+ "properties": {
+ "target_type": {
+ "type": "string",
+ "enum": [
+ "person",
+ "group"
+ ],
+ "description": "目标类型"
+ },
+ "target_id": {
+ "type": "string",
+ "description": "目标 ID(用户 ID 或群组 ID)"
+ },
+ "message_chain": {
+ "type": "array",
+ "items": {
+ "type": "object"
+ },
+ "description": "消息链(MessageComponent 数组)"
+ }
+ }
+ },
+ "examples": {
+ "文本消息": {
+ "value": {
+ "target_type": "group",
+ "target_id": "123456789",
+ "message_chain": [
+ {
+ "type": "Plain",
+ "text": "Hello, World!"
+ }
+ ]
+ }
+ },
+ "图文消息": {
+ "value": {
+ "target_type": "person",
+ "target_id": "987654321",
+ "message_chain": [
+ {
+ "type": "Plain",
+ "text": "查看这张图片:"
+ },
+ {
+ "type": "Image",
+ "url": "https://example.com/image.jpg"
+ }
+ ]
+ }
+ }
+ }
+ }
+ }
+ },
+ "responses": {
+ "200": {
+ "description": "发送成功",
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "object",
+ "properties": {
+ "code": {
+ "type": "integer",
+ "example": 0
+ },
+ "msg": {
+ "type": "string",
+ "example": "ok"
+ },
+ "data": {
+ "type": "object",
+ "properties": {
+ "sent": {
+ "type": "boolean",
+ "example": true
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ },
+ "400": {
+ "description": "请求参数错误",
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "object",
+ "properties": {
+ "code": {
+ "type": "integer",
+ "example": -1
+ },
+ "msg": {
+ "type": "string",
+ "example": "target_type is required"
+ }
+ }
+ }
+ }
+ }
+ },
+ "500": {
+ "description": "发送失败",
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "object",
+ "properties": {
+ "code": {
+ "type": "integer",
+ "example": -1
+ },
+ "msg": {
+ "type": "string",
+ "example": "Failed to send message: Bot not found"
+ }
+ }
+ }
+ }
+ }
+ }
+ },
+ "security": [
+ {
+ "ApiKeyAuth": []
+ }
+ ]
+ }
+ },
+ "/api/v1/knowledge/bases": {
+ "get": {
+ "tags": [
+ "知识库"
+ ],
+ "summary": "获取所有知识库",
+ "description": "获取所有内置知识库列表",
+ "operationId": "listKnowledgeBases",
+ "responses": {
+ "200": {
+ "description": "成功",
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "object",
+ "properties": {
+ "code": {
+ "type": "integer",
+ "example": 0
+ },
+ "msg": {
+ "type": "string",
+ "example": "ok"
+ },
+ "data": {
+ "type": "object",
+ "properties": {
+ "bases": {
+ "type": "array",
+ "items": {
+ "type": "object"
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ },
+ "security": [
+ {
+ "ApiKeyAuth": []
+ },
+ {
+ "BearerAuth": []
+ }
+ ]
+ },
+ "post": {
+ "tags": [
+ "知识库"
+ ],
+ "summary": "创建知识库",
+ "description": "创建新的内置知识库",
+ "operationId": "createKnowledgeBase",
+ "requestBody": {
+ "required": true,
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "object",
+ "required": [
+ "name",
+ "embedding_model_uuid"
+ ],
+ "properties": {
+ "name": {
+ "type": "string",
+ "description": "知识库名称"
+ },
+ "description": {
+ "type": "string",
+ "description": "知识库描述"
+ },
+ "embedding_model_uuid": {
+ "type": "string",
+ "description": "向量模型 UUID"
+ }
+ }
+ },
+ "example": {
+ "name": "技术文档库",
+ "description": "存储技术文档和API参考",
+ "embedding_model_uuid": "uuid-of-embedding-model"
+ }
+ }
+ }
+ },
+ "responses": {
+ "200": {
+ "description": "创建成功",
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "object",
+ "properties": {
+ "code": {
+ "type": "integer",
+ "example": 0
+ },
+ "msg": {
+ "type": "string",
+ "example": "ok"
+ },
+ "data": {
+ "type": "object",
+ "properties": {
+ "uuid": {
+ "type": "string"
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ },
+ "security": [
+ {
+ "ApiKeyAuth": []
+ },
+ {
+ "BearerAuth": []
+ }
+ ]
+ }
+ },
+ "/api/v1/knowledge/bases/{kb_uuid}": {
+ "get": {
+ "tags": [
+ "知识库"
+ ],
+ "summary": "获取知识库详情",
+ "description": "获取指定知识库的详细信息",
+ "operationId": "getKnowledgeBase",
+ "parameters": [
+ {
+ "name": "kb_uuid",
+ "in": "path",
+ "required": true,
+ "schema": {
+ "type": "string"
+ },
+ "description": "知识库 UUID"
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "成功",
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "object",
+ "properties": {
+ "code": {
+ "type": "integer",
+ "example": 0
+ },
+ "msg": {
+ "type": "string",
+ "example": "ok"
+ },
+ "data": {
+ "type": "object",
+ "properties": {
+ "base": {
+ "type": "object"
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ },
+ "404": {
+ "description": "知识库不存在",
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "object",
+ "properties": {
+ "code": {
+ "type": "integer",
+ "example": -1
+ },
+ "msg": {
+ "type": "string",
+ "example": "knowledge base not found"
+ }
+ }
+ }
+ }
+ }
+ }
+ },
+ "security": [
+ {
+ "ApiKeyAuth": []
+ },
+ {
+ "BearerAuth": []
+ }
+ ]
+ },
+ "put": {
+ "tags": [
+ "知识库"
+ ],
+ "summary": "更新知识库",
+ "description": "更新知识库信息",
+ "operationId": "updateKnowledgeBase",
+ "parameters": [
+ {
+ "name": "kb_uuid",
+ "in": "path",
+ "required": true,
+ "schema": {
+ "type": "string"
+ },
+ "description": "知识库 UUID"
+ }
+ ],
+ "requestBody": {
+ "required": true,
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "object",
+ "properties": {
+ "name": {
+ "type": "string"
+ },
+ "description": {
+ "type": "string"
+ }
+ }
+ }
+ }
+ }
+ },
+ "responses": {
+ "200": {
+ "description": "更新成功",
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "object",
+ "properties": {
+ "code": {
+ "type": "integer",
+ "example": 0
+ },
+ "msg": {
+ "type": "string",
+ "example": "ok"
+ },
+ "data": {
+ "type": "object"
+ }
+ }
+ }
+ }
+ }
+ }
+ },
+ "security": [
+ {
+ "ApiKeyAuth": []
+ },
+ {
+ "BearerAuth": []
+ }
+ ]
+ },
+ "delete": {
+ "tags": [
+ "知识库"
+ ],
+ "summary": "删除知识库",
+ "description": "删除指定的知识库",
+ "operationId": "deleteKnowledgeBase",
+ "parameters": [
+ {
+ "name": "kb_uuid",
+ "in": "path",
+ "required": true,
+ "schema": {
+ "type": "string"
+ },
+ "description": "知识库 UUID"
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "删除成功",
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "object",
+ "properties": {
+ "code": {
+ "type": "integer",
+ "example": 0
+ },
+ "msg": {
+ "type": "string",
+ "example": "ok"
+ },
+ "data": {
+ "type": "object"
+ }
+ }
+ }
+ }
+ }
+ }
+ },
+ "security": [
+ {
+ "ApiKeyAuth": []
+ },
+ {
+ "BearerAuth": []
+ }
+ ]
+ }
+ },
+ "/api/v1/knowledge/bases/{kb_uuid}/files": {
+ "get": {
+ "tags": [
+ "知识库"
+ ],
+ "summary": "获取知识库文件列表",
+ "description": "获取指定知识库中的所有文件",
+ "operationId": "listKnowledgeBaseFiles",
+ "parameters": [
+ {
+ "name": "kb_uuid",
+ "in": "path",
+ "required": true,
+ "schema": {
+ "type": "string"
+ },
+ "description": "知识库 UUID"
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "成功",
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "object",
+ "properties": {
+ "code": {
+ "type": "integer",
+ "example": 0
+ },
+ "msg": {
+ "type": "string",
+ "example": "ok"
+ },
+ "data": {
+ "type": "object",
+ "properties": {
+ "files": {
+ "type": "array",
+ "items": {
+ "type": "object"
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ },
+ "security": [
+ {
+ "ApiKeyAuth": []
+ },
+ {
+ "BearerAuth": []
+ }
+ ]
+ },
+ "post": {
+ "tags": [
+ "知识库"
+ ],
+ "summary": "添加文件到知识库",
+ "description": "将已上传的文件添加到知识库进行处理",
+ "operationId": "addFileToKnowledgeBase",
+ "parameters": [
+ {
+ "name": "kb_uuid",
+ "in": "path",
+ "required": true,
+ "schema": {
+ "type": "string"
+ },
+ "description": "知识库 UUID"
+ }
+ ],
+ "requestBody": {
+ "required": true,
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "object",
+ "required": [
+ "file_id"
+ ],
+ "properties": {
+ "file_id": {
+ "type": "string",
+ "description": "文件 ID(从文件上传接口获取)"
+ }
+ }
+ },
+ "example": {
+ "file_id": "document_abc123.pdf"
+ }
+ }
+ }
+ },
+ "responses": {
+ "200": {
+ "description": "添加成功",
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "object",
+ "properties": {
+ "code": {
+ "type": "integer",
+ "example": 0
+ },
+ "msg": {
+ "type": "string",
+ "example": "ok"
+ },
+ "data": {
+ "type": "object",
+ "properties": {
+ "task_id": {
+ "type": "string",
+ "description": "处理任务 ID"
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ },
+ "security": [
+ {
+ "ApiKeyAuth": []
+ },
+ {
+ "BearerAuth": []
+ }
+ ]
+ }
+ },
+ "/api/v1/knowledge/bases/{kb_uuid}/files/{file_id}": {
+ "delete": {
+ "tags": [
+ "知识库"
+ ],
+ "summary": "从知识库删除文件",
+ "description": "从指定知识库中删除文件",
+ "operationId": "deleteFileFromKnowledgeBase",
+ "parameters": [
+ {
+ "name": "kb_uuid",
+ "in": "path",
+ "required": true,
+ "schema": {
+ "type": "string"
+ },
+ "description": "知识库 UUID"
+ },
+ {
+ "name": "file_id",
+ "in": "path",
+ "required": true,
+ "schema": {
+ "type": "string"
+ },
+ "description": "文件 ID"
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "删除成功",
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "object",
+ "properties": {
+ "code": {
+ "type": "integer",
+ "example": 0
+ },
+ "msg": {
+ "type": "string",
+ "example": "ok"
+ },
+ "data": {
+ "type": "object"
+ }
+ }
+ }
+ }
+ }
+ }
+ },
+ "security": [
+ {
+ "ApiKeyAuth": []
+ },
+ {
+ "BearerAuth": []
+ }
+ ]
+ }
+ },
+ "/api/v1/knowledge/bases/{kb_uuid}/retrieve": {
+ "post": {
+ "tags": [
+ "知识库"
+ ],
+ "summary": "检索知识库",
+ "description": "在知识库中搜索相关知识",
+ "operationId": "retrieveKnowledge",
+ "parameters": [
+ {
+ "name": "kb_uuid",
+ "in": "path",
+ "required": true,
+ "schema": {
+ "type": "string"
+ },
+ "description": "知识库 UUID"
+ }
+ ],
+ "requestBody": {
+ "required": true,
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "object",
+ "required": [
+ "query"
+ ],
+ "properties": {
+ "query": {
+ "type": "string",
+ "description": "查询文本"
+ }
+ }
+ },
+ "example": {
+ "query": "如何使用 LangBot 创建机器人?"
+ }
+ }
+ }
+ },
+ "responses": {
+ "200": {
+ "description": "检索成功",
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "object",
+ "properties": {
+ "code": {
+ "type": "integer",
+ "example": 0
+ },
+ "msg": {
+ "type": "string",
+ "example": "ok"
+ },
+ "data": {
+ "type": "object",
+ "properties": {
+ "results": {
+ "type": "array",
+ "items": {
+ "type": "object"
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ },
+ "security": [
+ {
+ "ApiKeyAuth": []
+ },
+ {
+ "BearerAuth": []
+ }
+ ]
+ }
+ },
+ "/api/v1/files/images": {
+ "post": {
+ "tags": [
+ "文件"
+ ],
+ "summary": "上传图片",
+ "description": "上传图片文件(支持 jpg, jpeg, png, gif, webp 格式,最大 10MB)",
+ "operationId": "uploadImage",
+ "requestBody": {
+ "required": true,
+ "content": {
+ "multipart/form-data": {
+ "schema": {
+ "type": "object",
+ "required": [
+ "file"
+ ],
+ "properties": {
+ "file": {
+ "type": "string",
+ "format": "binary",
+ "description": "图片文件"
+ }
+ }
+ }
+ }
+ }
+ },
+ "responses": {
+ "200": {
+ "description": "上传成功",
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "object",
+ "properties": {
+ "code": {
+ "type": "integer",
+ "example": 0
+ },
+ "msg": {
+ "type": "string",
+ "example": "ok"
+ },
+ "data": {
+ "type": "object",
+ "properties": {
+ "file_key": {
+ "type": "string",
+ "description": "文件密钥"
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ },
+ "security": [
+ {
+ "BearerAuth": []
+ }
+ ]
+ }
+ },
+ "/api/v1/files/documents": {
+ "post": {
+ "tags": [
+ "文件"
+ ],
+ "summary": "上传文档",
+ "description": "上传文档文件(最大 10MB)",
+ "operationId": "uploadDocument",
+ "requestBody": {
+ "required": true,
+ "content": {
+ "multipart/form-data": {
+ "schema": {
+ "type": "object",
+ "required": [
+ "file"
+ ],
+ "properties": {
+ "file": {
+ "type": "string",
+ "format": "binary",
+ "description": "文档文件"
+ }
+ }
+ }
+ }
+ }
+ },
+ "responses": {
+ "200": {
+ "description": "上传成功",
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "object",
+ "properties": {
+ "code": {
+ "type": "integer",
+ "example": 0
+ },
+ "msg": {
+ "type": "string",
+ "example": "ok"
+ },
+ "data": {
+ "type": "object",
+ "properties": {
+ "file_id": {
+ "type": "string",
+ "description": "文件 ID"
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ },
+ "security": [
+ {
+ "BearerAuth": []
+ }
+ ]
+ }
+ },
+ "/api/v1/plugins": {
+ "get": {
+ "tags": [
+ "插件"
+ ],
+ "summary": "获取所有插件",
+ "description": "获取已安装的所有插件列表",
+ "operationId": "listPlugins",
+ "responses": {
+ "200": {
+ "description": "成功",
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "object",
+ "properties": {
+ "code": {
+ "type": "integer",
+ "example": 0
+ },
+ "msg": {
+ "type": "string",
+ "example": "ok"
+ },
+ "data": {
+ "type": "object",
+ "properties": {
+ "plugins": {
+ "type": "array",
+ "items": {
+ "type": "object"
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ },
+ "security": [
+ {
+ "BearerAuth": []
+ }
+ ]
+ }
+ },
+ "/api/v1/plugins/{author}/{plugin_name}": {
+ "get": {
+ "tags": [
+ "插件"
+ ],
+ "summary": "获取插件详情",
+ "description": "获取指定插件的详细信息",
+ "operationId": "getPlugin",
+ "parameters": [
+ {
+ "name": "author",
+ "in": "path",
+ "required": true,
+ "schema": {
+ "type": "string"
+ },
+ "description": "插件作者"
+ },
+ {
+ "name": "plugin_name",
+ "in": "path",
+ "required": true,
+ "schema": {
+ "type": "string"
+ },
+ "description": "插件名称"
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "成功",
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "object",
+ "properties": {
+ "code": {
+ "type": "integer",
+ "example": 0
+ },
+ "msg": {
+ "type": "string",
+ "example": "ok"
+ },
+ "data": {
+ "type": "object",
+ "properties": {
+ "plugin": {
+ "type": "object"
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ },
+ "security": [
+ {
+ "BearerAuth": []
+ }
+ ]
+ },
+ "delete": {
+ "tags": [
+ "插件"
+ ],
+ "summary": "删除插件",
+ "description": "卸载指定的插件",
+ "operationId": "deletePlugin",
+ "parameters": [
+ {
+ "name": "author",
+ "in": "path",
+ "required": true,
+ "schema": {
+ "type": "string"
+ },
+ "description": "插件作者"
+ },
+ {
+ "name": "plugin_name",
+ "in": "path",
+ "required": true,
+ "schema": {
+ "type": "string"
+ },
+ "description": "插件名称"
+ },
+ {
+ "name": "delete_data",
+ "in": "query",
+ "required": false,
+ "schema": {
+ "type": "boolean",
+ "default": false
+ },
+ "description": "是否删除插件数据"
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "删除任务已创建",
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "object",
+ "properties": {
+ "code": {
+ "type": "integer",
+ "example": 0
+ },
+ "msg": {
+ "type": "string",
+ "example": "ok"
+ },
+ "data": {
+ "type": "object",
+ "properties": {
+ "task_id": {
+ "type": "string"
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ },
+ "security": [
+ {
+ "BearerAuth": []
+ }
+ ]
+ }
+ },
+ "/api/v1/plugins/install/local": {
+ "post": {
+ "tags": [
+ "插件"
+ ],
+ "summary": "从本地文件安装插件",
+ "description": "上传并安装插件包文件",
+ "operationId": "installPluginLocal",
+ "requestBody": {
+ "required": true,
+ "content": {
+ "multipart/form-data": {
+ "schema": {
+ "type": "object",
+ "required": [
+ "file"
+ ],
+ "properties": {
+ "file": {
+ "type": "string",
+ "format": "binary",
+ "description": "插件包文件(.lbpkg 格式)"
+ }
+ }
+ }
+ }
+ }
+ },
+ "responses": {
+ "200": {
+ "description": "安装任务已创建",
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "object",
+ "properties": {
+ "code": {
+ "type": "integer",
+ "example": 0
+ },
+ "msg": {
+ "type": "string",
+ "example": "ok"
+ },
+ "data": {
+ "type": "object",
+ "properties": {
+ "task_id": {
+ "type": "string"
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ },
+ "security": [
+ {
+ "BearerAuth": []
+ }
+ ]
+ }
+ },
+ "/api/v1/plugins/install/github": {
+ "post": {
+ "tags": [
+ "插件"
+ ],
+ "summary": "从 GitHub 安装插件",
+ "description": "从 GitHub Release 安装插件",
+ "operationId": "installPluginGitHub",
+ "requestBody": {
+ "required": true,
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "object",
+ "required": [
+ "asset_url"
+ ],
+ "properties": {
+ "asset_url": {
+ "type": "string",
+ "description": "GitHub Release 资源下载 URL"
+ },
+ "owner": {
+ "type": "string",
+ "description": "仓库所有者"
+ },
+ "repo": {
+ "type": "string",
+ "description": "仓库名称"
+ },
+ "release_tag": {
+ "type": "string",
+ "description": "Release 标签"
+ }
+ }
+ }
+ }
+ }
+ },
+ "responses": {
+ "200": {
+ "description": "安装任务已创建",
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "object",
+ "properties": {
+ "code": {
+ "type": "integer",
+ "example": 0
+ },
+ "msg": {
+ "type": "string",
+ "example": "ok"
+ },
+ "data": {
+ "type": "object",
+ "properties": {
+ "task_id": {
+ "type": "string"
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ },
+ "security": [
+ {
+ "BearerAuth": []
+ }
+ ]
+ }
+ },
+ "/api/v1/plugins/install/marketplace": {
+ "post": {
+ "tags": [
+ "插件"
+ ],
+ "summary": "从插件市场安装",
+ "description": "从 LangBot 插件市场安装插件",
+ "operationId": "installPluginMarketplace",
+ "requestBody": {
+ "required": true,
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "object",
+ "properties": {
+ "plugin_id": {
+ "type": "string",
+ "description": "插件 ID"
+ }
+ }
+ }
+ }
+ }
+ },
+ "responses": {
+ "200": {
+ "description": "安装任务已创建",
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "object",
+ "properties": {
+ "code": {
+ "type": "integer",
+ "example": 0
+ },
+ "msg": {
+ "type": "string",
+ "example": "ok"
+ },
+ "data": {
+ "type": "object",
+ "properties": {
+ "task_id": {
+ "type": "string"
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ },
+ "security": [
+ {
+ "BearerAuth": []
+ }
+ ]
+ }
}
},
"components": {
diff --git a/package-lock.json b/package-lock.json
deleted file mode 100644
index 52cc52d7f..000000000
--- a/package-lock.json
+++ /dev/null
@@ -1,3264 +0,0 @@
-{
- "name": "Langbot-Wiki",
- "lockfileVersion": 3,
- "requires": true,
- "packages": {
- "": {
- "dependencies": {
- "mermaid": "^11.8.0"
- },
- "devDependencies": {
- "vitepress": "^1.3.4"
- }
- },
- "node_modules/@algolia/autocomplete-core": {
- "version": "1.9.3",
- "resolved": "https://registry.npmjs.org/@algolia/autocomplete-core/-/autocomplete-core-1.9.3.tgz",
- "integrity": "sha512-009HdfugtGCdC4JdXUbVJClA0q0zh24yyePn+KUGk3rP7j8FEe/m5Yo/z65gn6nP/cM39PxpzqKrL7A6fP6PPw==",
- "dev": true,
- "dependencies": {
- "@algolia/autocomplete-plugin-algolia-insights": "1.9.3",
- "@algolia/autocomplete-shared": "1.9.3"
- }
- },
- "node_modules/@algolia/autocomplete-plugin-algolia-insights": {
- "version": "1.9.3",
- "resolved": "https://registry.npmjs.org/@algolia/autocomplete-plugin-algolia-insights/-/autocomplete-plugin-algolia-insights-1.9.3.tgz",
- "integrity": "sha512-a/yTUkcO/Vyy+JffmAnTWbr4/90cLzw+CC3bRbhnULr/EM0fGNvM13oQQ14f2moLMcVDyAx/leczLlAOovhSZg==",
- "dev": true,
- "dependencies": {
- "@algolia/autocomplete-shared": "1.9.3"
- },
- "peerDependencies": {
- "search-insights": ">= 1 < 3"
- }
- },
- "node_modules/@algolia/autocomplete-preset-algolia": {
- "version": "1.9.3",
- "resolved": "https://registry.npmjs.org/@algolia/autocomplete-preset-algolia/-/autocomplete-preset-algolia-1.9.3.tgz",
- "integrity": "sha512-d4qlt6YmrLMYy95n5TB52wtNDr6EgAIPH81dvvvW8UmuWRgxEtY0NJiPwl/h95JtG2vmRM804M0DSwMCNZlzRA==",
- "dev": true,
- "dependencies": {
- "@algolia/autocomplete-shared": "1.9.3"
- },
- "peerDependencies": {
- "@algolia/client-search": ">= 4.9.1 < 6",
- "algoliasearch": ">= 4.9.1 < 6"
- }
- },
- "node_modules/@algolia/autocomplete-shared": {
- "version": "1.9.3",
- "resolved": "https://registry.npmjs.org/@algolia/autocomplete-shared/-/autocomplete-shared-1.9.3.tgz",
- "integrity": "sha512-Wnm9E4Ye6Rl6sTTqjoymD+l8DjSTHsHboVRYrKgEt8Q7UHm9nYbqhN/i0fhUYA3OAEH7WA8x3jfpnmJm3rKvaQ==",
- "dev": true,
- "peerDependencies": {
- "@algolia/client-search": ">= 4.9.1 < 6",
- "algoliasearch": ">= 4.9.1 < 6"
- }
- },
- "node_modules/@algolia/cache-browser-local-storage": {
- "version": "4.24.0",
- "resolved": "https://registry.npmjs.org/@algolia/cache-browser-local-storage/-/cache-browser-local-storage-4.24.0.tgz",
- "integrity": "sha512-t63W9BnoXVrGy9iYHBgObNXqYXM3tYXCjDSHeNwnsc324r4o5UiVKUiAB4THQ5z9U5hTj6qUvwg/Ez43ZD85ww==",
- "dev": true,
- "dependencies": {
- "@algolia/cache-common": "4.24.0"
- }
- },
- "node_modules/@algolia/cache-common": {
- "version": "4.24.0",
- "resolved": "https://registry.npmjs.org/@algolia/cache-common/-/cache-common-4.24.0.tgz",
- "integrity": "sha512-emi+v+DmVLpMGhp0V9q9h5CdkURsNmFC+cOS6uK9ndeJm9J4TiqSvPYVu+THUP8P/S08rxf5x2P+p3CfID0Y4g==",
- "dev": true
- },
- "node_modules/@algolia/cache-in-memory": {
- "version": "4.24.0",
- "resolved": "https://registry.npmjs.org/@algolia/cache-in-memory/-/cache-in-memory-4.24.0.tgz",
- "integrity": "sha512-gDrt2so19jW26jY3/MkFg5mEypFIPbPoXsQGQWAi6TrCPsNOSEYepBMPlucqWigsmEy/prp5ug2jy/N3PVG/8w==",
- "dev": true,
- "dependencies": {
- "@algolia/cache-common": "4.24.0"
- }
- },
- "node_modules/@algolia/client-account": {
- "version": "4.24.0",
- "resolved": "https://registry.npmjs.org/@algolia/client-account/-/client-account-4.24.0.tgz",
- "integrity": "sha512-adcvyJ3KjPZFDybxlqnf+5KgxJtBjwTPTeyG2aOyoJvx0Y8dUQAEOEVOJ/GBxX0WWNbmaSrhDURMhc+QeevDsA==",
- "dev": true,
- "dependencies": {
- "@algolia/client-common": "4.24.0",
- "@algolia/client-search": "4.24.0",
- "@algolia/transporter": "4.24.0"
- }
- },
- "node_modules/@algolia/client-account/node_modules/@algolia/client-common": {
- "version": "4.24.0",
- "resolved": "https://registry.npmjs.org/@algolia/client-common/-/client-common-4.24.0.tgz",
- "integrity": "sha512-bc2ROsNL6w6rqpl5jj/UywlIYC21TwSSoFHKl01lYirGMW+9Eek6r02Tocg4gZ8HAw3iBvu6XQiM3BEbmEMoiA==",
- "dev": true,
- "dependencies": {
- "@algolia/requester-common": "4.24.0",
- "@algolia/transporter": "4.24.0"
- }
- },
- "node_modules/@algolia/client-account/node_modules/@algolia/client-search": {
- "version": "4.24.0",
- "resolved": "https://registry.npmjs.org/@algolia/client-search/-/client-search-4.24.0.tgz",
- "integrity": "sha512-uRW6EpNapmLAD0mW47OXqTP8eiIx5F6qN9/x/7HHO6owL3N1IXqydGwW5nhDFBrV+ldouro2W1VX3XlcUXEFCA==",
- "dev": true,
- "dependencies": {
- "@algolia/client-common": "4.24.0",
- "@algolia/requester-common": "4.24.0",
- "@algolia/transporter": "4.24.0"
- }
- },
- "node_modules/@algolia/client-analytics": {
- "version": "4.24.0",
- "resolved": "https://registry.npmjs.org/@algolia/client-analytics/-/client-analytics-4.24.0.tgz",
- "integrity": "sha512-y8jOZt1OjwWU4N2qr8G4AxXAzaa8DBvyHTWlHzX/7Me1LX8OayfgHexqrsL4vSBcoMmVw2XnVW9MhL+Y2ZDJXg==",
- "dev": true,
- "dependencies": {
- "@algolia/client-common": "4.24.0",
- "@algolia/client-search": "4.24.0",
- "@algolia/requester-common": "4.24.0",
- "@algolia/transporter": "4.24.0"
- }
- },
- "node_modules/@algolia/client-analytics/node_modules/@algolia/client-common": {
- "version": "4.24.0",
- "resolved": "https://registry.npmjs.org/@algolia/client-common/-/client-common-4.24.0.tgz",
- "integrity": "sha512-bc2ROsNL6w6rqpl5jj/UywlIYC21TwSSoFHKl01lYirGMW+9Eek6r02Tocg4gZ8HAw3iBvu6XQiM3BEbmEMoiA==",
- "dev": true,
- "dependencies": {
- "@algolia/requester-common": "4.24.0",
- "@algolia/transporter": "4.24.0"
- }
- },
- "node_modules/@algolia/client-analytics/node_modules/@algolia/client-search": {
- "version": "4.24.0",
- "resolved": "https://registry.npmjs.org/@algolia/client-search/-/client-search-4.24.0.tgz",
- "integrity": "sha512-uRW6EpNapmLAD0mW47OXqTP8eiIx5F6qN9/x/7HHO6owL3N1IXqydGwW5nhDFBrV+ldouro2W1VX3XlcUXEFCA==",
- "dev": true,
- "dependencies": {
- "@algolia/client-common": "4.24.0",
- "@algolia/requester-common": "4.24.0",
- "@algolia/transporter": "4.24.0"
- }
- },
- "node_modules/@algolia/client-common": {
- "version": "5.1.1",
- "resolved": "https://registry.npmjs.org/@algolia/client-common/-/client-common-5.1.1.tgz",
- "integrity": "sha512-jkQNQbGY+XQB3Eln7wqqdUZKBzG8lETcsaUk5gcMc6iIwyN/qW0v0fhpKPH+Kli+BImLxo0CWk12CvVvx2exWA==",
- "dev": true,
- "peer": true,
- "engines": {
- "node": ">= 14.0.0"
- }
- },
- "node_modules/@algolia/client-personalization": {
- "version": "4.24.0",
- "resolved": "https://registry.npmjs.org/@algolia/client-personalization/-/client-personalization-4.24.0.tgz",
- "integrity": "sha512-l5FRFm/yngztweU0HdUzz1rC4yoWCFo3IF+dVIVTfEPg906eZg5BOd1k0K6rZx5JzyyoP4LdmOikfkfGsKVE9w==",
- "dev": true,
- "dependencies": {
- "@algolia/client-common": "4.24.0",
- "@algolia/requester-common": "4.24.0",
- "@algolia/transporter": "4.24.0"
- }
- },
- "node_modules/@algolia/client-personalization/node_modules/@algolia/client-common": {
- "version": "4.24.0",
- "resolved": "https://registry.npmjs.org/@algolia/client-common/-/client-common-4.24.0.tgz",
- "integrity": "sha512-bc2ROsNL6w6rqpl5jj/UywlIYC21TwSSoFHKl01lYirGMW+9Eek6r02Tocg4gZ8HAw3iBvu6XQiM3BEbmEMoiA==",
- "dev": true,
- "dependencies": {
- "@algolia/requester-common": "4.24.0",
- "@algolia/transporter": "4.24.0"
- }
- },
- "node_modules/@algolia/client-search": {
- "version": "5.1.1",
- "resolved": "https://registry.npmjs.org/@algolia/client-search/-/client-search-5.1.1.tgz",
- "integrity": "sha512-SFpb3FI/VouGou/vpuS7qeCA5Y/KpV42P6CEA/1MZQtl/xJkl6PVjikb+Q9YadeHi2jtDV/aQ6PyiVDnX4PQcw==",
- "dev": true,
- "peer": true,
- "dependencies": {
- "@algolia/client-common": "5.1.1",
- "@algolia/requester-browser-xhr": "5.1.1",
- "@algolia/requester-node-http": "5.1.1"
- },
- "engines": {
- "node": ">= 14.0.0"
- }
- },
- "node_modules/@algolia/logger-common": {
- "version": "4.24.0",
- "resolved": "https://registry.npmjs.org/@algolia/logger-common/-/logger-common-4.24.0.tgz",
- "integrity": "sha512-LLUNjkahj9KtKYrQhFKCzMx0BY3RnNP4FEtO+sBybCjJ73E8jNdaKJ/Dd8A/VA4imVHP5tADZ8pn5B8Ga/wTMA==",
- "dev": true
- },
- "node_modules/@algolia/logger-console": {
- "version": "4.24.0",
- "resolved": "https://registry.npmjs.org/@algolia/logger-console/-/logger-console-4.24.0.tgz",
- "integrity": "sha512-X4C8IoHgHfiUROfoRCV+lzSy+LHMgkoEEU1BbKcsfnV0i0S20zyy0NLww9dwVHUWNfPPxdMU+/wKmLGYf96yTg==",
- "dev": true,
- "dependencies": {
- "@algolia/logger-common": "4.24.0"
- }
- },
- "node_modules/@algolia/recommend": {
- "version": "4.24.0",
- "resolved": "https://registry.npmjs.org/@algolia/recommend/-/recommend-4.24.0.tgz",
- "integrity": "sha512-P9kcgerfVBpfYHDfVZDvvdJv0lEoCvzNlOy2nykyt5bK8TyieYyiD0lguIJdRZZYGre03WIAFf14pgE+V+IBlw==",
- "dev": true,
- "dependencies": {
- "@algolia/cache-browser-local-storage": "4.24.0",
- "@algolia/cache-common": "4.24.0",
- "@algolia/cache-in-memory": "4.24.0",
- "@algolia/client-common": "4.24.0",
- "@algolia/client-search": "4.24.0",
- "@algolia/logger-common": "4.24.0",
- "@algolia/logger-console": "4.24.0",
- "@algolia/requester-browser-xhr": "4.24.0",
- "@algolia/requester-common": "4.24.0",
- "@algolia/requester-node-http": "4.24.0",
- "@algolia/transporter": "4.24.0"
- }
- },
- "node_modules/@algolia/recommend/node_modules/@algolia/client-common": {
- "version": "4.24.0",
- "resolved": "https://registry.npmjs.org/@algolia/client-common/-/client-common-4.24.0.tgz",
- "integrity": "sha512-bc2ROsNL6w6rqpl5jj/UywlIYC21TwSSoFHKl01lYirGMW+9Eek6r02Tocg4gZ8HAw3iBvu6XQiM3BEbmEMoiA==",
- "dev": true,
- "dependencies": {
- "@algolia/requester-common": "4.24.0",
- "@algolia/transporter": "4.24.0"
- }
- },
- "node_modules/@algolia/recommend/node_modules/@algolia/client-search": {
- "version": "4.24.0",
- "resolved": "https://registry.npmjs.org/@algolia/client-search/-/client-search-4.24.0.tgz",
- "integrity": "sha512-uRW6EpNapmLAD0mW47OXqTP8eiIx5F6qN9/x/7HHO6owL3N1IXqydGwW5nhDFBrV+ldouro2W1VX3XlcUXEFCA==",
- "dev": true,
- "dependencies": {
- "@algolia/client-common": "4.24.0",
- "@algolia/requester-common": "4.24.0",
- "@algolia/transporter": "4.24.0"
- }
- },
- "node_modules/@algolia/recommend/node_modules/@algolia/requester-browser-xhr": {
- "version": "4.24.0",
- "resolved": "https://registry.npmjs.org/@algolia/requester-browser-xhr/-/requester-browser-xhr-4.24.0.tgz",
- "integrity": "sha512-Z2NxZMb6+nVXSjF13YpjYTdvV3032YTBSGm2vnYvYPA6mMxzM3v5rsCiSspndn9rzIW4Qp1lPHBvuoKJV6jnAA==",
- "dev": true,
- "dependencies": {
- "@algolia/requester-common": "4.24.0"
- }
- },
- "node_modules/@algolia/recommend/node_modules/@algolia/requester-node-http": {
- "version": "4.24.0",
- "resolved": "https://registry.npmjs.org/@algolia/requester-node-http/-/requester-node-http-4.24.0.tgz",
- "integrity": "sha512-JF18yTjNOVYvU/L3UosRcvbPMGT9B+/GQWNWnenIImglzNVGpyzChkXLnrSf6uxwVNO6ESGu6oN8MqcGQcjQJw==",
- "dev": true,
- "dependencies": {
- "@algolia/requester-common": "4.24.0"
- }
- },
- "node_modules/@algolia/requester-browser-xhr": {
- "version": "5.1.1",
- "resolved": "https://registry.npmjs.org/@algolia/requester-browser-xhr/-/requester-browser-xhr-5.1.1.tgz",
- "integrity": "sha512-NXmN1ujJCj5GlJQaMK6DbdiXdcf6nhRef/X40lu9TYi71q9xTo/5RPMI0K2iOp6g07S26BrXFOz6RSV3Ny4LLw==",
- "dev": true,
- "peer": true,
- "dependencies": {
- "@algolia/client-common": "5.1.1"
- },
- "engines": {
- "node": ">= 14.0.0"
- }
- },
- "node_modules/@algolia/requester-common": {
- "version": "4.24.0",
- "resolved": "https://registry.npmjs.org/@algolia/requester-common/-/requester-common-4.24.0.tgz",
- "integrity": "sha512-k3CXJ2OVnvgE3HMwcojpvY6d9kgKMPRxs/kVohrwF5WMr2fnqojnycZkxPoEg+bXm8fi5BBfFmOqgYztRtHsQA==",
- "dev": true
- },
- "node_modules/@algolia/requester-node-http": {
- "version": "5.1.1",
- "resolved": "https://registry.npmjs.org/@algolia/requester-node-http/-/requester-node-http-5.1.1.tgz",
- "integrity": "sha512-xwrgnNTIzgxDEx6zuCKSKTPzQLA8fL/WZiVB6fRpIu5agLMjoAi0cWA5YSDbo+2FFxqVgLqKY/Jz6mKmWtY15Q==",
- "dev": true,
- "peer": true,
- "dependencies": {
- "@algolia/client-common": "5.1.1"
- },
- "engines": {
- "node": ">= 14.0.0"
- }
- },
- "node_modules/@algolia/transporter": {
- "version": "4.24.0",
- "resolved": "https://registry.npmjs.org/@algolia/transporter/-/transporter-4.24.0.tgz",
- "integrity": "sha512-86nI7w6NzWxd1Zp9q3413dRshDqAzSbsQjhcDhPIatEFiZrL1/TjnHL8S7jVKFePlIMzDsZWXAXwXzcok9c5oA==",
- "dev": true,
- "dependencies": {
- "@algolia/cache-common": "4.24.0",
- "@algolia/logger-common": "4.24.0",
- "@algolia/requester-common": "4.24.0"
- }
- },
- "node_modules/@antfu/install-pkg": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/@antfu/install-pkg/-/install-pkg-1.1.0.tgz",
- "integrity": "sha512-MGQsmw10ZyI+EJo45CdSER4zEb+p31LpDAFp2Z3gkSd1yqVZGi0Ebx++YTEMonJy4oChEMLsxZ64j8FH6sSqtQ==",
- "license": "MIT",
- "dependencies": {
- "package-manager-detector": "^1.3.0",
- "tinyexec": "^1.0.1"
- },
- "funding": {
- "url": "https://github.com/sponsors/antfu"
- }
- },
- "node_modules/@antfu/utils": {
- "version": "8.1.1",
- "resolved": "https://registry.npmjs.org/@antfu/utils/-/utils-8.1.1.tgz",
- "integrity": "sha512-Mex9nXf9vR6AhcXmMrlz/HVgYYZpVGJ6YlPgwl7UnaFpnshXs6EK/oa5Gpf3CzENMjkvEx2tQtntGnb7UtSTOQ==",
- "license": "MIT",
- "funding": {
- "url": "https://github.com/sponsors/antfu"
- }
- },
- "node_modules/@babel/helper-string-parser": {
- "version": "7.24.8",
- "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.24.8.tgz",
- "integrity": "sha512-pO9KhhRcuUyGnJWwyEgnRJTSIZHiT+vMD0kPeD+so0l7mxkMT19g3pjY9GTnHySck/hDzq+dtW/4VgnMkippsQ==",
- "dev": true,
- "engines": {
- "node": ">=6.9.0"
- }
- },
- "node_modules/@babel/helper-validator-identifier": {
- "version": "7.24.7",
- "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.24.7.tgz",
- "integrity": "sha512-rR+PBcQ1SMQDDyF6X0wxtG8QyLCgUB0eRAGguqRLfkCA87l7yAP7ehq8SNj96OOGTO8OBV70KhuFYcIkHXOg0w==",
- "dev": true,
- "engines": {
- "node": ">=6.9.0"
- }
- },
- "node_modules/@babel/parser": {
- "version": "7.25.4",
- "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.25.4.tgz",
- "integrity": "sha512-nq+eWrOgdtu3jG5Os4TQP3x3cLA8hR8TvJNjD8vnPa20WGycimcparWnLK4jJhElTK6SDyuJo1weMKO/5LpmLA==",
- "dev": true,
- "dependencies": {
- "@babel/types": "^7.25.4"
- },
- "bin": {
- "parser": "bin/babel-parser.js"
- },
- "engines": {
- "node": ">=6.0.0"
- }
- },
- "node_modules/@babel/types": {
- "version": "7.25.4",
- "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.25.4.tgz",
- "integrity": "sha512-zQ1ijeeCXVEh+aNL0RlmkPkG8HUiDcU2pzQQFjtbntgAczRASFzj4H+6+bV+dy1ntKR14I/DypeuRG1uma98iQ==",
- "dev": true,
- "dependencies": {
- "@babel/helper-string-parser": "^7.24.8",
- "@babel/helper-validator-identifier": "^7.24.7",
- "to-fast-properties": "^2.0.0"
- },
- "engines": {
- "node": ">=6.9.0"
- }
- },
- "node_modules/@braintree/sanitize-url": {
- "version": "7.1.1",
- "resolved": "https://registry.npmjs.org/@braintree/sanitize-url/-/sanitize-url-7.1.1.tgz",
- "integrity": "sha512-i1L7noDNxtFyL5DmZafWy1wRVhGehQmzZaz1HiN5e7iylJMSZR7ekOV7NsIqa5qBldlLrsKv4HbgFUVlQrz8Mw==",
- "license": "MIT"
- },
- "node_modules/@chevrotain/cst-dts-gen": {
- "version": "11.0.3",
- "resolved": "https://registry.npmjs.org/@chevrotain/cst-dts-gen/-/cst-dts-gen-11.0.3.tgz",
- "integrity": "sha512-BvIKpRLeS/8UbfxXxgC33xOumsacaeCKAjAeLyOn7Pcp95HiRbrpl14S+9vaZLolnbssPIUuiUd8IvgkRyt6NQ==",
- "license": "Apache-2.0",
- "dependencies": {
- "@chevrotain/gast": "11.0.3",
- "@chevrotain/types": "11.0.3",
- "lodash-es": "4.17.21"
- }
- },
- "node_modules/@chevrotain/gast": {
- "version": "11.0.3",
- "resolved": "https://registry.npmjs.org/@chevrotain/gast/-/gast-11.0.3.tgz",
- "integrity": "sha512-+qNfcoNk70PyS/uxmj3li5NiECO+2YKZZQMbmjTqRI3Qchu8Hig/Q9vgkHpI3alNjr7M+a2St5pw5w5F6NL5/Q==",
- "license": "Apache-2.0",
- "dependencies": {
- "@chevrotain/types": "11.0.3",
- "lodash-es": "4.17.21"
- }
- },
- "node_modules/@chevrotain/regexp-to-ast": {
- "version": "11.0.3",
- "resolved": "https://registry.npmjs.org/@chevrotain/regexp-to-ast/-/regexp-to-ast-11.0.3.tgz",
- "integrity": "sha512-1fMHaBZxLFvWI067AVbGJav1eRY7N8DDvYCTwGBiE/ytKBgP8azTdgyrKyWZ9Mfh09eHWb5PgTSO8wi7U824RA==",
- "license": "Apache-2.0"
- },
- "node_modules/@chevrotain/types": {
- "version": "11.0.3",
- "resolved": "https://registry.npmjs.org/@chevrotain/types/-/types-11.0.3.tgz",
- "integrity": "sha512-gsiM3G8b58kZC2HaWR50gu6Y1440cHiJ+i3JUvcp/35JchYejb2+5MVeJK0iKThYpAa/P2PYFV4hoi44HD+aHQ==",
- "license": "Apache-2.0"
- },
- "node_modules/@chevrotain/utils": {
- "version": "11.0.3",
- "resolved": "https://registry.npmjs.org/@chevrotain/utils/-/utils-11.0.3.tgz",
- "integrity": "sha512-YslZMgtJUyuMbZ+aKvfF3x1f5liK4mWNxghFRv7jqRR9C3R3fAOGTTKvxXDa2Y1s9zSbcpuO0cAxDYsc9SrXoQ==",
- "license": "Apache-2.0"
- },
- "node_modules/@docsearch/css": {
- "version": "3.6.1",
- "resolved": "https://registry.npmjs.org/@docsearch/css/-/css-3.6.1.tgz",
- "integrity": "sha512-VtVb5DS+0hRIprU2CO6ZQjK2Zg4QU5HrDM1+ix6rT0umsYvFvatMAnf97NHZlVWDaaLlx7GRfR/7FikANiM2Fg==",
- "dev": true
- },
- "node_modules/@docsearch/js": {
- "version": "3.6.1",
- "resolved": "https://registry.npmjs.org/@docsearch/js/-/js-3.6.1.tgz",
- "integrity": "sha512-erI3RRZurDr1xES5hvYJ3Imp7jtrXj6f1xYIzDzxiS7nNBufYWPbJwrmMqWC5g9y165PmxEmN9pklGCdLi0Iqg==",
- "dev": true,
- "dependencies": {
- "@docsearch/react": "3.6.1",
- "preact": "^10.0.0"
- }
- },
- "node_modules/@docsearch/react": {
- "version": "3.6.1",
- "resolved": "https://registry.npmjs.org/@docsearch/react/-/react-3.6.1.tgz",
- "integrity": "sha512-qXZkEPvybVhSXj0K7U3bXc233tk5e8PfhoZ6MhPOiik/qUQxYC+Dn9DnoS7CxHQQhHfCvTiN0eY9M12oRghEXw==",
- "dev": true,
- "dependencies": {
- "@algolia/autocomplete-core": "1.9.3",
- "@algolia/autocomplete-preset-algolia": "1.9.3",
- "@docsearch/css": "3.6.1",
- "algoliasearch": "^4.19.1"
- },
- "peerDependencies": {
- "@types/react": ">= 16.8.0 < 19.0.0",
- "react": ">= 16.8.0 < 19.0.0",
- "react-dom": ">= 16.8.0 < 19.0.0",
- "search-insights": ">= 1 < 3"
- },
- "peerDependenciesMeta": {
- "@types/react": {
- "optional": true
- },
- "react": {
- "optional": true
- },
- "react-dom": {
- "optional": true
- },
- "search-insights": {
- "optional": true
- }
- }
- },
- "node_modules/@esbuild/aix-ppc64": {
- "version": "0.21.5",
- "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.21.5.tgz",
- "integrity": "sha512-1SDgH6ZSPTlggy1yI6+Dbkiz8xzpHJEVAlF/AM1tHPLsf5STom9rwtjE4hKAF20FfXXNTFqEYXyJNWh1GiZedQ==",
- "cpu": [
- "ppc64"
- ],
- "dev": true,
- "optional": true,
- "os": [
- "aix"
- ],
- "engines": {
- "node": ">=12"
- }
- },
- "node_modules/@esbuild/android-arm": {
- "version": "0.21.5",
- "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.21.5.tgz",
- "integrity": "sha512-vCPvzSjpPHEi1siZdlvAlsPxXl7WbOVUBBAowWug4rJHb68Ox8KualB+1ocNvT5fjv6wpkX6o/iEpbDrf68zcg==",
- "cpu": [
- "arm"
- ],
- "dev": true,
- "optional": true,
- "os": [
- "android"
- ],
- "engines": {
- "node": ">=12"
- }
- },
- "node_modules/@esbuild/android-arm64": {
- "version": "0.21.5",
- "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.21.5.tgz",
- "integrity": "sha512-c0uX9VAUBQ7dTDCjq+wdyGLowMdtR/GoC2U5IYk/7D1H1JYC0qseD7+11iMP2mRLN9RcCMRcjC4YMclCzGwS/A==",
- "cpu": [
- "arm64"
- ],
- "dev": true,
- "optional": true,
- "os": [
- "android"
- ],
- "engines": {
- "node": ">=12"
- }
- },
- "node_modules/@esbuild/android-x64": {
- "version": "0.21.5",
- "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.21.5.tgz",
- "integrity": "sha512-D7aPRUUNHRBwHxzxRvp856rjUHRFW1SdQATKXH2hqA0kAZb1hKmi02OpYRacl0TxIGz/ZmXWlbZgjwWYaCakTA==",
- "cpu": [
- "x64"
- ],
- "dev": true,
- "optional": true,
- "os": [
- "android"
- ],
- "engines": {
- "node": ">=12"
- }
- },
- "node_modules/@esbuild/darwin-arm64": {
- "version": "0.21.5",
- "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.21.5.tgz",
- "integrity": "sha512-DwqXqZyuk5AiWWf3UfLiRDJ5EDd49zg6O9wclZ7kUMv2WRFr4HKjXp/5t8JZ11QbQfUS6/cRCKGwYhtNAY88kQ==",
- "cpu": [
- "arm64"
- ],
- "dev": true,
- "optional": true,
- "os": [
- "darwin"
- ],
- "engines": {
- "node": ">=12"
- }
- },
- "node_modules/@esbuild/darwin-x64": {
- "version": "0.21.5",
- "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.21.5.tgz",
- "integrity": "sha512-se/JjF8NlmKVG4kNIuyWMV/22ZaerB+qaSi5MdrXtd6R08kvs2qCN4C09miupktDitvh8jRFflwGFBQcxZRjbw==",
- "cpu": [
- "x64"
- ],
- "dev": true,
- "optional": true,
- "os": [
- "darwin"
- ],
- "engines": {
- "node": ">=12"
- }
- },
- "node_modules/@esbuild/freebsd-arm64": {
- "version": "0.21.5",
- "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.21.5.tgz",
- "integrity": "sha512-5JcRxxRDUJLX8JXp/wcBCy3pENnCgBR9bN6JsY4OmhfUtIHe3ZW0mawA7+RDAcMLrMIZaf03NlQiX9DGyB8h4g==",
- "cpu": [
- "arm64"
- ],
- "dev": true,
- "optional": true,
- "os": [
- "freebsd"
- ],
- "engines": {
- "node": ">=12"
- }
- },
- "node_modules/@esbuild/freebsd-x64": {
- "version": "0.21.5",
- "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.21.5.tgz",
- "integrity": "sha512-J95kNBj1zkbMXtHVH29bBriQygMXqoVQOQYA+ISs0/2l3T9/kj42ow2mpqerRBxDJnmkUDCaQT/dfNXWX/ZZCQ==",
- "cpu": [
- "x64"
- ],
- "dev": true,
- "optional": true,
- "os": [
- "freebsd"
- ],
- "engines": {
- "node": ">=12"
- }
- },
- "node_modules/@esbuild/linux-arm": {
- "version": "0.21.5",
- "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.21.5.tgz",
- "integrity": "sha512-bPb5AHZtbeNGjCKVZ9UGqGwo8EUu4cLq68E95A53KlxAPRmUyYv2D6F0uUI65XisGOL1hBP5mTronbgo+0bFcA==",
- "cpu": [
- "arm"
- ],
- "dev": true,
- "optional": true,
- "os": [
- "linux"
- ],
- "engines": {
- "node": ">=12"
- }
- },
- "node_modules/@esbuild/linux-arm64": {
- "version": "0.21.5",
- "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.21.5.tgz",
- "integrity": "sha512-ibKvmyYzKsBeX8d8I7MH/TMfWDXBF3db4qM6sy+7re0YXya+K1cem3on9XgdT2EQGMu4hQyZhan7TeQ8XkGp4Q==",
- "cpu": [
- "arm64"
- ],
- "dev": true,
- "optional": true,
- "os": [
- "linux"
- ],
- "engines": {
- "node": ">=12"
- }
- },
- "node_modules/@esbuild/linux-ia32": {
- "version": "0.21.5",
- "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.21.5.tgz",
- "integrity": "sha512-YvjXDqLRqPDl2dvRODYmmhz4rPeVKYvppfGYKSNGdyZkA01046pLWyRKKI3ax8fbJoK5QbxblURkwK/MWY18Tg==",
- "cpu": [
- "ia32"
- ],
- "dev": true,
- "optional": true,
- "os": [
- "linux"
- ],
- "engines": {
- "node": ">=12"
- }
- },
- "node_modules/@esbuild/linux-loong64": {
- "version": "0.21.5",
- "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.21.5.tgz",
- "integrity": "sha512-uHf1BmMG8qEvzdrzAqg2SIG/02+4/DHB6a9Kbya0XDvwDEKCoC8ZRWI5JJvNdUjtciBGFQ5PuBlpEOXQj+JQSg==",
- "cpu": [
- "loong64"
- ],
- "dev": true,
- "optional": true,
- "os": [
- "linux"
- ],
- "engines": {
- "node": ">=12"
- }
- },
- "node_modules/@esbuild/linux-mips64el": {
- "version": "0.21.5",
- "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.21.5.tgz",
- "integrity": "sha512-IajOmO+KJK23bj52dFSNCMsz1QP1DqM6cwLUv3W1QwyxkyIWecfafnI555fvSGqEKwjMXVLokcV5ygHW5b3Jbg==",
- "cpu": [
- "mips64el"
- ],
- "dev": true,
- "optional": true,
- "os": [
- "linux"
- ],
- "engines": {
- "node": ">=12"
- }
- },
- "node_modules/@esbuild/linux-ppc64": {
- "version": "0.21.5",
- "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.21.5.tgz",
- "integrity": "sha512-1hHV/Z4OEfMwpLO8rp7CvlhBDnjsC3CttJXIhBi+5Aj5r+MBvy4egg7wCbe//hSsT+RvDAG7s81tAvpL2XAE4w==",
- "cpu": [
- "ppc64"
- ],
- "dev": true,
- "optional": true,
- "os": [
- "linux"
- ],
- "engines": {
- "node": ">=12"
- }
- },
- "node_modules/@esbuild/linux-riscv64": {
- "version": "0.21.5",
- "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.21.5.tgz",
- "integrity": "sha512-2HdXDMd9GMgTGrPWnJzP2ALSokE/0O5HhTUvWIbD3YdjME8JwvSCnNGBnTThKGEB91OZhzrJ4qIIxk/SBmyDDA==",
- "cpu": [
- "riscv64"
- ],
- "dev": true,
- "optional": true,
- "os": [
- "linux"
- ],
- "engines": {
- "node": ">=12"
- }
- },
- "node_modules/@esbuild/linux-s390x": {
- "version": "0.21.5",
- "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.21.5.tgz",
- "integrity": "sha512-zus5sxzqBJD3eXxwvjN1yQkRepANgxE9lgOW2qLnmr8ikMTphkjgXu1HR01K4FJg8h1kEEDAqDcZQtbrRnB41A==",
- "cpu": [
- "s390x"
- ],
- "dev": true,
- "optional": true,
- "os": [
- "linux"
- ],
- "engines": {
- "node": ">=12"
- }
- },
- "node_modules/@esbuild/linux-x64": {
- "version": "0.21.5",
- "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.21.5.tgz",
- "integrity": "sha512-1rYdTpyv03iycF1+BhzrzQJCdOuAOtaqHTWJZCWvijKD2N5Xu0TtVC8/+1faWqcP9iBCWOmjmhoH94dH82BxPQ==",
- "cpu": [
- "x64"
- ],
- "dev": true,
- "optional": true,
- "os": [
- "linux"
- ],
- "engines": {
- "node": ">=12"
- }
- },
- "node_modules/@esbuild/netbsd-x64": {
- "version": "0.21.5",
- "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.21.5.tgz",
- "integrity": "sha512-Woi2MXzXjMULccIwMnLciyZH4nCIMpWQAs049KEeMvOcNADVxo0UBIQPfSmxB3CWKedngg7sWZdLvLczpe0tLg==",
- "cpu": [
- "x64"
- ],
- "dev": true,
- "optional": true,
- "os": [
- "netbsd"
- ],
- "engines": {
- "node": ">=12"
- }
- },
- "node_modules/@esbuild/openbsd-x64": {
- "version": "0.21.5",
- "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.21.5.tgz",
- "integrity": "sha512-HLNNw99xsvx12lFBUwoT8EVCsSvRNDVxNpjZ7bPn947b8gJPzeHWyNVhFsaerc0n3TsbOINvRP2byTZ5LKezow==",
- "cpu": [
- "x64"
- ],
- "dev": true,
- "optional": true,
- "os": [
- "openbsd"
- ],
- "engines": {
- "node": ">=12"
- }
- },
- "node_modules/@esbuild/sunos-x64": {
- "version": "0.21.5",
- "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.21.5.tgz",
- "integrity": "sha512-6+gjmFpfy0BHU5Tpptkuh8+uw3mnrvgs+dSPQXQOv3ekbordwnzTVEb4qnIvQcYXq6gzkyTnoZ9dZG+D4garKg==",
- "cpu": [
- "x64"
- ],
- "dev": true,
- "optional": true,
- "os": [
- "sunos"
- ],
- "engines": {
- "node": ">=12"
- }
- },
- "node_modules/@esbuild/win32-arm64": {
- "version": "0.21.5",
- "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.21.5.tgz",
- "integrity": "sha512-Z0gOTd75VvXqyq7nsl93zwahcTROgqvuAcYDUr+vOv8uHhNSKROyU961kgtCD1e95IqPKSQKH7tBTslnS3tA8A==",
- "cpu": [
- "arm64"
- ],
- "dev": true,
- "optional": true,
- "os": [
- "win32"
- ],
- "engines": {
- "node": ">=12"
- }
- },
- "node_modules/@esbuild/win32-ia32": {
- "version": "0.21.5",
- "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.21.5.tgz",
- "integrity": "sha512-SWXFF1CL2RVNMaVs+BBClwtfZSvDgtL//G/smwAc5oVK/UPu2Gu9tIaRgFmYFFKrmg3SyAjSrElf0TiJ1v8fYA==",
- "cpu": [
- "ia32"
- ],
- "dev": true,
- "optional": true,
- "os": [
- "win32"
- ],
- "engines": {
- "node": ">=12"
- }
- },
- "node_modules/@esbuild/win32-x64": {
- "version": "0.21.5",
- "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.21.5.tgz",
- "integrity": "sha512-tQd/1efJuzPC6rCFwEvLtci/xNFcTZknmXs98FYDfGE4wP9ClFV98nyKrzJKVPMhdDnjzLhdUyMX4PsQAPjwIw==",
- "cpu": [
- "x64"
- ],
- "dev": true,
- "optional": true,
- "os": [
- "win32"
- ],
- "engines": {
- "node": ">=12"
- }
- },
- "node_modules/@iconify/types": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/@iconify/types/-/types-2.0.0.tgz",
- "integrity": "sha512-+wluvCrRhXrhyOmRDJ3q8mux9JkKy5SJ/v8ol2tu4FVjyYvtEzkc/3pK15ET6RKg4b4w4BmTk1+gsCUhf21Ykg==",
- "license": "MIT"
- },
- "node_modules/@iconify/utils": {
- "version": "2.3.0",
- "resolved": "https://registry.npmjs.org/@iconify/utils/-/utils-2.3.0.tgz",
- "integrity": "sha512-GmQ78prtwYW6EtzXRU1rY+KwOKfz32PD7iJh6Iyqw68GiKuoZ2A6pRtzWONz5VQJbp50mEjXh/7NkumtrAgRKA==",
- "license": "MIT",
- "dependencies": {
- "@antfu/install-pkg": "^1.0.0",
- "@antfu/utils": "^8.1.0",
- "@iconify/types": "^2.0.0",
- "debug": "^4.4.0",
- "globals": "^15.14.0",
- "kolorist": "^1.8.0",
- "local-pkg": "^1.0.0",
- "mlly": "^1.7.4"
- }
- },
- "node_modules/@jridgewell/sourcemap-codec": {
- "version": "1.5.0",
- "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz",
- "integrity": "sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==",
- "dev": true
- },
- "node_modules/@mermaid-js/parser": {
- "version": "0.6.0",
- "resolved": "https://registry.npmjs.org/@mermaid-js/parser/-/parser-0.6.0.tgz",
- "integrity": "sha512-7DNESgpyZ5WG1SIkrYafVBhWmImtmQuoxOO1lawI3gQYWxBX3v1FW3IyuuRfKJAO06XrZR71W0Kif5VEGGd4VA==",
- "license": "MIT",
- "dependencies": {
- "langium": "3.3.1"
- }
- },
- "node_modules/@rollup/rollup-android-arm-eabi": {
- "version": "4.27.4",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.27.4.tgz",
- "integrity": "sha512-2Y3JT6f5MrQkICUyRVCw4oa0sutfAsgaSsb0Lmmy1Wi2y7X5vT9Euqw4gOsCyy0YfKURBg35nhUKZS4mDcfULw==",
- "cpu": [
- "arm"
- ],
- "dev": true,
- "optional": true,
- "os": [
- "android"
- ]
- },
- "node_modules/@rollup/rollup-android-arm64": {
- "version": "4.27.4",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.27.4.tgz",
- "integrity": "sha512-wzKRQXISyi9UdCVRqEd0H4cMpzvHYt1f/C3CoIjES6cG++RHKhrBj2+29nPF0IB5kpy9MS71vs07fvrNGAl/iA==",
- "cpu": [
- "arm64"
- ],
- "dev": true,
- "optional": true,
- "os": [
- "android"
- ]
- },
- "node_modules/@rollup/rollup-darwin-arm64": {
- "version": "4.27.4",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.27.4.tgz",
- "integrity": "sha512-PlNiRQapift4LNS8DPUHuDX/IdXiLjf8mc5vdEmUR0fF/pyy2qWwzdLjB+iZquGr8LuN4LnUoSEvKRwjSVYz3Q==",
- "cpu": [
- "arm64"
- ],
- "dev": true,
- "optional": true,
- "os": [
- "darwin"
- ]
- },
- "node_modules/@rollup/rollup-darwin-x64": {
- "version": "4.27.4",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.27.4.tgz",
- "integrity": "sha512-o9bH2dbdgBDJaXWJCDTNDYa171ACUdzpxSZt+u/AAeQ20Nk5x+IhA+zsGmrQtpkLiumRJEYef68gcpn2ooXhSQ==",
- "cpu": [
- "x64"
- ],
- "dev": true,
- "optional": true,
- "os": [
- "darwin"
- ]
- },
- "node_modules/@rollup/rollup-freebsd-arm64": {
- "version": "4.27.4",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.27.4.tgz",
- "integrity": "sha512-NBI2/i2hT9Q+HySSHTBh52da7isru4aAAo6qC3I7QFVsuhxi2gM8t/EI9EVcILiHLj1vfi+VGGPaLOUENn7pmw==",
- "cpu": [
- "arm64"
- ],
- "dev": true,
- "optional": true,
- "os": [
- "freebsd"
- ]
- },
- "node_modules/@rollup/rollup-freebsd-x64": {
- "version": "4.27.4",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.27.4.tgz",
- "integrity": "sha512-wYcC5ycW2zvqtDYrE7deary2P2UFmSh85PUpAx+dwTCO9uw3sgzD6Gv9n5X4vLaQKsrfTSZZ7Z7uynQozPVvWA==",
- "cpu": [
- "x64"
- ],
- "dev": true,
- "optional": true,
- "os": [
- "freebsd"
- ]
- },
- "node_modules/@rollup/rollup-linux-arm-gnueabihf": {
- "version": "4.27.4",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.27.4.tgz",
- "integrity": "sha512-9OwUnK/xKw6DyRlgx8UizeqRFOfi9mf5TYCw1uolDaJSbUmBxP85DE6T4ouCMoN6pXw8ZoTeZCSEfSaYo+/s1w==",
- "cpu": [
- "arm"
- ],
- "dev": true,
- "optional": true,
- "os": [
- "linux"
- ]
- },
- "node_modules/@rollup/rollup-linux-arm-musleabihf": {
- "version": "4.27.4",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.27.4.tgz",
- "integrity": "sha512-Vgdo4fpuphS9V24WOV+KwkCVJ72u7idTgQaBoLRD0UxBAWTF9GWurJO9YD9yh00BzbkhpeXtm6na+MvJU7Z73A==",
- "cpu": [
- "arm"
- ],
- "dev": true,
- "optional": true,
- "os": [
- "linux"
- ]
- },
- "node_modules/@rollup/rollup-linux-arm64-gnu": {
- "version": "4.27.4",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.27.4.tgz",
- "integrity": "sha512-pleyNgyd1kkBkw2kOqlBx+0atfIIkkExOTiifoODo6qKDSpnc6WzUY5RhHdmTdIJXBdSnh6JknnYTtmQyobrVg==",
- "cpu": [
- "arm64"
- ],
- "dev": true,
- "optional": true,
- "os": [
- "linux"
- ]
- },
- "node_modules/@rollup/rollup-linux-arm64-musl": {
- "version": "4.27.4",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.27.4.tgz",
- "integrity": "sha512-caluiUXvUuVyCHr5DxL8ohaaFFzPGmgmMvwmqAITMpV/Q+tPoaHZ/PWa3t8B2WyoRcIIuu1hkaW5KkeTDNSnMA==",
- "cpu": [
- "arm64"
- ],
- "dev": true,
- "optional": true,
- "os": [
- "linux"
- ]
- },
- "node_modules/@rollup/rollup-linux-powerpc64le-gnu": {
- "version": "4.27.4",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.27.4.tgz",
- "integrity": "sha512-FScrpHrO60hARyHh7s1zHE97u0KlT/RECzCKAdmI+LEoC1eDh/RDji9JgFqyO+wPDb86Oa/sXkily1+oi4FzJQ==",
- "cpu": [
- "ppc64"
- ],
- "dev": true,
- "optional": true,
- "os": [
- "linux"
- ]
- },
- "node_modules/@rollup/rollup-linux-riscv64-gnu": {
- "version": "4.27.4",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.27.4.tgz",
- "integrity": "sha512-qyyprhyGb7+RBfMPeww9FlHwKkCXdKHeGgSqmIXw9VSUtvyFZ6WZRtnxgbuz76FK7LyoN8t/eINRbPUcvXB5fw==",
- "cpu": [
- "riscv64"
- ],
- "dev": true,
- "optional": true,
- "os": [
- "linux"
- ]
- },
- "node_modules/@rollup/rollup-linux-s390x-gnu": {
- "version": "4.27.4",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.27.4.tgz",
- "integrity": "sha512-PFz+y2kb6tbh7m3A7nA9++eInGcDVZUACulf/KzDtovvdTizHpZaJty7Gp0lFwSQcrnebHOqxF1MaKZd7psVRg==",
- "cpu": [
- "s390x"
- ],
- "dev": true,
- "optional": true,
- "os": [
- "linux"
- ]
- },
- "node_modules/@rollup/rollup-linux-x64-gnu": {
- "version": "4.27.4",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.27.4.tgz",
- "integrity": "sha512-Ni8mMtfo+o/G7DVtweXXV/Ol2TFf63KYjTtoZ5f078AUgJTmaIJnj4JFU7TK/9SVWTaSJGxPi5zMDgK4w+Ez7Q==",
- "cpu": [
- "x64"
- ],
- "dev": true,
- "optional": true,
- "os": [
- "linux"
- ]
- },
- "node_modules/@rollup/rollup-linux-x64-musl": {
- "version": "4.27.4",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.27.4.tgz",
- "integrity": "sha512-5AeeAF1PB9TUzD+3cROzFTnAJAcVUGLuR8ng0E0WXGkYhp6RD6L+6szYVX+64Rs0r72019KHZS1ka1q+zU/wUw==",
- "cpu": [
- "x64"
- ],
- "dev": true,
- "optional": true,
- "os": [
- "linux"
- ]
- },
- "node_modules/@rollup/rollup-win32-arm64-msvc": {
- "version": "4.27.4",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.27.4.tgz",
- "integrity": "sha512-yOpVsA4K5qVwu2CaS3hHxluWIK5HQTjNV4tWjQXluMiiiu4pJj4BN98CvxohNCpcjMeTXk/ZMJBRbgRg8HBB6A==",
- "cpu": [
- "arm64"
- ],
- "dev": true,
- "optional": true,
- "os": [
- "win32"
- ]
- },
- "node_modules/@rollup/rollup-win32-ia32-msvc": {
- "version": "4.27.4",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.27.4.tgz",
- "integrity": "sha512-KtwEJOaHAVJlxV92rNYiG9JQwQAdhBlrjNRp7P9L8Cb4Rer3in+0A+IPhJC9y68WAi9H0sX4AiG2NTsVlmqJeQ==",
- "cpu": [
- "ia32"
- ],
- "dev": true,
- "optional": true,
- "os": [
- "win32"
- ]
- },
- "node_modules/@rollup/rollup-win32-x64-msvc": {
- "version": "4.27.4",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.27.4.tgz",
- "integrity": "sha512-3j4jx1TppORdTAoBJRd+/wJRGCPC0ETWkXOecJ6PPZLj6SptXkrXcNqdj0oclbKML6FkQltdz7bBA3rUSirZug==",
- "cpu": [
- "x64"
- ],
- "dev": true,
- "optional": true,
- "os": [
- "win32"
- ]
- },
- "node_modules/@shikijs/core": {
- "version": "1.14.1",
- "resolved": "https://registry.npmjs.org/@shikijs/core/-/core-1.14.1.tgz",
- "integrity": "sha512-KyHIIpKNaT20FtFPFjCQB5WVSTpLR/n+jQXhWHWVUMm9MaOaG9BGOG0MSyt7yA4+Lm+4c9rTc03tt3nYzeYSfw==",
- "dev": true,
- "dependencies": {
- "@types/hast": "^3.0.4"
- }
- },
- "node_modules/@shikijs/transformers": {
- "version": "1.14.1",
- "resolved": "https://registry.npmjs.org/@shikijs/transformers/-/transformers-1.14.1.tgz",
- "integrity": "sha512-JJqL8QBVCJh3L61jqqEXgFq1cTycwjcGj7aSmqOEsbxnETM9hRlaB74QuXvY/fVJNjbNt8nvWo0VwAXKvMSLRg==",
- "dev": true,
- "dependencies": {
- "shiki": "1.14.1"
- }
- },
- "node_modules/@types/d3": {
- "version": "7.4.3",
- "resolved": "https://registry.npmjs.org/@types/d3/-/d3-7.4.3.tgz",
- "integrity": "sha512-lZXZ9ckh5R8uiFVt8ogUNf+pIrK4EsWrx2Np75WvF/eTpJ0FMHNhjXk8CKEx/+gpHbNQyJWehbFaTvqmHWB3ww==",
- "license": "MIT",
- "dependencies": {
- "@types/d3-array": "*",
- "@types/d3-axis": "*",
- "@types/d3-brush": "*",
- "@types/d3-chord": "*",
- "@types/d3-color": "*",
- "@types/d3-contour": "*",
- "@types/d3-delaunay": "*",
- "@types/d3-dispatch": "*",
- "@types/d3-drag": "*",
- "@types/d3-dsv": "*",
- "@types/d3-ease": "*",
- "@types/d3-fetch": "*",
- "@types/d3-force": "*",
- "@types/d3-format": "*",
- "@types/d3-geo": "*",
- "@types/d3-hierarchy": "*",
- "@types/d3-interpolate": "*",
- "@types/d3-path": "*",
- "@types/d3-polygon": "*",
- "@types/d3-quadtree": "*",
- "@types/d3-random": "*",
- "@types/d3-scale": "*",
- "@types/d3-scale-chromatic": "*",
- "@types/d3-selection": "*",
- "@types/d3-shape": "*",
- "@types/d3-time": "*",
- "@types/d3-time-format": "*",
- "@types/d3-timer": "*",
- "@types/d3-transition": "*",
- "@types/d3-zoom": "*"
- }
- },
- "node_modules/@types/d3-array": {
- "version": "3.2.1",
- "resolved": "https://registry.npmjs.org/@types/d3-array/-/d3-array-3.2.1.tgz",
- "integrity": "sha512-Y2Jn2idRrLzUfAKV2LyRImR+y4oa2AntrgID95SHJxuMUrkNXmanDSed71sRNZysveJVt1hLLemQZIady0FpEg==",
- "license": "MIT"
- },
- "node_modules/@types/d3-axis": {
- "version": "3.0.6",
- "resolved": "https://registry.npmjs.org/@types/d3-axis/-/d3-axis-3.0.6.tgz",
- "integrity": "sha512-pYeijfZuBd87T0hGn0FO1vQ/cgLk6E1ALJjfkC0oJ8cbwkZl3TpgS8bVBLZN+2jjGgg38epgxb2zmoGtSfvgMw==",
- "license": "MIT",
- "dependencies": {
- "@types/d3-selection": "*"
- }
- },
- "node_modules/@types/d3-brush": {
- "version": "3.0.6",
- "resolved": "https://registry.npmjs.org/@types/d3-brush/-/d3-brush-3.0.6.tgz",
- "integrity": "sha512-nH60IZNNxEcrh6L1ZSMNA28rj27ut/2ZmI3r96Zd+1jrZD++zD3LsMIjWlvg4AYrHn/Pqz4CF3veCxGjtbqt7A==",
- "license": "MIT",
- "dependencies": {
- "@types/d3-selection": "*"
- }
- },
- "node_modules/@types/d3-chord": {
- "version": "3.0.6",
- "resolved": "https://registry.npmjs.org/@types/d3-chord/-/d3-chord-3.0.6.tgz",
- "integrity": "sha512-LFYWWd8nwfwEmTZG9PfQxd17HbNPksHBiJHaKuY1XeqscXacsS2tyoo6OdRsjf+NQYeB6XrNL3a25E3gH69lcg==",
- "license": "MIT"
- },
- "node_modules/@types/d3-color": {
- "version": "3.1.3",
- "resolved": "https://registry.npmjs.org/@types/d3-color/-/d3-color-3.1.3.tgz",
- "integrity": "sha512-iO90scth9WAbmgv7ogoq57O9YpKmFBbmoEoCHDB2xMBY0+/KVrqAaCDyCE16dUspeOvIxFFRI+0sEtqDqy2b4A==",
- "license": "MIT"
- },
- "node_modules/@types/d3-contour": {
- "version": "3.0.6",
- "resolved": "https://registry.npmjs.org/@types/d3-contour/-/d3-contour-3.0.6.tgz",
- "integrity": "sha512-BjzLgXGnCWjUSYGfH1cpdo41/hgdWETu4YxpezoztawmqsvCeep+8QGfiY6YbDvfgHz/DkjeIkkZVJavB4a3rg==",
- "license": "MIT",
- "dependencies": {
- "@types/d3-array": "*",
- "@types/geojson": "*"
- }
- },
- "node_modules/@types/d3-delaunay": {
- "version": "6.0.4",
- "resolved": "https://registry.npmjs.org/@types/d3-delaunay/-/d3-delaunay-6.0.4.tgz",
- "integrity": "sha512-ZMaSKu4THYCU6sV64Lhg6qjf1orxBthaC161plr5KuPHo3CNm8DTHiLw/5Eq2b6TsNP0W0iJrUOFscY6Q450Hw==",
- "license": "MIT"
- },
- "node_modules/@types/d3-dispatch": {
- "version": "3.0.6",
- "resolved": "https://registry.npmjs.org/@types/d3-dispatch/-/d3-dispatch-3.0.6.tgz",
- "integrity": "sha512-4fvZhzMeeuBJYZXRXrRIQnvUYfyXwYmLsdiN7XXmVNQKKw1cM8a5WdID0g1hVFZDqT9ZqZEY5pD44p24VS7iZQ==",
- "license": "MIT"
- },
- "node_modules/@types/d3-drag": {
- "version": "3.0.7",
- "resolved": "https://registry.npmjs.org/@types/d3-drag/-/d3-drag-3.0.7.tgz",
- "integrity": "sha512-HE3jVKlzU9AaMazNufooRJ5ZpWmLIoc90A37WU2JMmeq28w1FQqCZswHZ3xR+SuxYftzHq6WU6KJHvqxKzTxxQ==",
- "license": "MIT",
- "dependencies": {
- "@types/d3-selection": "*"
- }
- },
- "node_modules/@types/d3-dsv": {
- "version": "3.0.7",
- "resolved": "https://registry.npmjs.org/@types/d3-dsv/-/d3-dsv-3.0.7.tgz",
- "integrity": "sha512-n6QBF9/+XASqcKK6waudgL0pf/S5XHPPI8APyMLLUHd8NqouBGLsU8MgtO7NINGtPBtk9Kko/W4ea0oAspwh9g==",
- "license": "MIT"
- },
- "node_modules/@types/d3-ease": {
- "version": "3.0.2",
- "resolved": "https://registry.npmjs.org/@types/d3-ease/-/d3-ease-3.0.2.tgz",
- "integrity": "sha512-NcV1JjO5oDzoK26oMzbILE6HW7uVXOHLQvHshBUW4UMdZGfiY6v5BeQwh9a9tCzv+CeefZQHJt5SRgK154RtiA==",
- "license": "MIT"
- },
- "node_modules/@types/d3-fetch": {
- "version": "3.0.7",
- "resolved": "https://registry.npmjs.org/@types/d3-fetch/-/d3-fetch-3.0.7.tgz",
- "integrity": "sha512-fTAfNmxSb9SOWNB9IoG5c8Hg6R+AzUHDRlsXsDZsNp6sxAEOP0tkP3gKkNSO/qmHPoBFTxNrjDprVHDQDvo5aA==",
- "license": "MIT",
- "dependencies": {
- "@types/d3-dsv": "*"
- }
- },
- "node_modules/@types/d3-force": {
- "version": "3.0.10",
- "resolved": "https://registry.npmjs.org/@types/d3-force/-/d3-force-3.0.10.tgz",
- "integrity": "sha512-ZYeSaCF3p73RdOKcjj+swRlZfnYpK1EbaDiYICEEp5Q6sUiqFaFQ9qgoshp5CzIyyb/yD09kD9o2zEltCexlgw==",
- "license": "MIT"
- },
- "node_modules/@types/d3-format": {
- "version": "3.0.4",
- "resolved": "https://registry.npmjs.org/@types/d3-format/-/d3-format-3.0.4.tgz",
- "integrity": "sha512-fALi2aI6shfg7vM5KiR1wNJnZ7r6UuggVqtDA+xiEdPZQwy/trcQaHnwShLuLdta2rTymCNpxYTiMZX/e09F4g==",
- "license": "MIT"
- },
- "node_modules/@types/d3-geo": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/@types/d3-geo/-/d3-geo-3.1.0.tgz",
- "integrity": "sha512-856sckF0oP/diXtS4jNsiQw/UuK5fQG8l/a9VVLeSouf1/PPbBE1i1W852zVwKwYCBkFJJB7nCFTbk6UMEXBOQ==",
- "license": "MIT",
- "dependencies": {
- "@types/geojson": "*"
- }
- },
- "node_modules/@types/d3-hierarchy": {
- "version": "3.1.7",
- "resolved": "https://registry.npmjs.org/@types/d3-hierarchy/-/d3-hierarchy-3.1.7.tgz",
- "integrity": "sha512-tJFtNoYBtRtkNysX1Xq4sxtjK8YgoWUNpIiUee0/jHGRwqvzYxkq0hGVbbOGSz+JgFxxRu4K8nb3YpG3CMARtg==",
- "license": "MIT"
- },
- "node_modules/@types/d3-interpolate": {
- "version": "3.0.4",
- "resolved": "https://registry.npmjs.org/@types/d3-interpolate/-/d3-interpolate-3.0.4.tgz",
- "integrity": "sha512-mgLPETlrpVV1YRJIglr4Ez47g7Yxjl1lj7YKsiMCb27VJH9W8NVM6Bb9d8kkpG/uAQS5AmbA48q2IAolKKo1MA==",
- "license": "MIT",
- "dependencies": {
- "@types/d3-color": "*"
- }
- },
- "node_modules/@types/d3-path": {
- "version": "3.1.1",
- "resolved": "https://registry.npmjs.org/@types/d3-path/-/d3-path-3.1.1.tgz",
- "integrity": "sha512-VMZBYyQvbGmWyWVea0EHs/BwLgxc+MKi1zLDCONksozI4YJMcTt8ZEuIR4Sb1MMTE8MMW49v0IwI5+b7RmfWlg==",
- "license": "MIT"
- },
- "node_modules/@types/d3-polygon": {
- "version": "3.0.2",
- "resolved": "https://registry.npmjs.org/@types/d3-polygon/-/d3-polygon-3.0.2.tgz",
- "integrity": "sha512-ZuWOtMaHCkN9xoeEMr1ubW2nGWsp4nIql+OPQRstu4ypeZ+zk3YKqQT0CXVe/PYqrKpZAi+J9mTs05TKwjXSRA==",
- "license": "MIT"
- },
- "node_modules/@types/d3-quadtree": {
- "version": "3.0.6",
- "resolved": "https://registry.npmjs.org/@types/d3-quadtree/-/d3-quadtree-3.0.6.tgz",
- "integrity": "sha512-oUzyO1/Zm6rsxKRHA1vH0NEDG58HrT5icx/azi9MF1TWdtttWl0UIUsjEQBBh+SIkrpd21ZjEv7ptxWys1ncsg==",
- "license": "MIT"
- },
- "node_modules/@types/d3-random": {
- "version": "3.0.3",
- "resolved": "https://registry.npmjs.org/@types/d3-random/-/d3-random-3.0.3.tgz",
- "integrity": "sha512-Imagg1vJ3y76Y2ea0871wpabqp613+8/r0mCLEBfdtqC7xMSfj9idOnmBYyMoULfHePJyxMAw3nWhJxzc+LFwQ==",
- "license": "MIT"
- },
- "node_modules/@types/d3-scale": {
- "version": "4.0.9",
- "resolved": "https://registry.npmjs.org/@types/d3-scale/-/d3-scale-4.0.9.tgz",
- "integrity": "sha512-dLmtwB8zkAeO/juAMfnV+sItKjlsw2lKdZVVy6LRr0cBmegxSABiLEpGVmSJJ8O08i4+sGR6qQtb6WtuwJdvVw==",
- "license": "MIT",
- "dependencies": {
- "@types/d3-time": "*"
- }
- },
- "node_modules/@types/d3-scale-chromatic": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/@types/d3-scale-chromatic/-/d3-scale-chromatic-3.1.0.tgz",
- "integrity": "sha512-iWMJgwkK7yTRmWqRB5plb1kadXyQ5Sj8V/zYlFGMUBbIPKQScw+Dku9cAAMgJG+z5GYDoMjWGLVOvjghDEFnKQ==",
- "license": "MIT"
- },
- "node_modules/@types/d3-selection": {
- "version": "3.0.11",
- "resolved": "https://registry.npmjs.org/@types/d3-selection/-/d3-selection-3.0.11.tgz",
- "integrity": "sha512-bhAXu23DJWsrI45xafYpkQ4NtcKMwWnAC/vKrd2l+nxMFuvOT3XMYTIj2opv8vq8AO5Yh7Qac/nSeP/3zjTK0w==",
- "license": "MIT"
- },
- "node_modules/@types/d3-shape": {
- "version": "3.1.7",
- "resolved": "https://registry.npmjs.org/@types/d3-shape/-/d3-shape-3.1.7.tgz",
- "integrity": "sha512-VLvUQ33C+3J+8p+Daf+nYSOsjB4GXp19/S/aGo60m9h1v6XaxjiT82lKVWJCfzhtuZ3yD7i/TPeC/fuKLLOSmg==",
- "license": "MIT",
- "dependencies": {
- "@types/d3-path": "*"
- }
- },
- "node_modules/@types/d3-time": {
- "version": "3.0.4",
- "resolved": "https://registry.npmjs.org/@types/d3-time/-/d3-time-3.0.4.tgz",
- "integrity": "sha512-yuzZug1nkAAaBlBBikKZTgzCeA+k1uy4ZFwWANOfKw5z5LRhV0gNA7gNkKm7HoK+HRN0wX3EkxGk0fpbWhmB7g==",
- "license": "MIT"
- },
- "node_modules/@types/d3-time-format": {
- "version": "4.0.3",
- "resolved": "https://registry.npmjs.org/@types/d3-time-format/-/d3-time-format-4.0.3.tgz",
- "integrity": "sha512-5xg9rC+wWL8kdDj153qZcsJ0FWiFt0J5RB6LYUNZjwSnesfblqrI/bJ1wBdJ8OQfncgbJG5+2F+qfqnqyzYxyg==",
- "license": "MIT"
- },
- "node_modules/@types/d3-timer": {
- "version": "3.0.2",
- "resolved": "https://registry.npmjs.org/@types/d3-timer/-/d3-timer-3.0.2.tgz",
- "integrity": "sha512-Ps3T8E8dZDam6fUyNiMkekK3XUsaUEik+idO9/YjPtfj2qruF8tFBXS7XhtE4iIXBLxhmLjP3SXpLhVf21I9Lw==",
- "license": "MIT"
- },
- "node_modules/@types/d3-transition": {
- "version": "3.0.9",
- "resolved": "https://registry.npmjs.org/@types/d3-transition/-/d3-transition-3.0.9.tgz",
- "integrity": "sha512-uZS5shfxzO3rGlu0cC3bjmMFKsXv+SmZZcgp0KD22ts4uGXp5EVYGzu/0YdwZeKmddhcAccYtREJKkPfXkZuCg==",
- "license": "MIT",
- "dependencies": {
- "@types/d3-selection": "*"
- }
- },
- "node_modules/@types/d3-zoom": {
- "version": "3.0.8",
- "resolved": "https://registry.npmjs.org/@types/d3-zoom/-/d3-zoom-3.0.8.tgz",
- "integrity": "sha512-iqMC4/YlFCSlO8+2Ii1GGGliCAY4XdeG748w5vQUbevlbDu0zSjH/+jojorQVBK/se0j6DUFNPBGSqD3YWYnDw==",
- "license": "MIT",
- "dependencies": {
- "@types/d3-interpolate": "*",
- "@types/d3-selection": "*"
- }
- },
- "node_modules/@types/estree": {
- "version": "1.0.6",
- "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.6.tgz",
- "integrity": "sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw==",
- "dev": true
- },
- "node_modules/@types/geojson": {
- "version": "7946.0.16",
- "resolved": "https://registry.npmjs.org/@types/geojson/-/geojson-7946.0.16.tgz",
- "integrity": "sha512-6C8nqWur3j98U6+lXDfTUWIfgvZU+EumvpHKcYjujKH7woYyLj2sUmff0tRhrqM7BohUw7Pz3ZB1jj2gW9Fvmg==",
- "license": "MIT"
- },
- "node_modules/@types/hast": {
- "version": "3.0.4",
- "resolved": "https://registry.npmjs.org/@types/hast/-/hast-3.0.4.tgz",
- "integrity": "sha512-WPs+bbQw5aCj+x6laNGWLH3wviHtoCv/P3+otBhbOhJgG8qtpdAMlTCxLtsTWA7LH1Oh/bFCHsBn0TPS5m30EQ==",
- "dev": true,
- "dependencies": {
- "@types/unist": "*"
- }
- },
- "node_modules/@types/linkify-it": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/@types/linkify-it/-/linkify-it-5.0.0.tgz",
- "integrity": "sha512-sVDA58zAw4eWAffKOaQH5/5j3XeayukzDk+ewSsnv3p4yJEZHCCzMDiZM8e0OUrRvmpGZ85jf4yDHkHsgBNr9Q==",
- "dev": true
- },
- "node_modules/@types/markdown-it": {
- "version": "14.1.2",
- "resolved": "https://registry.npmjs.org/@types/markdown-it/-/markdown-it-14.1.2.tgz",
- "integrity": "sha512-promo4eFwuiW+TfGxhi+0x3czqTYJkG8qB17ZUJiVF10Xm7NLVRSLUsfRTU/6h1e24VvRnXCx+hG7li58lkzog==",
- "dev": true,
- "dependencies": {
- "@types/linkify-it": "^5",
- "@types/mdurl": "^2"
- }
- },
- "node_modules/@types/mdurl": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/@types/mdurl/-/mdurl-2.0.0.tgz",
- "integrity": "sha512-RGdgjQUZba5p6QEFAVx2OGb8rQDL/cPRG7GiedRzMcJ1tYnUANBncjbSB1NRGwbvjcPeikRABz2nshyPk1bhWg==",
- "dev": true
- },
- "node_modules/@types/trusted-types": {
- "version": "2.0.7",
- "resolved": "https://registry.npmjs.org/@types/trusted-types/-/trusted-types-2.0.7.tgz",
- "integrity": "sha512-ScaPdn1dQczgbl0QFTeTOmVHFULt394XJgOQNoyVhZ6r2vLnMLJfBPd53SB52T/3G36VI1/g2MZaX0cwDuXsfw==",
- "license": "MIT",
- "optional": true
- },
- "node_modules/@types/unist": {
- "version": "3.0.3",
- "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.3.tgz",
- "integrity": "sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q==",
- "dev": true
- },
- "node_modules/@types/web-bluetooth": {
- "version": "0.0.20",
- "resolved": "https://registry.npmjs.org/@types/web-bluetooth/-/web-bluetooth-0.0.20.tgz",
- "integrity": "sha512-g9gZnnXVq7gM7v3tJCWV/qw7w+KeOlSHAhgF9RytFyifW6AF61hdT2ucrYhPq9hLs5JIryeupHV3qGk95dH9ow==",
- "dev": true
- },
- "node_modules/@vitejs/plugin-vue": {
- "version": "5.1.2",
- "resolved": "https://registry.npmjs.org/@vitejs/plugin-vue/-/plugin-vue-5.1.2.tgz",
- "integrity": "sha512-nY9IwH12qeiJqumTCLJLE7IiNx7HZ39cbHaysEUd+Myvbz9KAqd2yq+U01Kab1R/H1BmiyM2ShTYlNH32Fzo3A==",
- "dev": true,
- "engines": {
- "node": "^18.0.0 || >=20.0.0"
- },
- "peerDependencies": {
- "vite": "^5.0.0",
- "vue": "^3.2.25"
- }
- },
- "node_modules/@vue/compiler-core": {
- "version": "3.4.38",
- "resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.4.38.tgz",
- "integrity": "sha512-8IQOTCWnLFqfHzOGm9+P8OPSEDukgg3Huc92qSG49if/xI2SAwLHQO2qaPQbjCWPBcQoO1WYfXfTACUrWV3c5A==",
- "dev": true,
- "dependencies": {
- "@babel/parser": "^7.24.7",
- "@vue/shared": "3.4.38",
- "entities": "^4.5.0",
- "estree-walker": "^2.0.2",
- "source-map-js": "^1.2.0"
- }
- },
- "node_modules/@vue/compiler-dom": {
- "version": "3.4.38",
- "resolved": "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.4.38.tgz",
- "integrity": "sha512-Osc/c7ABsHXTsETLgykcOwIxFktHfGSUDkb05V61rocEfsFDcjDLH/IHJSNJP+/Sv9KeN2Lx1V6McZzlSb9EhQ==",
- "dev": true,
- "dependencies": {
- "@vue/compiler-core": "3.4.38",
- "@vue/shared": "3.4.38"
- }
- },
- "node_modules/@vue/compiler-sfc": {
- "version": "3.4.38",
- "resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-3.4.38.tgz",
- "integrity": "sha512-s5QfZ+9PzPh3T5H4hsQDJtI8x7zdJaew/dCGgqZ2630XdzaZ3AD8xGZfBqpT8oaD/p2eedd+pL8tD5vvt5ZYJQ==",
- "dev": true,
- "dependencies": {
- "@babel/parser": "^7.24.7",
- "@vue/compiler-core": "3.4.38",
- "@vue/compiler-dom": "3.4.38",
- "@vue/compiler-ssr": "3.4.38",
- "@vue/shared": "3.4.38",
- "estree-walker": "^2.0.2",
- "magic-string": "^0.30.10",
- "postcss": "^8.4.40",
- "source-map-js": "^1.2.0"
- }
- },
- "node_modules/@vue/compiler-ssr": {
- "version": "3.4.38",
- "resolved": "https://registry.npmjs.org/@vue/compiler-ssr/-/compiler-ssr-3.4.38.tgz",
- "integrity": "sha512-YXznKFQ8dxYpAz9zLuVvfcXhc31FSPFDcqr0kyujbOwNhlmaNvL2QfIy+RZeJgSn5Fk54CWoEUeW+NVBAogGaw==",
- "dev": true,
- "dependencies": {
- "@vue/compiler-dom": "3.4.38",
- "@vue/shared": "3.4.38"
- }
- },
- "node_modules/@vue/devtools-api": {
- "version": "7.3.9",
- "resolved": "https://registry.npmjs.org/@vue/devtools-api/-/devtools-api-7.3.9.tgz",
- "integrity": "sha512-D+GTYtFg68bqSu66EugQUydsOqaDlPLNmYw5oYk8k81uBu9/bVTUrqlAJrAA9Am7MXhKz2gWdDkopY6sOBf/Bg==",
- "dev": true,
- "dependencies": {
- "@vue/devtools-kit": "^7.3.9"
- }
- },
- "node_modules/@vue/devtools-kit": {
- "version": "7.3.9",
- "resolved": "https://registry.npmjs.org/@vue/devtools-kit/-/devtools-kit-7.3.9.tgz",
- "integrity": "sha512-Gr17nA+DaQzqyhNx1DUJr1CJRzTRfbIuuC80ZgU8MD/qNO302tv9la+ROi+Uaw+ULVwU9T71GnwLy4n8m9Lspg==",
- "dev": true,
- "dependencies": {
- "@vue/devtools-shared": "^7.3.9",
- "birpc": "^0.2.17",
- "hookable": "^5.5.3",
- "mitt": "^3.0.1",
- "perfect-debounce": "^1.0.0",
- "speakingurl": "^14.0.1",
- "superjson": "^2.2.1"
- }
- },
- "node_modules/@vue/devtools-shared": {
- "version": "7.3.9",
- "resolved": "https://registry.npmjs.org/@vue/devtools-shared/-/devtools-shared-7.3.9.tgz",
- "integrity": "sha512-CdfMRZKXyI8vw+hqOcQIiLihB6Hbbi7WNZGp7LsuH1Qe4aYAFmTaKjSciRZ301oTnwmU/knC/s5OGuV6UNiNoA==",
- "dev": true,
- "dependencies": {
- "rfdc": "^1.4.1"
- }
- },
- "node_modules/@vue/reactivity": {
- "version": "3.4.38",
- "resolved": "https://registry.npmjs.org/@vue/reactivity/-/reactivity-3.4.38.tgz",
- "integrity": "sha512-4vl4wMMVniLsSYYeldAKzbk72+D3hUnkw9z8lDeJacTxAkXeDAP1uE9xr2+aKIN0ipOL8EG2GPouVTH6yF7Gnw==",
- "dev": true,
- "dependencies": {
- "@vue/shared": "3.4.38"
- }
- },
- "node_modules/@vue/runtime-core": {
- "version": "3.4.38",
- "resolved": "https://registry.npmjs.org/@vue/runtime-core/-/runtime-core-3.4.38.tgz",
- "integrity": "sha512-21z3wA99EABtuf+O3IhdxP0iHgkBs1vuoCAsCKLVJPEjpVqvblwBnTj42vzHRlWDCyxu9ptDm7sI2ZMcWrQqlA==",
- "dev": true,
- "dependencies": {
- "@vue/reactivity": "3.4.38",
- "@vue/shared": "3.4.38"
- }
- },
- "node_modules/@vue/runtime-dom": {
- "version": "3.4.38",
- "resolved": "https://registry.npmjs.org/@vue/runtime-dom/-/runtime-dom-3.4.38.tgz",
- "integrity": "sha512-afZzmUreU7vKwKsV17H1NDThEEmdYI+GCAK/KY1U957Ig2NATPVjCROv61R19fjZNzMmiU03n79OMnXyJVN0UA==",
- "dev": true,
- "dependencies": {
- "@vue/reactivity": "3.4.38",
- "@vue/runtime-core": "3.4.38",
- "@vue/shared": "3.4.38",
- "csstype": "^3.1.3"
- }
- },
- "node_modules/@vue/server-renderer": {
- "version": "3.4.38",
- "resolved": "https://registry.npmjs.org/@vue/server-renderer/-/server-renderer-3.4.38.tgz",
- "integrity": "sha512-NggOTr82FbPEkkUvBm4fTGcwUY8UuTsnWC/L2YZBmvaQ4C4Jl/Ao4HHTB+l7WnFCt5M/dN3l0XLuyjzswGYVCA==",
- "dev": true,
- "dependencies": {
- "@vue/compiler-ssr": "3.4.38",
- "@vue/shared": "3.4.38"
- },
- "peerDependencies": {
- "vue": "3.4.38"
- }
- },
- "node_modules/@vue/shared": {
- "version": "3.4.38",
- "resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.4.38.tgz",
- "integrity": "sha512-q0xCiLkuWWQLzVrecPb0RMsNWyxICOjPrcrwxTUEHb1fsnvni4dcuyG7RT/Ie7VPTvnjzIaWzRMUBsrqNj/hhw==",
- "dev": true
- },
- "node_modules/@vueuse/core": {
- "version": "11.0.3",
- "resolved": "https://registry.npmjs.org/@vueuse/core/-/core-11.0.3.tgz",
- "integrity": "sha512-RENlh64+SYA9XMExmmH1a3TPqeIuJBNNB/63GT35MZI+zpru3oMRUA6cEFr9HmGqEgUisurwGwnIieF6qu3aXw==",
- "dev": true,
- "dependencies": {
- "@types/web-bluetooth": "^0.0.20",
- "@vueuse/metadata": "11.0.3",
- "@vueuse/shared": "11.0.3",
- "vue-demi": ">=0.14.10"
- },
- "funding": {
- "url": "https://github.com/sponsors/antfu"
- }
- },
- "node_modules/@vueuse/core/node_modules/vue-demi": {
- "version": "0.14.10",
- "resolved": "https://registry.npmjs.org/vue-demi/-/vue-demi-0.14.10.tgz",
- "integrity": "sha512-nMZBOwuzabUO0nLgIcc6rycZEebF6eeUfaiQx9+WSk8e29IbLvPU9feI6tqW4kTo3hvoYAJkMh8n8D0fuISphg==",
- "dev": true,
- "hasInstallScript": true,
- "bin": {
- "vue-demi-fix": "bin/vue-demi-fix.js",
- "vue-demi-switch": "bin/vue-demi-switch.js"
- },
- "engines": {
- "node": ">=12"
- },
- "funding": {
- "url": "https://github.com/sponsors/antfu"
- },
- "peerDependencies": {
- "@vue/composition-api": "^1.0.0-rc.1",
- "vue": "^3.0.0-0 || ^2.6.0"
- },
- "peerDependenciesMeta": {
- "@vue/composition-api": {
- "optional": true
- }
- }
- },
- "node_modules/@vueuse/integrations": {
- "version": "11.0.3",
- "resolved": "https://registry.npmjs.org/@vueuse/integrations/-/integrations-11.0.3.tgz",
- "integrity": "sha512-w6CDisaxs19S5Fd+NPPLFaA3GoX5gxuxrbTTBu0EYap7oH13w75L6C/+7e9mcoF9akhcR6GyYajwVMQEjdapJg==",
- "dev": true,
- "dependencies": {
- "@vueuse/core": "11.0.3",
- "@vueuse/shared": "11.0.3",
- "vue-demi": ">=0.14.10"
- },
- "funding": {
- "url": "https://github.com/sponsors/antfu"
- },
- "peerDependencies": {
- "async-validator": "^4",
- "axios": "^1",
- "change-case": "^5",
- "drauu": "^0.4",
- "focus-trap": "^7",
- "fuse.js": "^7",
- "idb-keyval": "^6",
- "jwt-decode": "^4",
- "nprogress": "^0.2",
- "qrcode": "^1.5",
- "sortablejs": "^1",
- "universal-cookie": "^7"
- },
- "peerDependenciesMeta": {
- "async-validator": {
- "optional": true
- },
- "axios": {
- "optional": true
- },
- "change-case": {
- "optional": true
- },
- "drauu": {
- "optional": true
- },
- "focus-trap": {
- "optional": true
- },
- "fuse.js": {
- "optional": true
- },
- "idb-keyval": {
- "optional": true
- },
- "jwt-decode": {
- "optional": true
- },
- "nprogress": {
- "optional": true
- },
- "qrcode": {
- "optional": true
- },
- "sortablejs": {
- "optional": true
- },
- "universal-cookie": {
- "optional": true
- }
- }
- },
- "node_modules/@vueuse/integrations/node_modules/vue-demi": {
- "version": "0.14.10",
- "resolved": "https://registry.npmjs.org/vue-demi/-/vue-demi-0.14.10.tgz",
- "integrity": "sha512-nMZBOwuzabUO0nLgIcc6rycZEebF6eeUfaiQx9+WSk8e29IbLvPU9feI6tqW4kTo3hvoYAJkMh8n8D0fuISphg==",
- "dev": true,
- "hasInstallScript": true,
- "bin": {
- "vue-demi-fix": "bin/vue-demi-fix.js",
- "vue-demi-switch": "bin/vue-demi-switch.js"
- },
- "engines": {
- "node": ">=12"
- },
- "funding": {
- "url": "https://github.com/sponsors/antfu"
- },
- "peerDependencies": {
- "@vue/composition-api": "^1.0.0-rc.1",
- "vue": "^3.0.0-0 || ^2.6.0"
- },
- "peerDependenciesMeta": {
- "@vue/composition-api": {
- "optional": true
- }
- }
- },
- "node_modules/@vueuse/metadata": {
- "version": "11.0.3",
- "resolved": "https://registry.npmjs.org/@vueuse/metadata/-/metadata-11.0.3.tgz",
- "integrity": "sha512-+FtbO4SD5WpsOcQTcC0hAhNlOid6QNLzqedtquTtQ+CRNBoAt9GuV07c6KNHK1wCmlq8DFPwgiLF2rXwgSHX5Q==",
- "dev": true,
- "funding": {
- "url": "https://github.com/sponsors/antfu"
- }
- },
- "node_modules/@vueuse/shared": {
- "version": "11.0.3",
- "resolved": "https://registry.npmjs.org/@vueuse/shared/-/shared-11.0.3.tgz",
- "integrity": "sha512-0rY2m6HS5t27n/Vp5cTDsKTlNnimCqsbh/fmT2LgE+aaU42EMfXo8+bNX91W9I7DDmxfuACXMmrd7d79JxkqWA==",
- "dev": true,
- "dependencies": {
- "vue-demi": ">=0.14.10"
- },
- "funding": {
- "url": "https://github.com/sponsors/antfu"
- }
- },
- "node_modules/@vueuse/shared/node_modules/vue-demi": {
- "version": "0.14.10",
- "resolved": "https://registry.npmjs.org/vue-demi/-/vue-demi-0.14.10.tgz",
- "integrity": "sha512-nMZBOwuzabUO0nLgIcc6rycZEebF6eeUfaiQx9+WSk8e29IbLvPU9feI6tqW4kTo3hvoYAJkMh8n8D0fuISphg==",
- "dev": true,
- "hasInstallScript": true,
- "bin": {
- "vue-demi-fix": "bin/vue-demi-fix.js",
- "vue-demi-switch": "bin/vue-demi-switch.js"
- },
- "engines": {
- "node": ">=12"
- },
- "funding": {
- "url": "https://github.com/sponsors/antfu"
- },
- "peerDependencies": {
- "@vue/composition-api": "^1.0.0-rc.1",
- "vue": "^3.0.0-0 || ^2.6.0"
- },
- "peerDependenciesMeta": {
- "@vue/composition-api": {
- "optional": true
- }
- }
- },
- "node_modules/acorn": {
- "version": "8.15.0",
- "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.15.0.tgz",
- "integrity": "sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==",
- "license": "MIT",
- "bin": {
- "acorn": "bin/acorn"
- },
- "engines": {
- "node": ">=0.4.0"
- }
- },
- "node_modules/algoliasearch": {
- "version": "4.24.0",
- "resolved": "https://registry.npmjs.org/algoliasearch/-/algoliasearch-4.24.0.tgz",
- "integrity": "sha512-bf0QV/9jVejssFBmz2HQLxUadxk574t4iwjCKp5E7NBzwKkrDEhKPISIIjAU/p6K5qDx3qoeh4+26zWN1jmw3g==",
- "dev": true,
- "dependencies": {
- "@algolia/cache-browser-local-storage": "4.24.0",
- "@algolia/cache-common": "4.24.0",
- "@algolia/cache-in-memory": "4.24.0",
- "@algolia/client-account": "4.24.0",
- "@algolia/client-analytics": "4.24.0",
- "@algolia/client-common": "4.24.0",
- "@algolia/client-personalization": "4.24.0",
- "@algolia/client-search": "4.24.0",
- "@algolia/logger-common": "4.24.0",
- "@algolia/logger-console": "4.24.0",
- "@algolia/recommend": "4.24.0",
- "@algolia/requester-browser-xhr": "4.24.0",
- "@algolia/requester-common": "4.24.0",
- "@algolia/requester-node-http": "4.24.0",
- "@algolia/transporter": "4.24.0"
- }
- },
- "node_modules/algoliasearch/node_modules/@algolia/client-common": {
- "version": "4.24.0",
- "resolved": "https://registry.npmjs.org/@algolia/client-common/-/client-common-4.24.0.tgz",
- "integrity": "sha512-bc2ROsNL6w6rqpl5jj/UywlIYC21TwSSoFHKl01lYirGMW+9Eek6r02Tocg4gZ8HAw3iBvu6XQiM3BEbmEMoiA==",
- "dev": true,
- "dependencies": {
- "@algolia/requester-common": "4.24.0",
- "@algolia/transporter": "4.24.0"
- }
- },
- "node_modules/algoliasearch/node_modules/@algolia/client-search": {
- "version": "4.24.0",
- "resolved": "https://registry.npmjs.org/@algolia/client-search/-/client-search-4.24.0.tgz",
- "integrity": "sha512-uRW6EpNapmLAD0mW47OXqTP8eiIx5F6qN9/x/7HHO6owL3N1IXqydGwW5nhDFBrV+ldouro2W1VX3XlcUXEFCA==",
- "dev": true,
- "dependencies": {
- "@algolia/client-common": "4.24.0",
- "@algolia/requester-common": "4.24.0",
- "@algolia/transporter": "4.24.0"
- }
- },
- "node_modules/algoliasearch/node_modules/@algolia/requester-browser-xhr": {
- "version": "4.24.0",
- "resolved": "https://registry.npmjs.org/@algolia/requester-browser-xhr/-/requester-browser-xhr-4.24.0.tgz",
- "integrity": "sha512-Z2NxZMb6+nVXSjF13YpjYTdvV3032YTBSGm2vnYvYPA6mMxzM3v5rsCiSspndn9rzIW4Qp1lPHBvuoKJV6jnAA==",
- "dev": true,
- "dependencies": {
- "@algolia/requester-common": "4.24.0"
- }
- },
- "node_modules/algoliasearch/node_modules/@algolia/requester-node-http": {
- "version": "4.24.0",
- "resolved": "https://registry.npmjs.org/@algolia/requester-node-http/-/requester-node-http-4.24.0.tgz",
- "integrity": "sha512-JF18yTjNOVYvU/L3UosRcvbPMGT9B+/GQWNWnenIImglzNVGpyzChkXLnrSf6uxwVNO6ESGu6oN8MqcGQcjQJw==",
- "dev": true,
- "dependencies": {
- "@algolia/requester-common": "4.24.0"
- }
- },
- "node_modules/birpc": {
- "version": "0.2.17",
- "resolved": "https://registry.npmjs.org/birpc/-/birpc-0.2.17.tgz",
- "integrity": "sha512-+hkTxhot+dWsLpp3gia5AkVHIsKlZybNT5gIYiDlNzJrmYPcTM9k5/w2uaj3IPpd7LlEYpmCj4Jj1nC41VhDFg==",
- "dev": true,
- "funding": {
- "url": "https://github.com/sponsors/antfu"
- }
- },
- "node_modules/chevrotain": {
- "version": "11.0.3",
- "resolved": "https://registry.npmjs.org/chevrotain/-/chevrotain-11.0.3.tgz",
- "integrity": "sha512-ci2iJH6LeIkvP9eJW6gpueU8cnZhv85ELY8w8WiFtNjMHA5ad6pQLaJo9mEly/9qUyCpvqX8/POVUTf18/HFdw==",
- "license": "Apache-2.0",
- "dependencies": {
- "@chevrotain/cst-dts-gen": "11.0.3",
- "@chevrotain/gast": "11.0.3",
- "@chevrotain/regexp-to-ast": "11.0.3",
- "@chevrotain/types": "11.0.3",
- "@chevrotain/utils": "11.0.3",
- "lodash-es": "4.17.21"
- }
- },
- "node_modules/chevrotain-allstar": {
- "version": "0.3.1",
- "resolved": "https://registry.npmjs.org/chevrotain-allstar/-/chevrotain-allstar-0.3.1.tgz",
- "integrity": "sha512-b7g+y9A0v4mxCW1qUhf3BSVPg+/NvGErk/dOkrDaHA0nQIQGAtrOjlX//9OQtRlSCy+x9rfB5N8yC71lH1nvMw==",
- "license": "MIT",
- "dependencies": {
- "lodash-es": "^4.17.21"
- },
- "peerDependencies": {
- "chevrotain": "^11.0.0"
- }
- },
- "node_modules/commander": {
- "version": "7.2.0",
- "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz",
- "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==",
- "license": "MIT",
- "engines": {
- "node": ">= 10"
- }
- },
- "node_modules/confbox": {
- "version": "0.2.2",
- "resolved": "https://registry.npmjs.org/confbox/-/confbox-0.2.2.tgz",
- "integrity": "sha512-1NB+BKqhtNipMsov4xI/NnhCKp9XG9NamYp5PVm9klAT0fsrNPjaFICsCFhNhwZJKNh7zB/3q8qXz0E9oaMNtQ==",
- "license": "MIT"
- },
- "node_modules/copy-anything": {
- "version": "3.0.5",
- "resolved": "https://registry.npmjs.org/copy-anything/-/copy-anything-3.0.5.tgz",
- "integrity": "sha512-yCEafptTtb4bk7GLEQoM8KVJpxAfdBJYaXyzQEgQQQgYrZiDp8SJmGKlYza6CYjEDNstAdNdKA3UuoULlEbS6w==",
- "dev": true,
- "dependencies": {
- "is-what": "^4.1.8"
- },
- "engines": {
- "node": ">=12.13"
- },
- "funding": {
- "url": "https://github.com/sponsors/mesqueeb"
- }
- },
- "node_modules/cose-base": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/cose-base/-/cose-base-1.0.3.tgz",
- "integrity": "sha512-s9whTXInMSgAp/NVXVNuVxVKzGH2qck3aQlVHxDCdAEPgtMKwc4Wq6/QKhgdEdgbLSi9rBTAcPoRa6JpiG4ksg==",
- "license": "MIT",
- "dependencies": {
- "layout-base": "^1.0.0"
- }
- },
- "node_modules/csstype": {
- "version": "3.1.3",
- "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.3.tgz",
- "integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==",
- "dev": true
- },
- "node_modules/cytoscape": {
- "version": "3.32.0",
- "resolved": "https://registry.npmjs.org/cytoscape/-/cytoscape-3.32.0.tgz",
- "integrity": "sha512-5JHBC9n75kz5851jeklCPmZWcg3hUe6sjqJvyk3+hVqFaKcHwHgxsjeN1yLmggoUc6STbtm9/NQyabQehfjvWQ==",
- "license": "MIT",
- "engines": {
- "node": ">=0.10"
- }
- },
- "node_modules/cytoscape-cose-bilkent": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/cytoscape-cose-bilkent/-/cytoscape-cose-bilkent-4.1.0.tgz",
- "integrity": "sha512-wgQlVIUJF13Quxiv5e1gstZ08rnZj2XaLHGoFMYXz7SkNfCDOOteKBE6SYRfA9WxxI/iBc3ajfDoc6hb/MRAHQ==",
- "license": "MIT",
- "dependencies": {
- "cose-base": "^1.0.0"
- },
- "peerDependencies": {
- "cytoscape": "^3.2.0"
- }
- },
- "node_modules/cytoscape-fcose": {
- "version": "2.2.0",
- "resolved": "https://registry.npmjs.org/cytoscape-fcose/-/cytoscape-fcose-2.2.0.tgz",
- "integrity": "sha512-ki1/VuRIHFCzxWNrsshHYPs6L7TvLu3DL+TyIGEsRcvVERmxokbf5Gdk7mFxZnTdiGtnA4cfSmjZJMviqSuZrQ==",
- "license": "MIT",
- "dependencies": {
- "cose-base": "^2.2.0"
- },
- "peerDependencies": {
- "cytoscape": "^3.2.0"
- }
- },
- "node_modules/cytoscape-fcose/node_modules/cose-base": {
- "version": "2.2.0",
- "resolved": "https://registry.npmjs.org/cose-base/-/cose-base-2.2.0.tgz",
- "integrity": "sha512-AzlgcsCbUMymkADOJtQm3wO9S3ltPfYOFD5033keQn9NJzIbtnZj+UdBJe7DYml/8TdbtHJW3j58SOnKhWY/5g==",
- "license": "MIT",
- "dependencies": {
- "layout-base": "^2.0.0"
- }
- },
- "node_modules/cytoscape-fcose/node_modules/layout-base": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/layout-base/-/layout-base-2.0.1.tgz",
- "integrity": "sha512-dp3s92+uNI1hWIpPGH3jK2kxE2lMjdXdr+DH8ynZHpd6PUlH6x6cbuXnoMmiNumznqaNO31xu9e79F0uuZ0JFg==",
- "license": "MIT"
- },
- "node_modules/d3": {
- "version": "7.9.0",
- "resolved": "https://registry.npmjs.org/d3/-/d3-7.9.0.tgz",
- "integrity": "sha512-e1U46jVP+w7Iut8Jt8ri1YsPOvFpg46k+K8TpCb0P+zjCkjkPnV7WzfDJzMHy1LnA+wj5pLT1wjO901gLXeEhA==",
- "license": "ISC",
- "dependencies": {
- "d3-array": "3",
- "d3-axis": "3",
- "d3-brush": "3",
- "d3-chord": "3",
- "d3-color": "3",
- "d3-contour": "4",
- "d3-delaunay": "6",
- "d3-dispatch": "3",
- "d3-drag": "3",
- "d3-dsv": "3",
- "d3-ease": "3",
- "d3-fetch": "3",
- "d3-force": "3",
- "d3-format": "3",
- "d3-geo": "3",
- "d3-hierarchy": "3",
- "d3-interpolate": "3",
- "d3-path": "3",
- "d3-polygon": "3",
- "d3-quadtree": "3",
- "d3-random": "3",
- "d3-scale": "4",
- "d3-scale-chromatic": "3",
- "d3-selection": "3",
- "d3-shape": "3",
- "d3-time": "3",
- "d3-time-format": "4",
- "d3-timer": "3",
- "d3-transition": "3",
- "d3-zoom": "3"
- },
- "engines": {
- "node": ">=12"
- }
- },
- "node_modules/d3-array": {
- "version": "3.2.4",
- "resolved": "https://registry.npmjs.org/d3-array/-/d3-array-3.2.4.tgz",
- "integrity": "sha512-tdQAmyA18i4J7wprpYq8ClcxZy3SC31QMeByyCFyRt7BVHdREQZ5lpzoe5mFEYZUWe+oq8HBvk9JjpibyEV4Jg==",
- "license": "ISC",
- "dependencies": {
- "internmap": "1 - 2"
- },
- "engines": {
- "node": ">=12"
- }
- },
- "node_modules/d3-axis": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/d3-axis/-/d3-axis-3.0.0.tgz",
- "integrity": "sha512-IH5tgjV4jE/GhHkRV0HiVYPDtvfjHQlQfJHs0usq7M30XcSBvOotpmH1IgkcXsO/5gEQZD43B//fc7SRT5S+xw==",
- "license": "ISC",
- "engines": {
- "node": ">=12"
- }
- },
- "node_modules/d3-brush": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/d3-brush/-/d3-brush-3.0.0.tgz",
- "integrity": "sha512-ALnjWlVYkXsVIGlOsuWH1+3udkYFI48Ljihfnh8FZPF2QS9o+PzGLBslO0PjzVoHLZ2KCVgAM8NVkXPJB2aNnQ==",
- "license": "ISC",
- "dependencies": {
- "d3-dispatch": "1 - 3",
- "d3-drag": "2 - 3",
- "d3-interpolate": "1 - 3",
- "d3-selection": "3",
- "d3-transition": "3"
- },
- "engines": {
- "node": ">=12"
- }
- },
- "node_modules/d3-chord": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/d3-chord/-/d3-chord-3.0.1.tgz",
- "integrity": "sha512-VE5S6TNa+j8msksl7HwjxMHDM2yNK3XCkusIlpX5kwauBfXuyLAtNg9jCp/iHH61tgI4sb6R/EIMWCqEIdjT/g==",
- "license": "ISC",
- "dependencies": {
- "d3-path": "1 - 3"
- },
- "engines": {
- "node": ">=12"
- }
- },
- "node_modules/d3-color": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/d3-color/-/d3-color-3.1.0.tgz",
- "integrity": "sha512-zg/chbXyeBtMQ1LbD/WSoW2DpC3I0mpmPdW+ynRTj/x2DAWYrIY7qeZIHidozwV24m4iavr15lNwIwLxRmOxhA==",
- "license": "ISC",
- "engines": {
- "node": ">=12"
- }
- },
- "node_modules/d3-contour": {
- "version": "4.0.2",
- "resolved": "https://registry.npmjs.org/d3-contour/-/d3-contour-4.0.2.tgz",
- "integrity": "sha512-4EzFTRIikzs47RGmdxbeUvLWtGedDUNkTcmzoeyg4sP/dvCexO47AaQL7VKy/gul85TOxw+IBgA8US2xwbToNA==",
- "license": "ISC",
- "dependencies": {
- "d3-array": "^3.2.0"
- },
- "engines": {
- "node": ">=12"
- }
- },
- "node_modules/d3-delaunay": {
- "version": "6.0.4",
- "resolved": "https://registry.npmjs.org/d3-delaunay/-/d3-delaunay-6.0.4.tgz",
- "integrity": "sha512-mdjtIZ1XLAM8bm/hx3WwjfHt6Sggek7qH043O8KEjDXN40xi3vx/6pYSVTwLjEgiXQTbvaouWKynLBiUZ6SK6A==",
- "license": "ISC",
- "dependencies": {
- "delaunator": "5"
- },
- "engines": {
- "node": ">=12"
- }
- },
- "node_modules/d3-dispatch": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/d3-dispatch/-/d3-dispatch-3.0.1.tgz",
- "integrity": "sha512-rzUyPU/S7rwUflMyLc1ETDeBj0NRuHKKAcvukozwhshr6g6c5d8zh4c2gQjY2bZ0dXeGLWc1PF174P2tVvKhfg==",
- "license": "ISC",
- "engines": {
- "node": ">=12"
- }
- },
- "node_modules/d3-drag": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/d3-drag/-/d3-drag-3.0.0.tgz",
- "integrity": "sha512-pWbUJLdETVA8lQNJecMxoXfH6x+mO2UQo8rSmZ+QqxcbyA3hfeprFgIT//HW2nlHChWeIIMwS2Fq+gEARkhTkg==",
- "license": "ISC",
- "dependencies": {
- "d3-dispatch": "1 - 3",
- "d3-selection": "3"
- },
- "engines": {
- "node": ">=12"
- }
- },
- "node_modules/d3-dsv": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/d3-dsv/-/d3-dsv-3.0.1.tgz",
- "integrity": "sha512-UG6OvdI5afDIFP9w4G0mNq50dSOsXHJaRE8arAS5o9ApWnIElp8GZw1Dun8vP8OyHOZ/QJUKUJwxiiCCnUwm+Q==",
- "license": "ISC",
- "dependencies": {
- "commander": "7",
- "iconv-lite": "0.6",
- "rw": "1"
- },
- "bin": {
- "csv2json": "bin/dsv2json.js",
- "csv2tsv": "bin/dsv2dsv.js",
- "dsv2dsv": "bin/dsv2dsv.js",
- "dsv2json": "bin/dsv2json.js",
- "json2csv": "bin/json2dsv.js",
- "json2dsv": "bin/json2dsv.js",
- "json2tsv": "bin/json2dsv.js",
- "tsv2csv": "bin/dsv2dsv.js",
- "tsv2json": "bin/dsv2json.js"
- },
- "engines": {
- "node": ">=12"
- }
- },
- "node_modules/d3-ease": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/d3-ease/-/d3-ease-3.0.1.tgz",
- "integrity": "sha512-wR/XK3D3XcLIZwpbvQwQ5fK+8Ykds1ip7A2Txe0yxncXSdq1L9skcG7blcedkOX+ZcgxGAmLX1FrRGbADwzi0w==",
- "license": "BSD-3-Clause",
- "engines": {
- "node": ">=12"
- }
- },
- "node_modules/d3-fetch": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/d3-fetch/-/d3-fetch-3.0.1.tgz",
- "integrity": "sha512-kpkQIM20n3oLVBKGg6oHrUchHM3xODkTzjMoj7aWQFq5QEM+R6E4WkzT5+tojDY7yjez8KgCBRoj4aEr99Fdqw==",
- "license": "ISC",
- "dependencies": {
- "d3-dsv": "1 - 3"
- },
- "engines": {
- "node": ">=12"
- }
- },
- "node_modules/d3-force": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/d3-force/-/d3-force-3.0.0.tgz",
- "integrity": "sha512-zxV/SsA+U4yte8051P4ECydjD/S+qeYtnaIyAs9tgHCqfguma/aAQDjo85A9Z6EKhBirHRJHXIgJUlffT4wdLg==",
- "license": "ISC",
- "dependencies": {
- "d3-dispatch": "1 - 3",
- "d3-quadtree": "1 - 3",
- "d3-timer": "1 - 3"
- },
- "engines": {
- "node": ">=12"
- }
- },
- "node_modules/d3-format": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/d3-format/-/d3-format-3.1.0.tgz",
- "integrity": "sha512-YyUI6AEuY/Wpt8KWLgZHsIU86atmikuoOmCfommt0LYHiQSPjvX2AcFc38PX0CBpr2RCyZhjex+NS/LPOv6YqA==",
- "license": "ISC",
- "engines": {
- "node": ">=12"
- }
- },
- "node_modules/d3-geo": {
- "version": "3.1.1",
- "resolved": "https://registry.npmjs.org/d3-geo/-/d3-geo-3.1.1.tgz",
- "integrity": "sha512-637ln3gXKXOwhalDzinUgY83KzNWZRKbYubaG+fGVuc/dxO64RRljtCTnf5ecMyE1RIdtqpkVcq0IbtU2S8j2Q==",
- "license": "ISC",
- "dependencies": {
- "d3-array": "2.5.0 - 3"
- },
- "engines": {
- "node": ">=12"
- }
- },
- "node_modules/d3-hierarchy": {
- "version": "3.1.2",
- "resolved": "https://registry.npmjs.org/d3-hierarchy/-/d3-hierarchy-3.1.2.tgz",
- "integrity": "sha512-FX/9frcub54beBdugHjDCdikxThEqjnR93Qt7PvQTOHxyiNCAlvMrHhclk3cD5VeAaq9fxmfRp+CnWw9rEMBuA==",
- "license": "ISC",
- "engines": {
- "node": ">=12"
- }
- },
- "node_modules/d3-interpolate": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/d3-interpolate/-/d3-interpolate-3.0.1.tgz",
- "integrity": "sha512-3bYs1rOD33uo8aqJfKP3JWPAibgw8Zm2+L9vBKEHJ2Rg+viTR7o5Mmv5mZcieN+FRYaAOWX5SJATX6k1PWz72g==",
- "license": "ISC",
- "dependencies": {
- "d3-color": "1 - 3"
- },
- "engines": {
- "node": ">=12"
- }
- },
- "node_modules/d3-path": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/d3-path/-/d3-path-3.1.0.tgz",
- "integrity": "sha512-p3KP5HCf/bvjBSSKuXid6Zqijx7wIfNW+J/maPs+iwR35at5JCbLUT0LzF1cnjbCHWhqzQTIN2Jpe8pRebIEFQ==",
- "license": "ISC",
- "engines": {
- "node": ">=12"
- }
- },
- "node_modules/d3-polygon": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/d3-polygon/-/d3-polygon-3.0.1.tgz",
- "integrity": "sha512-3vbA7vXYwfe1SYhED++fPUQlWSYTTGmFmQiany/gdbiWgU/iEyQzyymwL9SkJjFFuCS4902BSzewVGsHHmHtXg==",
- "license": "ISC",
- "engines": {
- "node": ">=12"
- }
- },
- "node_modules/d3-quadtree": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/d3-quadtree/-/d3-quadtree-3.0.1.tgz",
- "integrity": "sha512-04xDrxQTDTCFwP5H6hRhsRcb9xxv2RzkcsygFzmkSIOJy3PeRJP7sNk3VRIbKXcog561P9oU0/rVH6vDROAgUw==",
- "license": "ISC",
- "engines": {
- "node": ">=12"
- }
- },
- "node_modules/d3-random": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/d3-random/-/d3-random-3.0.1.tgz",
- "integrity": "sha512-FXMe9GfxTxqd5D6jFsQ+DJ8BJS4E/fT5mqqdjovykEB2oFbTMDVdg1MGFxfQW+FBOGoB++k8swBrgwSHT1cUXQ==",
- "license": "ISC",
- "engines": {
- "node": ">=12"
- }
- },
- "node_modules/d3-sankey": {
- "version": "0.12.3",
- "resolved": "https://registry.npmjs.org/d3-sankey/-/d3-sankey-0.12.3.tgz",
- "integrity": "sha512-nQhsBRmM19Ax5xEIPLMY9ZmJ/cDvd1BG3UVvt5h3WRxKg5zGRbvnteTyWAbzeSvlh3tW7ZEmq4VwR5mB3tutmQ==",
- "license": "BSD-3-Clause",
- "dependencies": {
- "d3-array": "1 - 2",
- "d3-shape": "^1.2.0"
- }
- },
- "node_modules/d3-sankey/node_modules/d3-array": {
- "version": "2.12.1",
- "resolved": "https://registry.npmjs.org/d3-array/-/d3-array-2.12.1.tgz",
- "integrity": "sha512-B0ErZK/66mHtEsR1TkPEEkwdy+WDesimkM5gpZr5Dsg54BiTA5RXtYW5qTLIAcekaS9xfZrzBLF/OAkB3Qn1YQ==",
- "license": "BSD-3-Clause",
- "dependencies": {
- "internmap": "^1.0.0"
- }
- },
- "node_modules/d3-sankey/node_modules/d3-path": {
- "version": "1.0.9",
- "resolved": "https://registry.npmjs.org/d3-path/-/d3-path-1.0.9.tgz",
- "integrity": "sha512-VLaYcn81dtHVTjEHd8B+pbe9yHWpXKZUC87PzoFmsFrJqgFwDe/qxfp5MlfsfM1V5E/iVt0MmEbWQ7FVIXh/bg==",
- "license": "BSD-3-Clause"
- },
- "node_modules/d3-sankey/node_modules/d3-shape": {
- "version": "1.3.7",
- "resolved": "https://registry.npmjs.org/d3-shape/-/d3-shape-1.3.7.tgz",
- "integrity": "sha512-EUkvKjqPFUAZyOlhY5gzCxCeI0Aep04LwIRpsZ/mLFelJiUfnK56jo5JMDSE7yyP2kLSb6LtF+S5chMk7uqPqw==",
- "license": "BSD-3-Clause",
- "dependencies": {
- "d3-path": "1"
- }
- },
- "node_modules/d3-sankey/node_modules/internmap": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/internmap/-/internmap-1.0.1.tgz",
- "integrity": "sha512-lDB5YccMydFBtasVtxnZ3MRBHuaoE8GKsppq+EchKL2U4nK/DmEpPHNH8MZe5HkMtpSiTSOZwfN0tzYjO/lJEw==",
- "license": "ISC"
- },
- "node_modules/d3-scale": {
- "version": "4.0.2",
- "resolved": "https://registry.npmjs.org/d3-scale/-/d3-scale-4.0.2.tgz",
- "integrity": "sha512-GZW464g1SH7ag3Y7hXjf8RoUuAFIqklOAq3MRl4OaWabTFJY9PN/E1YklhXLh+OQ3fM9yS2nOkCoS+WLZ6kvxQ==",
- "license": "ISC",
- "dependencies": {
- "d3-array": "2.10.0 - 3",
- "d3-format": "1 - 3",
- "d3-interpolate": "1.2.0 - 3",
- "d3-time": "2.1.1 - 3",
- "d3-time-format": "2 - 4"
- },
- "engines": {
- "node": ">=12"
- }
- },
- "node_modules/d3-scale-chromatic": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/d3-scale-chromatic/-/d3-scale-chromatic-3.1.0.tgz",
- "integrity": "sha512-A3s5PWiZ9YCXFye1o246KoscMWqf8BsD9eRiJ3He7C9OBaxKhAd5TFCdEx/7VbKtxxTsu//1mMJFrEt572cEyQ==",
- "license": "ISC",
- "dependencies": {
- "d3-color": "1 - 3",
- "d3-interpolate": "1 - 3"
- },
- "engines": {
- "node": ">=12"
- }
- },
- "node_modules/d3-selection": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/d3-selection/-/d3-selection-3.0.0.tgz",
- "integrity": "sha512-fmTRWbNMmsmWq6xJV8D19U/gw/bwrHfNXxrIN+HfZgnzqTHp9jOmKMhsTUjXOJnZOdZY9Q28y4yebKzqDKlxlQ==",
- "license": "ISC",
- "engines": {
- "node": ">=12"
- }
- },
- "node_modules/d3-shape": {
- "version": "3.2.0",
- "resolved": "https://registry.npmjs.org/d3-shape/-/d3-shape-3.2.0.tgz",
- "integrity": "sha512-SaLBuwGm3MOViRq2ABk3eLoxwZELpH6zhl3FbAoJ7Vm1gofKx6El1Ib5z23NUEhF9AsGl7y+dzLe5Cw2AArGTA==",
- "license": "ISC",
- "dependencies": {
- "d3-path": "^3.1.0"
- },
- "engines": {
- "node": ">=12"
- }
- },
- "node_modules/d3-time": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/d3-time/-/d3-time-3.1.0.tgz",
- "integrity": "sha512-VqKjzBLejbSMT4IgbmVgDjpkYrNWUYJnbCGo874u7MMKIWsILRX+OpX/gTk8MqjpT1A/c6HY2dCA77ZN0lkQ2Q==",
- "license": "ISC",
- "dependencies": {
- "d3-array": "2 - 3"
- },
- "engines": {
- "node": ">=12"
- }
- },
- "node_modules/d3-time-format": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/d3-time-format/-/d3-time-format-4.1.0.tgz",
- "integrity": "sha512-dJxPBlzC7NugB2PDLwo9Q8JiTR3M3e4/XANkreKSUxF8vvXKqm1Yfq4Q5dl8budlunRVlUUaDUgFt7eA8D6NLg==",
- "license": "ISC",
- "dependencies": {
- "d3-time": "1 - 3"
- },
- "engines": {
- "node": ">=12"
- }
- },
- "node_modules/d3-timer": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/d3-timer/-/d3-timer-3.0.1.tgz",
- "integrity": "sha512-ndfJ/JxxMd3nw31uyKoY2naivF+r29V+Lc0svZxe1JvvIRmi8hUsrMvdOwgS1o6uBHmiz91geQ0ylPP0aj1VUA==",
- "license": "ISC",
- "engines": {
- "node": ">=12"
- }
- },
- "node_modules/d3-transition": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/d3-transition/-/d3-transition-3.0.1.tgz",
- "integrity": "sha512-ApKvfjsSR6tg06xrL434C0WydLr7JewBB3V+/39RMHsaXTOG0zmt/OAXeng5M5LBm0ojmxJrpomQVZ1aPvBL4w==",
- "license": "ISC",
- "dependencies": {
- "d3-color": "1 - 3",
- "d3-dispatch": "1 - 3",
- "d3-ease": "1 - 3",
- "d3-interpolate": "1 - 3",
- "d3-timer": "1 - 3"
- },
- "engines": {
- "node": ">=12"
- },
- "peerDependencies": {
- "d3-selection": "2 - 3"
- }
- },
- "node_modules/d3-zoom": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/d3-zoom/-/d3-zoom-3.0.0.tgz",
- "integrity": "sha512-b8AmV3kfQaqWAuacbPuNbL6vahnOJflOhexLzMMNLga62+/nh0JzvJ0aO/5a5MVgUFGS7Hu1P9P03o3fJkDCyw==",
- "license": "ISC",
- "dependencies": {
- "d3-dispatch": "1 - 3",
- "d3-drag": "2 - 3",
- "d3-interpolate": "1 - 3",
- "d3-selection": "2 - 3",
- "d3-transition": "2 - 3"
- },
- "engines": {
- "node": ">=12"
- }
- },
- "node_modules/dagre-d3-es": {
- "version": "7.0.11",
- "resolved": "https://registry.npmjs.org/dagre-d3-es/-/dagre-d3-es-7.0.11.tgz",
- "integrity": "sha512-tvlJLyQf834SylNKax8Wkzco/1ias1OPw8DcUMDE7oUIoSEW25riQVuiu/0OWEFqT0cxHT3Pa9/D82Jr47IONw==",
- "license": "MIT",
- "dependencies": {
- "d3": "^7.9.0",
- "lodash-es": "^4.17.21"
- }
- },
- "node_modules/dayjs": {
- "version": "1.11.13",
- "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.11.13.tgz",
- "integrity": "sha512-oaMBel6gjolK862uaPQOVTA7q3TZhuSvuMQAAglQDOWYO9A91IrAOUJEyKVlqJlHE0vq5p5UXxzdPfMH/x6xNg==",
- "license": "MIT"
- },
- "node_modules/debug": {
- "version": "4.4.1",
- "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.1.tgz",
- "integrity": "sha512-KcKCqiftBJcZr++7ykoDIEwSa3XWowTfNPo92BYxjXiyYEVrUQh2aLyhxBCwww+heortUFxEJYcRzosstTEBYQ==",
- "license": "MIT",
- "dependencies": {
- "ms": "^2.1.3"
- },
- "engines": {
- "node": ">=6.0"
- },
- "peerDependenciesMeta": {
- "supports-color": {
- "optional": true
- }
- }
- },
- "node_modules/delaunator": {
- "version": "5.0.1",
- "resolved": "https://registry.npmjs.org/delaunator/-/delaunator-5.0.1.tgz",
- "integrity": "sha512-8nvh+XBe96aCESrGOqMp/84b13H9cdKbG5P2ejQCh4d4sK9RL4371qou9drQjMhvnPmhWl5hnmqbEE0fXr9Xnw==",
- "license": "ISC",
- "dependencies": {
- "robust-predicates": "^3.0.2"
- }
- },
- "node_modules/dompurify": {
- "version": "3.2.6",
- "resolved": "https://registry.npmjs.org/dompurify/-/dompurify-3.2.6.tgz",
- "integrity": "sha512-/2GogDQlohXPZe6D6NOgQvXLPSYBqIWMnZ8zzOhn09REE4eyAzb+Hed3jhoM9OkuaJ8P6ZGTTVWQKAi8ieIzfQ==",
- "license": "(MPL-2.0 OR Apache-2.0)",
- "optionalDependencies": {
- "@types/trusted-types": "^2.0.7"
- }
- },
- "node_modules/entities": {
- "version": "4.5.0",
- "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz",
- "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==",
- "dev": true,
- "engines": {
- "node": ">=0.12"
- },
- "funding": {
- "url": "https://github.com/fb55/entities?sponsor=1"
- }
- },
- "node_modules/esbuild": {
- "version": "0.21.5",
- "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.21.5.tgz",
- "integrity": "sha512-mg3OPMV4hXywwpoDxu3Qda5xCKQi+vCTZq8S9J/EpkhB2HzKXq4SNFZE3+NK93JYxc8VMSep+lOUSC/RVKaBqw==",
- "dev": true,
- "hasInstallScript": true,
- "bin": {
- "esbuild": "bin/esbuild"
- },
- "engines": {
- "node": ">=12"
- },
- "optionalDependencies": {
- "@esbuild/aix-ppc64": "0.21.5",
- "@esbuild/android-arm": "0.21.5",
- "@esbuild/android-arm64": "0.21.5",
- "@esbuild/android-x64": "0.21.5",
- "@esbuild/darwin-arm64": "0.21.5",
- "@esbuild/darwin-x64": "0.21.5",
- "@esbuild/freebsd-arm64": "0.21.5",
- "@esbuild/freebsd-x64": "0.21.5",
- "@esbuild/linux-arm": "0.21.5",
- "@esbuild/linux-arm64": "0.21.5",
- "@esbuild/linux-ia32": "0.21.5",
- "@esbuild/linux-loong64": "0.21.5",
- "@esbuild/linux-mips64el": "0.21.5",
- "@esbuild/linux-ppc64": "0.21.5",
- "@esbuild/linux-riscv64": "0.21.5",
- "@esbuild/linux-s390x": "0.21.5",
- "@esbuild/linux-x64": "0.21.5",
- "@esbuild/netbsd-x64": "0.21.5",
- "@esbuild/openbsd-x64": "0.21.5",
- "@esbuild/sunos-x64": "0.21.5",
- "@esbuild/win32-arm64": "0.21.5",
- "@esbuild/win32-ia32": "0.21.5",
- "@esbuild/win32-x64": "0.21.5"
- }
- },
- "node_modules/estree-walker": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz",
- "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==",
- "dev": true
- },
- "node_modules/exsolve": {
- "version": "1.0.7",
- "resolved": "https://registry.npmjs.org/exsolve/-/exsolve-1.0.7.tgz",
- "integrity": "sha512-VO5fQUzZtI6C+vx4w/4BWJpg3s/5l+6pRQEHzFRM8WFi4XffSP1Z+4qi7GbjWbvRQEbdIco5mIMq+zX4rPuLrw==",
- "license": "MIT"
- },
- "node_modules/focus-trap": {
- "version": "7.5.4",
- "resolved": "https://registry.npmjs.org/focus-trap/-/focus-trap-7.5.4.tgz",
- "integrity": "sha512-N7kHdlgsO/v+iD/dMoJKtsSqs5Dz/dXZVebRgJw23LDk+jMi/974zyiOYDziY2JPp8xivq9BmUGwIJMiuSBi7w==",
- "dev": true,
- "dependencies": {
- "tabbable": "^6.2.0"
- }
- },
- "node_modules/fsevents": {
- "version": "2.3.3",
- "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz",
- "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==",
- "dev": true,
- "hasInstallScript": true,
- "optional": true,
- "os": [
- "darwin"
- ],
- "engines": {
- "node": "^8.16.0 || ^10.6.0 || >=11.0.0"
- }
- },
- "node_modules/globals": {
- "version": "15.15.0",
- "resolved": "https://registry.npmjs.org/globals/-/globals-15.15.0.tgz",
- "integrity": "sha512-7ACyT3wmyp3I61S4fG682L0VA2RGD9otkqGJIwNUMF1SWUombIIk+af1unuDYgMm082aHYwD+mzJvv9Iu8dsgg==",
- "license": "MIT",
- "engines": {
- "node": ">=18"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/hachure-fill": {
- "version": "0.5.2",
- "resolved": "https://registry.npmjs.org/hachure-fill/-/hachure-fill-0.5.2.tgz",
- "integrity": "sha512-3GKBOn+m2LX9iq+JC1064cSFprJY4jL1jCXTcpnfER5HYE2l/4EfWSGzkPa/ZDBmYI0ZOEj5VHV/eKnPGkHuOg==",
- "license": "MIT"
- },
- "node_modules/hookable": {
- "version": "5.5.3",
- "resolved": "https://registry.npmjs.org/hookable/-/hookable-5.5.3.tgz",
- "integrity": "sha512-Yc+BQe8SvoXH1643Qez1zqLRmbA5rCL+sSmk6TVos0LWVfNIB7PGncdlId77WzLGSIB5KaWgTaNTs2lNVEI6VQ==",
- "dev": true
- },
- "node_modules/iconv-lite": {
- "version": "0.6.3",
- "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz",
- "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==",
- "license": "MIT",
- "dependencies": {
- "safer-buffer": ">= 2.1.2 < 3.0.0"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/internmap": {
- "version": "2.0.3",
- "resolved": "https://registry.npmjs.org/internmap/-/internmap-2.0.3.tgz",
- "integrity": "sha512-5Hh7Y1wQbvY5ooGgPbDaL5iYLAPzMTUrjMulskHLH6wnv/A+1q5rgEaiuqEjB+oxGXIVZs1FF+R/KPN3ZSQYYg==",
- "license": "ISC",
- "engines": {
- "node": ">=12"
- }
- },
- "node_modules/is-what": {
- "version": "4.1.16",
- "resolved": "https://registry.npmjs.org/is-what/-/is-what-4.1.16.tgz",
- "integrity": "sha512-ZhMwEosbFJkA0YhFnNDgTM4ZxDRsS6HqTo7qsZM08fehyRYIYa0yHu5R6mgo1n/8MgaPBXiPimPD77baVFYg+A==",
- "dev": true,
- "engines": {
- "node": ">=12.13"
- },
- "funding": {
- "url": "https://github.com/sponsors/mesqueeb"
- }
- },
- "node_modules/katex": {
- "version": "0.16.22",
- "resolved": "https://registry.npmjs.org/katex/-/katex-0.16.22.tgz",
- "integrity": "sha512-XCHRdUw4lf3SKBaJe4EvgqIuWwkPSo9XoeO8GjQW94Bp7TWv9hNhzZjZ+OH9yf1UmLygb7DIT5GSFQiyt16zYg==",
- "funding": [
- "https://opencollective.com/katex",
- "https://github.com/sponsors/katex"
- ],
- "license": "MIT",
- "dependencies": {
- "commander": "^8.3.0"
- },
- "bin": {
- "katex": "cli.js"
- }
- },
- "node_modules/katex/node_modules/commander": {
- "version": "8.3.0",
- "resolved": "https://registry.npmjs.org/commander/-/commander-8.3.0.tgz",
- "integrity": "sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==",
- "license": "MIT",
- "engines": {
- "node": ">= 12"
- }
- },
- "node_modules/khroma": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/khroma/-/khroma-2.1.0.tgz",
- "integrity": "sha512-Ls993zuzfayK269Svk9hzpeGUKob/sIgZzyHYdjQoAdQetRKpOLj+k/QQQ/6Qi0Yz65mlROrfd+Ev+1+7dz9Kw=="
- },
- "node_modules/kolorist": {
- "version": "1.8.0",
- "resolved": "https://registry.npmjs.org/kolorist/-/kolorist-1.8.0.tgz",
- "integrity": "sha512-Y+60/zizpJ3HRH8DCss+q95yr6145JXZo46OTpFvDZWLfRCE4qChOyk1b26nMaNpfHHgxagk9dXT5OP0Tfe+dQ==",
- "license": "MIT"
- },
- "node_modules/langium": {
- "version": "3.3.1",
- "resolved": "https://registry.npmjs.org/langium/-/langium-3.3.1.tgz",
- "integrity": "sha512-QJv/h939gDpvT+9SiLVlY7tZC3xB2qK57v0J04Sh9wpMb6MP1q8gB21L3WIo8T5P1MSMg3Ep14L7KkDCFG3y4w==",
- "license": "MIT",
- "dependencies": {
- "chevrotain": "~11.0.3",
- "chevrotain-allstar": "~0.3.0",
- "vscode-languageserver": "~9.0.1",
- "vscode-languageserver-textdocument": "~1.0.11",
- "vscode-uri": "~3.0.8"
- },
- "engines": {
- "node": ">=16.0.0"
- }
- },
- "node_modules/layout-base": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/layout-base/-/layout-base-1.0.2.tgz",
- "integrity": "sha512-8h2oVEZNktL4BH2JCOI90iD1yXwL6iNW7KcCKT2QZgQJR2vbqDsldCTPRU9NifTCqHZci57XvQQ15YTu+sTYPg==",
- "license": "MIT"
- },
- "node_modules/local-pkg": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/local-pkg/-/local-pkg-1.1.1.tgz",
- "integrity": "sha512-WunYko2W1NcdfAFpuLUoucsgULmgDBRkdxHxWQ7mK0cQqwPiy8E1enjuRBrhLtZkB5iScJ1XIPdhVEFK8aOLSg==",
- "license": "MIT",
- "dependencies": {
- "mlly": "^1.7.4",
- "pkg-types": "^2.0.1",
- "quansync": "^0.2.8"
- },
- "engines": {
- "node": ">=14"
- },
- "funding": {
- "url": "https://github.com/sponsors/antfu"
- }
- },
- "node_modules/lodash-es": {
- "version": "4.17.21",
- "resolved": "https://registry.npmjs.org/lodash-es/-/lodash-es-4.17.21.tgz",
- "integrity": "sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw==",
- "license": "MIT"
- },
- "node_modules/magic-string": {
- "version": "0.30.11",
- "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.11.tgz",
- "integrity": "sha512-+Wri9p0QHMy+545hKww7YAu5NyzF8iomPL/RQazugQ9+Ez4Ic3mERMd8ZTX5rfK944j+560ZJi8iAwgak1Ac7A==",
- "dev": true,
- "dependencies": {
- "@jridgewell/sourcemap-codec": "^1.5.0"
- }
- },
- "node_modules/mark.js": {
- "version": "8.11.1",
- "resolved": "https://registry.npmjs.org/mark.js/-/mark.js-8.11.1.tgz",
- "integrity": "sha512-1I+1qpDt4idfgLQG+BNWmrqku+7/2bi5nLf4YwF8y8zXvmfiTBY3PV3ZibfrjBueCByROpuBjLLFCajqkgYoLQ==",
- "dev": true
- },
- "node_modules/marked": {
- "version": "15.0.12",
- "resolved": "https://registry.npmjs.org/marked/-/marked-15.0.12.tgz",
- "integrity": "sha512-8dD6FusOQSrpv9Z1rdNMdlSgQOIP880DHqnohobOmYLElGEqAL/JvxvuxZO16r4HtjTlfPRDC1hbvxC9dPN2nA==",
- "license": "MIT",
- "bin": {
- "marked": "bin/marked.js"
- },
- "engines": {
- "node": ">= 18"
- }
- },
- "node_modules/mermaid": {
- "version": "11.8.0",
- "resolved": "https://registry.npmjs.org/mermaid/-/mermaid-11.8.0.tgz",
- "integrity": "sha512-uAZUwnBiqREZcUrFw3G5iQ5Pj3hTYUP95EZc3ec/nGBzHddJZydzYGE09tGZDBS1VoSoDn0symZ85FmypSTo5g==",
- "license": "MIT",
- "dependencies": {
- "@braintree/sanitize-url": "^7.0.4",
- "@iconify/utils": "^2.1.33",
- "@mermaid-js/parser": "^0.6.0",
- "@types/d3": "^7.4.3",
- "cytoscape": "^3.29.3",
- "cytoscape-cose-bilkent": "^4.1.0",
- "cytoscape-fcose": "^2.2.0",
- "d3": "^7.9.0",
- "d3-sankey": "^0.12.3",
- "dagre-d3-es": "7.0.11",
- "dayjs": "^1.11.13",
- "dompurify": "^3.2.5",
- "katex": "^0.16.9",
- "khroma": "^2.1.0",
- "lodash-es": "^4.17.21",
- "marked": "^15.0.7",
- "roughjs": "^4.6.6",
- "stylis": "^4.3.6",
- "ts-dedent": "^2.2.0",
- "uuid": "^11.1.0"
- }
- },
- "node_modules/minisearch": {
- "version": "7.1.0",
- "resolved": "https://registry.npmjs.org/minisearch/-/minisearch-7.1.0.tgz",
- "integrity": "sha512-tv7c/uefWdEhcu6hvrfTihflgeEi2tN6VV7HJnCjK6VxM75QQJh4t9FwJCsA2EsRS8LCnu3W87CuGPWMocOLCA==",
- "dev": true
- },
- "node_modules/mitt": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/mitt/-/mitt-3.0.1.tgz",
- "integrity": "sha512-vKivATfr97l2/QBCYAkXYDbrIWPM2IIKEl7YPhjCvKlG3kE2gm+uBo6nEXK3M5/Ffh/FLpKExzOQ3JJoJGFKBw==",
- "dev": true
- },
- "node_modules/mlly": {
- "version": "1.7.4",
- "resolved": "https://registry.npmjs.org/mlly/-/mlly-1.7.4.tgz",
- "integrity": "sha512-qmdSIPC4bDJXgZTCR7XosJiNKySV7O215tsPtDN9iEO/7q/76b/ijtgRu/+epFXSJhijtTCCGp3DWS549P3xKw==",
- "license": "MIT",
- "dependencies": {
- "acorn": "^8.14.0",
- "pathe": "^2.0.1",
- "pkg-types": "^1.3.0",
- "ufo": "^1.5.4"
- }
- },
- "node_modules/mlly/node_modules/confbox": {
- "version": "0.1.8",
- "resolved": "https://registry.npmjs.org/confbox/-/confbox-0.1.8.tgz",
- "integrity": "sha512-RMtmw0iFkeR4YV+fUOSucriAQNb9g8zFR52MWCtl+cCZOFRNL6zeB395vPzFhEjjn4fMxXudmELnl/KF/WrK6w==",
- "license": "MIT"
- },
- "node_modules/mlly/node_modules/pkg-types": {
- "version": "1.3.1",
- "resolved": "https://registry.npmjs.org/pkg-types/-/pkg-types-1.3.1.tgz",
- "integrity": "sha512-/Jm5M4RvtBFVkKWRu2BLUTNP8/M2a+UwuAX+ae4770q1qVGtfjG+WTCupoZixokjmHiry8uI+dlY8KXYV5HVVQ==",
- "license": "MIT",
- "dependencies": {
- "confbox": "^0.1.8",
- "mlly": "^1.7.4",
- "pathe": "^2.0.1"
- }
- },
- "node_modules/ms": {
- "version": "2.1.3",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
- "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==",
- "license": "MIT"
- },
- "node_modules/nanoid": {
- "version": "3.3.11",
- "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.11.tgz",
- "integrity": "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==",
- "dev": true,
- "funding": [
- {
- "type": "github",
- "url": "https://github.com/sponsors/ai"
- }
- ],
- "license": "MIT",
- "bin": {
- "nanoid": "bin/nanoid.cjs"
- },
- "engines": {
- "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1"
- }
- },
- "node_modules/package-manager-detector": {
- "version": "1.3.0",
- "resolved": "https://registry.npmjs.org/package-manager-detector/-/package-manager-detector-1.3.0.tgz",
- "integrity": "sha512-ZsEbbZORsyHuO00lY1kV3/t72yp6Ysay6Pd17ZAlNGuGwmWDLCJxFpRs0IzfXfj1o4icJOkUEioexFHzyPurSQ==",
- "license": "MIT"
- },
- "node_modules/path-data-parser": {
- "version": "0.1.0",
- "resolved": "https://registry.npmjs.org/path-data-parser/-/path-data-parser-0.1.0.tgz",
- "integrity": "sha512-NOnmBpt5Y2RWbuv0LMzsayp3lVylAHLPUTut412ZA3l+C4uw4ZVkQbjShYCQ8TCpUMdPapr4YjUqLYD6v68j+w==",
- "license": "MIT"
- },
- "node_modules/pathe": {
- "version": "2.0.3",
- "resolved": "https://registry.npmjs.org/pathe/-/pathe-2.0.3.tgz",
- "integrity": "sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==",
- "license": "MIT"
- },
- "node_modules/perfect-debounce": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/perfect-debounce/-/perfect-debounce-1.0.0.tgz",
- "integrity": "sha512-xCy9V055GLEqoFaHoC1SoLIaLmWctgCUaBaWxDZ7/Zx4CTyX7cJQLJOok/orfjZAh9kEYpjJa4d0KcJmCbctZA==",
- "dev": true
- },
- "node_modules/picocolors": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz",
- "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==",
- "dev": true
- },
- "node_modules/pkg-types": {
- "version": "2.2.0",
- "resolved": "https://registry.npmjs.org/pkg-types/-/pkg-types-2.2.0.tgz",
- "integrity": "sha512-2SM/GZGAEkPp3KWORxQZns4M+WSeXbC2HEvmOIJe3Cmiv6ieAJvdVhDldtHqM5J1Y7MrR1XhkBT/rMlhh9FdqQ==",
- "license": "MIT",
- "dependencies": {
- "confbox": "^0.2.2",
- "exsolve": "^1.0.7",
- "pathe": "^2.0.3"
- }
- },
- "node_modules/points-on-curve": {
- "version": "0.2.0",
- "resolved": "https://registry.npmjs.org/points-on-curve/-/points-on-curve-0.2.0.tgz",
- "integrity": "sha512-0mYKnYYe9ZcqMCWhUjItv/oHjvgEsfKvnUTg8sAtnHr3GVy7rGkXCb6d5cSyqrWqL4k81b9CPg3urd+T7aop3A==",
- "license": "MIT"
- },
- "node_modules/points-on-path": {
- "version": "0.2.1",
- "resolved": "https://registry.npmjs.org/points-on-path/-/points-on-path-0.2.1.tgz",
- "integrity": "sha512-25ClnWWuw7JbWZcgqY/gJ4FQWadKxGWk+3kR/7kD0tCaDtPPMj7oHu2ToLaVhfpnHrZzYby2w6tUA0eOIuUg8g==",
- "license": "MIT",
- "dependencies": {
- "path-data-parser": "0.1.0",
- "points-on-curve": "0.2.0"
- }
- },
- "node_modules/postcss": {
- "version": "8.4.49",
- "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.49.tgz",
- "integrity": "sha512-OCVPnIObs4N29kxTjzLfUryOkvZEq+pf8jTF0lg8E7uETuWHA+v7j3c/xJmiqpX450191LlmZfUKkXxkTry7nA==",
- "dev": true,
- "funding": [
- {
- "type": "opencollective",
- "url": "https://opencollective.com/postcss/"
- },
- {
- "type": "tidelift",
- "url": "https://tidelift.com/funding/github/npm/postcss"
- },
- {
- "type": "github",
- "url": "https://github.com/sponsors/ai"
- }
- ],
- "dependencies": {
- "nanoid": "^3.3.7",
- "picocolors": "^1.1.1",
- "source-map-js": "^1.2.1"
- },
- "engines": {
- "node": "^10 || ^12 || >=14"
- }
- },
- "node_modules/preact": {
- "version": "10.23.2",
- "resolved": "https://registry.npmjs.org/preact/-/preact-10.23.2.tgz",
- "integrity": "sha512-kKYfePf9rzKnxOAKDpsWhg/ysrHPqT+yQ7UW4JjdnqjFIeNUnNcEJvhuA8fDenxAGWzUqtd51DfVg7xp/8T9NA==",
- "dev": true,
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/preact"
- }
- },
- "node_modules/quansync": {
- "version": "0.2.10",
- "resolved": "https://registry.npmjs.org/quansync/-/quansync-0.2.10.tgz",
- "integrity": "sha512-t41VRkMYbkHyCYmOvx/6URnN80H7k4X0lLdBMGsz+maAwrJQYB1djpV6vHrQIBE0WBSGqhtEHrK9U3DWWH8v7A==",
- "funding": [
- {
- "type": "individual",
- "url": "https://github.com/sponsors/antfu"
- },
- {
- "type": "individual",
- "url": "https://github.com/sponsors/sxzz"
- }
- ],
- "license": "MIT"
- },
- "node_modules/rfdc": {
- "version": "1.4.1",
- "resolved": "https://registry.npmjs.org/rfdc/-/rfdc-1.4.1.tgz",
- "integrity": "sha512-q1b3N5QkRUWUl7iyylaaj3kOpIT0N2i9MqIEQXP73GVsN9cw3fdx8X63cEmWhJGi2PPCF23Ijp7ktmd39rawIA==",
- "dev": true
- },
- "node_modules/robust-predicates": {
- "version": "3.0.2",
- "resolved": "https://registry.npmjs.org/robust-predicates/-/robust-predicates-3.0.2.tgz",
- "integrity": "sha512-IXgzBWvWQwE6PrDI05OvmXUIruQTcoMDzRsOd5CDvHCVLcLHMTSYvOK5Cm46kWqlV3yAbuSpBZdJ5oP5OUoStg==",
- "license": "Unlicense"
- },
- "node_modules/rollup": {
- "version": "4.27.4",
- "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.27.4.tgz",
- "integrity": "sha512-RLKxqHEMjh/RGLsDxAEsaLO3mWgyoU6x9w6n1ikAzet4B3gI2/3yP6PWY2p9QzRTh6MfEIXB3MwsOY0Iv3vNrw==",
- "dev": true,
- "dependencies": {
- "@types/estree": "1.0.6"
- },
- "bin": {
- "rollup": "dist/bin/rollup"
- },
- "engines": {
- "node": ">=18.0.0",
- "npm": ">=8.0.0"
- },
- "optionalDependencies": {
- "@rollup/rollup-android-arm-eabi": "4.27.4",
- "@rollup/rollup-android-arm64": "4.27.4",
- "@rollup/rollup-darwin-arm64": "4.27.4",
- "@rollup/rollup-darwin-x64": "4.27.4",
- "@rollup/rollup-freebsd-arm64": "4.27.4",
- "@rollup/rollup-freebsd-x64": "4.27.4",
- "@rollup/rollup-linux-arm-gnueabihf": "4.27.4",
- "@rollup/rollup-linux-arm-musleabihf": "4.27.4",
- "@rollup/rollup-linux-arm64-gnu": "4.27.4",
- "@rollup/rollup-linux-arm64-musl": "4.27.4",
- "@rollup/rollup-linux-powerpc64le-gnu": "4.27.4",
- "@rollup/rollup-linux-riscv64-gnu": "4.27.4",
- "@rollup/rollup-linux-s390x-gnu": "4.27.4",
- "@rollup/rollup-linux-x64-gnu": "4.27.4",
- "@rollup/rollup-linux-x64-musl": "4.27.4",
- "@rollup/rollup-win32-arm64-msvc": "4.27.4",
- "@rollup/rollup-win32-ia32-msvc": "4.27.4",
- "@rollup/rollup-win32-x64-msvc": "4.27.4",
- "fsevents": "~2.3.2"
- }
- },
- "node_modules/roughjs": {
- "version": "4.6.6",
- "resolved": "https://registry.npmjs.org/roughjs/-/roughjs-4.6.6.tgz",
- "integrity": "sha512-ZUz/69+SYpFN/g/lUlo2FXcIjRkSu3nDarreVdGGndHEBJ6cXPdKguS8JGxwj5HA5xIbVKSmLgr5b3AWxtRfvQ==",
- "license": "MIT",
- "dependencies": {
- "hachure-fill": "^0.5.2",
- "path-data-parser": "^0.1.0",
- "points-on-curve": "^0.2.0",
- "points-on-path": "^0.2.1"
- }
- },
- "node_modules/rw": {
- "version": "1.3.3",
- "resolved": "https://registry.npmjs.org/rw/-/rw-1.3.3.tgz",
- "integrity": "sha512-PdhdWy89SiZogBLaw42zdeqtRJ//zFd2PgQavcICDUgJT5oW10QCRKbJ6bg4r0/UY2M6BWd5tkxuGFRvCkgfHQ==",
- "license": "BSD-3-Clause"
- },
- "node_modules/safer-buffer": {
- "version": "2.1.2",
- "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz",
- "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==",
- "license": "MIT"
- },
- "node_modules/search-insights": {
- "version": "2.17.0",
- "resolved": "https://registry.npmjs.org/search-insights/-/search-insights-2.17.0.tgz",
- "integrity": "sha512-AskayU3QNsXQzSL6v4LTYST7NNfs2HWyHHB+sdORP9chsytAhro5XRfToAMI/LAVYgNbzowVZTMfBRodgbUHKg==",
- "dev": true,
- "peer": true
- },
- "node_modules/shiki": {
- "version": "1.14.1",
- "resolved": "https://registry.npmjs.org/shiki/-/shiki-1.14.1.tgz",
- "integrity": "sha512-FujAN40NEejeXdzPt+3sZ3F2dx1U24BY2XTY01+MG8mbxCiA2XukXdcbyMyLAHJ/1AUUnQd1tZlvIjefWWEJeA==",
- "dev": true,
- "dependencies": {
- "@shikijs/core": "1.14.1",
- "@types/hast": "^3.0.4"
- }
- },
- "node_modules/source-map-js": {
- "version": "1.2.1",
- "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz",
- "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==",
- "dev": true,
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/speakingurl": {
- "version": "14.0.1",
- "resolved": "https://registry.npmjs.org/speakingurl/-/speakingurl-14.0.1.tgz",
- "integrity": "sha512-1POYv7uv2gXoyGFpBCmpDVSNV74IfsWlDW216UPjbWufNf+bSU6GdbDsxdcxtfwb4xlI3yxzOTKClUosxARYrQ==",
- "dev": true,
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/stylis": {
- "version": "4.3.6",
- "resolved": "https://registry.npmjs.org/stylis/-/stylis-4.3.6.tgz",
- "integrity": "sha512-yQ3rwFWRfwNUY7H5vpU0wfdkNSnvnJinhF9830Swlaxl03zsOjCfmX0ugac+3LtK0lYSgwL/KXc8oYL3mG4YFQ==",
- "license": "MIT"
- },
- "node_modules/superjson": {
- "version": "2.2.1",
- "resolved": "https://registry.npmjs.org/superjson/-/superjson-2.2.1.tgz",
- "integrity": "sha512-8iGv75BYOa0xRJHK5vRLEjE2H/i4lulTjzpUXic3Eg8akftYjkmQDa8JARQ42rlczXyFR3IeRoeFCc7RxHsYZA==",
- "dev": true,
- "dependencies": {
- "copy-anything": "^3.0.2"
- },
- "engines": {
- "node": ">=16"
- }
- },
- "node_modules/tabbable": {
- "version": "6.2.0",
- "resolved": "https://registry.npmjs.org/tabbable/-/tabbable-6.2.0.tgz",
- "integrity": "sha512-Cat63mxsVJlzYvN51JmVXIgNoUokrIaT2zLclCXjRd8boZ0004U4KCs/sToJ75C6sdlByWxpYnb5Boif1VSFew==",
- "dev": true
- },
- "node_modules/tinyexec": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/tinyexec/-/tinyexec-1.0.1.tgz",
- "integrity": "sha512-5uC6DDlmeqiOwCPmK9jMSdOuZTh8bU39Ys6yidB+UTt5hfZUPGAypSgFRiEp+jbi9qH40BLDvy85jIU88wKSqw==",
- "license": "MIT"
- },
- "node_modules/to-fast-properties": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz",
- "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==",
- "dev": true,
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/ts-dedent": {
- "version": "2.2.0",
- "resolved": "https://registry.npmjs.org/ts-dedent/-/ts-dedent-2.2.0.tgz",
- "integrity": "sha512-q5W7tVM71e2xjHZTlgfTDoPF/SmqKG5hddq9SzR49CH2hayqRKJtQ4mtRlSxKaJlR/+9rEM+mnBHf7I2/BQcpQ==",
- "license": "MIT",
- "engines": {
- "node": ">=6.10"
- }
- },
- "node_modules/ufo": {
- "version": "1.6.1",
- "resolved": "https://registry.npmjs.org/ufo/-/ufo-1.6.1.tgz",
- "integrity": "sha512-9a4/uxlTWJ4+a5i0ooc1rU7C7YOw3wT+UGqdeNNHWnOF9qcMBgLRS+4IYUqbczewFx4mLEig6gawh7X6mFlEkA==",
- "license": "MIT"
- },
- "node_modules/uuid": {
- "version": "11.1.0",
- "resolved": "https://registry.npmjs.org/uuid/-/uuid-11.1.0.tgz",
- "integrity": "sha512-0/A9rDy9P7cJ+8w1c9WD9V//9Wj15Ce2MPz8Ri6032usz+NfePxx5AcN3bN+r6ZL6jEo066/yNYB3tn4pQEx+A==",
- "funding": [
- "https://github.com/sponsors/broofa",
- "https://github.com/sponsors/ctavan"
- ],
- "license": "MIT",
- "bin": {
- "uuid": "dist/esm/bin/uuid"
- }
- },
- "node_modules/vite": {
- "version": "5.4.19",
- "resolved": "https://registry.npmjs.org/vite/-/vite-5.4.19.tgz",
- "integrity": "sha512-qO3aKv3HoQC8QKiNSTuUM1l9o/XX3+c+VTgLHbJWHZGeTPVAg2XwazI9UWzoxjIJCGCV2zU60uqMzjeLZuULqA==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "esbuild": "^0.21.3",
- "postcss": "^8.4.43",
- "rollup": "^4.20.0"
- },
- "bin": {
- "vite": "bin/vite.js"
- },
- "engines": {
- "node": "^18.0.0 || >=20.0.0"
- },
- "funding": {
- "url": "https://github.com/vitejs/vite?sponsor=1"
- },
- "optionalDependencies": {
- "fsevents": "~2.3.3"
- },
- "peerDependencies": {
- "@types/node": "^18.0.0 || >=20.0.0",
- "less": "*",
- "lightningcss": "^1.21.0",
- "sass": "*",
- "sass-embedded": "*",
- "stylus": "*",
- "sugarss": "*",
- "terser": "^5.4.0"
- },
- "peerDependenciesMeta": {
- "@types/node": {
- "optional": true
- },
- "less": {
- "optional": true
- },
- "lightningcss": {
- "optional": true
- },
- "sass": {
- "optional": true
- },
- "sass-embedded": {
- "optional": true
- },
- "stylus": {
- "optional": true
- },
- "sugarss": {
- "optional": true
- },
- "terser": {
- "optional": true
- }
- }
- },
- "node_modules/vitepress": {
- "version": "1.3.4",
- "resolved": "https://registry.npmjs.org/vitepress/-/vitepress-1.3.4.tgz",
- "integrity": "sha512-I1/F6OW1xl3kW4PaIMC6snxjWgf3qfziq2aqsDoFc/Gt41WbcRv++z8zjw8qGRIJ+I4bUW7ZcKFDHHN/jkH9DQ==",
- "dev": true,
- "dependencies": {
- "@docsearch/css": "^3.6.1",
- "@docsearch/js": "^3.6.1",
- "@shikijs/core": "^1.13.0",
- "@shikijs/transformers": "^1.13.0",
- "@types/markdown-it": "^14.1.2",
- "@vitejs/plugin-vue": "^5.1.2",
- "@vue/devtools-api": "^7.3.8",
- "@vue/shared": "^3.4.38",
- "@vueuse/core": "^11.0.0",
- "@vueuse/integrations": "^11.0.0",
- "focus-trap": "^7.5.4",
- "mark.js": "8.11.1",
- "minisearch": "^7.1.0",
- "shiki": "^1.13.0",
- "vite": "^5.4.1",
- "vue": "^3.4.38"
- },
- "bin": {
- "vitepress": "bin/vitepress.js"
- },
- "peerDependencies": {
- "markdown-it-mathjax3": "^4",
- "postcss": "^8"
- },
- "peerDependenciesMeta": {
- "markdown-it-mathjax3": {
- "optional": true
- },
- "postcss": {
- "optional": true
- }
- }
- },
- "node_modules/vscode-jsonrpc": {
- "version": "8.2.0",
- "resolved": "https://registry.npmjs.org/vscode-jsonrpc/-/vscode-jsonrpc-8.2.0.tgz",
- "integrity": "sha512-C+r0eKJUIfiDIfwJhria30+TYWPtuHJXHtI7J0YlOmKAo7ogxP20T0zxB7HZQIFhIyvoBPwWskjxrvAtfjyZfA==",
- "license": "MIT",
- "engines": {
- "node": ">=14.0.0"
- }
- },
- "node_modules/vscode-languageserver": {
- "version": "9.0.1",
- "resolved": "https://registry.npmjs.org/vscode-languageserver/-/vscode-languageserver-9.0.1.tgz",
- "integrity": "sha512-woByF3PDpkHFUreUa7Hos7+pUWdeWMXRd26+ZX2A8cFx6v/JPTtd4/uN0/jB6XQHYaOlHbio03NTHCqrgG5n7g==",
- "license": "MIT",
- "dependencies": {
- "vscode-languageserver-protocol": "3.17.5"
- },
- "bin": {
- "installServerIntoExtension": "bin/installServerIntoExtension"
- }
- },
- "node_modules/vscode-languageserver-protocol": {
- "version": "3.17.5",
- "resolved": "https://registry.npmjs.org/vscode-languageserver-protocol/-/vscode-languageserver-protocol-3.17.5.tgz",
- "integrity": "sha512-mb1bvRJN8SVznADSGWM9u/b07H7Ecg0I3OgXDuLdn307rl/J3A9YD6/eYOssqhecL27hK1IPZAsaqh00i/Jljg==",
- "license": "MIT",
- "dependencies": {
- "vscode-jsonrpc": "8.2.0",
- "vscode-languageserver-types": "3.17.5"
- }
- },
- "node_modules/vscode-languageserver-textdocument": {
- "version": "1.0.12",
- "resolved": "https://registry.npmjs.org/vscode-languageserver-textdocument/-/vscode-languageserver-textdocument-1.0.12.tgz",
- "integrity": "sha512-cxWNPesCnQCcMPeenjKKsOCKQZ/L6Tv19DTRIGuLWe32lyzWhihGVJ/rcckZXJxfdKCFvRLS3fpBIsV/ZGX4zA==",
- "license": "MIT"
- },
- "node_modules/vscode-languageserver-types": {
- "version": "3.17.5",
- "resolved": "https://registry.npmjs.org/vscode-languageserver-types/-/vscode-languageserver-types-3.17.5.tgz",
- "integrity": "sha512-Ld1VelNuX9pdF39h2Hgaeb5hEZM2Z3jUrrMgWQAu82jMtZp7p3vJT3BzToKtZI7NgQssZje5o0zryOrhQvzQAg==",
- "license": "MIT"
- },
- "node_modules/vscode-uri": {
- "version": "3.0.8",
- "resolved": "https://registry.npmjs.org/vscode-uri/-/vscode-uri-3.0.8.tgz",
- "integrity": "sha512-AyFQ0EVmsOZOlAnxoFOGOq1SQDWAB7C6aqMGS23svWAllfOaxbuFvcT8D1i8z3Gyn8fraVeZNNmN6e9bxxXkKw==",
- "license": "MIT"
- },
- "node_modules/vue": {
- "version": "3.4.38",
- "resolved": "https://registry.npmjs.org/vue/-/vue-3.4.38.tgz",
- "integrity": "sha512-f0ZgN+mZ5KFgVv9wz0f4OgVKukoXtS3nwET4c2vLBGQR50aI8G0cqbFtLlX9Yiyg3LFGBitruPHt2PxwTduJEw==",
- "dev": true,
- "dependencies": {
- "@vue/compiler-dom": "3.4.38",
- "@vue/compiler-sfc": "3.4.38",
- "@vue/runtime-dom": "3.4.38",
- "@vue/server-renderer": "3.4.38",
- "@vue/shared": "3.4.38"
- },
- "peerDependencies": {
- "typescript": "*"
- },
- "peerDependenciesMeta": {
- "typescript": {
- "optional": true
- }
- }
- }
- }
-}
diff --git a/package.json b/package.json
index 7a469afd1..570a876b0 100644
--- a/package.json
+++ b/package.json
@@ -1,14 +1,8 @@
{
- "devDependencies": {
- "vitepress": "^1.3.4"
- },
"scripts": {
- "docs:dev": "vitepress dev docs",
- "docs:build": "vitepress build docs",
- "docs:preview": "vitepress preview docs"
+ "dev": "npx mintlify dev"
},
"dependencies": {
- "mermaid": "^11.8.0",
- "vitepress-openapi": "^0.1.10"
+ "mintlify": "^4.2.375"
}
}
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index 70b804dc0..5d33fce9d 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -8,937 +8,1318 @@ importers:
.:
dependencies:
- mermaid:
- specifier: ^11.8.0
- version: 11.12.1
- vitepress-openapi:
- specifier: ^0.1.10
- version: 0.1.10(vitepress@1.6.4(@algolia/client-search@5.42.0)(postcss@8.5.6)(search-insights@2.17.3))(vue@3.5.22)
- devDependencies:
- vitepress:
- specifier: ^1.3.4
- version: 1.6.4(@algolia/client-search@5.42.0)(postcss@8.5.6)(search-insights@2.17.3)
+ mintlify:
+ specifier: ^4.2.375
+ version: 4.2.375(@radix-ui/react-popover@1.1.15(@types/react@19.2.14)(react-dom@18.3.1(react@19.2.3))(react@19.2.3))(@types/node@25.3.0)(@types/react@19.2.14)(react-dom@18.3.1(react@19.2.3))(typescript@5.9.3)
packages:
- '@algolia/abtesting@1.8.0':
- resolution: {integrity: sha512-Hb4BkGNnvgCj3F9XzqjiFTpA5IGkjOXwGAOV13qtc27l2qNF8X9rzSp1H5hu8XewlC0DzYtQtZZIOYzRZDyuXg==}
- engines: {node: '>= 14.0.0'}
+ '@alcalzone/ansi-tokenize@0.2.5':
+ resolution: {integrity: sha512-3NX/MpTdroi0aKz134A6RC2Gb2iXVECN4QaAXnvCIxxIm3C3AVB1mkUe8NaaiyvOpDfsrqWhYtj+Q6a62RrTsw==}
+ engines: {node: '>=18'}
- '@algolia/autocomplete-core@1.17.7':
- resolution: {integrity: sha512-BjiPOW6ks90UKl7TwMv7oNQMnzU+t/wk9mgIDi6b1tXpUek7MW0lbNOUHpvam9pe3lVCf4xPFT+lK7s+e+fs7Q==}
+ '@alloc/quick-lru@5.2.0':
+ resolution: {integrity: sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==}
+ engines: {node: '>=10'}
- '@algolia/autocomplete-plugin-algolia-insights@1.17.7':
- resolution: {integrity: sha512-Jca5Ude6yUOuyzjnz57og7Et3aXjbwCSDf/8onLHSQgw1qW3ALl9mrMWaXb5FmPVkV3EtkD2F/+NkT6VHyPu9A==}
- peerDependencies:
- search-insights: '>= 1 < 3'
+ '@ark/schema@0.55.0':
+ resolution: {integrity: sha512-IlSIc0FmLKTDGr4I/FzNHauMn0MADA6bCjT1wauu4k6MyxhC1R9gz0olNpIRvK7lGGDwtc/VO0RUDNvVQW5WFg==}
- '@algolia/autocomplete-preset-algolia@1.17.7':
- resolution: {integrity: sha512-ggOQ950+nwbWROq2MOCIL71RE0DdQZsceqrg32UqnhDz8FlO9rL8ONHNsI2R1MH0tkgVIDKI/D0sMiUchsFdWA==}
- peerDependencies:
- '@algolia/client-search': '>= 4.9.1 < 6'
- algoliasearch: '>= 4.9.1 < 6'
+ '@ark/schema@0.56.0':
+ resolution: {integrity: sha512-ECg3hox/6Z/nLajxXqNhgPtNdHWC9zNsDyskwO28WinoFEnWow4IsERNz9AnXRhTZJnYIlAJ4uGn3nlLk65vZA==}
- '@algolia/autocomplete-shared@1.17.7':
- resolution: {integrity: sha512-o/1Vurr42U/qskRSuhBH+VKxMvkkUVTLU6WZQr+L5lGZZLYWyhdzWjW0iGXY7EkwRTjBqvN2EsR81yCTGV/kmg==}
- peerDependencies:
- '@algolia/client-search': '>= 4.9.1 < 6'
- algoliasearch: '>= 4.9.1 < 6'
+ '@ark/util@0.55.0':
+ resolution: {integrity: sha512-aWFNK7aqSvqFtVsl1xmbTjGbg91uqtJV7Za76YGNEwIO4qLjMfyY8flmmbhooYMuqPCO2jyxu8hve943D+w3bA==}
- '@algolia/client-abtesting@5.42.0':
- resolution: {integrity: sha512-JLyyG7bb7XOda+w/sp8ch7rEVy6LnWs3qtxr6VJJ2XIINqGsY6U+0L3aJ6QFliBRNUeEAr2QBDxSm8u9Sal5uA==}
- engines: {node: '>= 14.0.0'}
+ '@ark/util@0.56.0':
+ resolution: {integrity: sha512-BghfRC8b9pNs3vBoDJhcta0/c1J1rsoS1+HgVUreMFPdhz/CRAKReAu57YEllNaSy98rWAdY1gE+gFup7OXpgA==}
- '@algolia/client-analytics@5.42.0':
- resolution: {integrity: sha512-SkCrvtZpdSWjNq9NGu/TtOg4TbzRuUToXlQqV6lLePa2s/WQlEyFw7QYjrz4itprWG9ASuH+StDlq7n49F2sBA==}
- engines: {node: '>= 14.0.0'}
+ '@asyncapi/parser@3.4.0':
+ resolution: {integrity: sha512-Sxn74oHiZSU6+cVeZy62iPZMFMvKp4jupMFHelSICCMw1qELmUHPvuZSr+ZHDmNGgHcEpzJM5HN02kR7T4g+PQ==}
- '@algolia/client-common@5.42.0':
- resolution: {integrity: sha512-6iiFbm2tRn6B2OqFv9XDTcw5LdWPudiJWIbRk+fsTX+hkPrPm4e1/SbU+lEYBciPoaTShLkDbRge4UePEyCPMQ==}
- engines: {node: '>= 14.0.0'}
+ '@asyncapi/specs@6.8.1':
+ resolution: {integrity: sha512-czHoAk3PeXTLR+X8IUaD+IpT+g+zUvkcgMDJVothBsan+oHN3jfcFcFUNdOPAAFoUCQN1hXF1dWuphWy05THlA==}
- '@algolia/client-insights@5.42.0':
- resolution: {integrity: sha512-iEokmw2k6FBa8g/TT7ClyEriaP/FUEmz3iczRoCklEHWSgoABMkaeYrxRXrA2yx76AN+gyZoC8FX0iCJ55dsOg==}
- engines: {node: '>= 14.0.0'}
-
- '@algolia/client-personalization@5.42.0':
- resolution: {integrity: sha512-ivVniRqX2ARd+jGvRHTxpWeOtO9VT+rK+OmiuRgkSunoTyxk0vjeDO7QkU7+lzBOXiYgakNjkZrBtIpW9c+muw==}
- engines: {node: '>= 14.0.0'}
-
- '@algolia/client-query-suggestions@5.42.0':
- resolution: {integrity: sha512-9+BIw6rerUfA+eLMIS2lF4mgoeBGTCIHiqb35PLn3699Rm3CaJXz03hChdwAWcA6SwGw0haYXYJa7LF0xI6EpA==}
- engines: {node: '>= 14.0.0'}
-
- '@algolia/client-search@5.42.0':
- resolution: {integrity: sha512-NZR7yyHj2WzK6D5X8gn+/KOxPdzYEXOqVdSaK/biU8QfYUpUuEA0sCWg/XlO05tPVEcJelF/oLrrNY3UjRbOww==}
- engines: {node: '>= 14.0.0'}
-
- '@algolia/ingestion@1.42.0':
- resolution: {integrity: sha512-MBkjRymf4BT6VOvMpJlg6kq8K+PkH9q+N+K4YMNdzTXlL40YwOa1wIWQ5LxP/Jhlz64kW5g9/oaMWY06Sy9dcw==}
- engines: {node: '>= 14.0.0'}
-
- '@algolia/monitoring@1.42.0':
- resolution: {integrity: sha512-kmLs7YfjT4cpr4FnhhRmnoSX4psh9KYZ9NAiWt/YcUV33m0B/Os5L4QId30zVXkOqAPAEpV5VbDPWep+/aoJdQ==}
- engines: {node: '>= 14.0.0'}
-
- '@algolia/recommend@5.42.0':
- resolution: {integrity: sha512-U5yZ8+Jj+A4ZC0IMfElpPcddQ9NCoawD1dKyWmjHP49nzN2Z4284IFVMAJWR6fq/0ddGf4OMjjYO9cnF8L+5tw==}
- engines: {node: '>= 14.0.0'}
-
- '@algolia/requester-browser-xhr@5.42.0':
- resolution: {integrity: sha512-EbuxgteaYBlKgc2Fs3JzoPIKAIaevAIwmv1F+fakaEXeibG4pkmVNsyTUjpOZIgJ1kXeqNvDrcjRb6g3vYBJ9A==}
- engines: {node: '>= 14.0.0'}
-
- '@algolia/requester-fetch@5.42.0':
- resolution: {integrity: sha512-4vnFvY5Q8QZL9eDNkywFLsk/eQCRBXCBpE8HWs8iUsFNHYoamiOxAeYMin0W/nszQj6abc+jNxMChHmejO+ftQ==}
- engines: {node: '>= 14.0.0'}
-
- '@algolia/requester-node-http@5.42.0':
- resolution: {integrity: sha512-gkLNpU+b1pCIwk1hKTJz2NWQPT8gsfGhQasnZ5QVv4jd79fKRL/1ikd86P0AzuIQs9tbbhlMwxsSTyJmlq502w==}
- engines: {node: '>= 14.0.0'}
-
- '@antfu/install-pkg@1.1.0':
- resolution: {integrity: sha512-MGQsmw10ZyI+EJo45CdSER4zEb+p31LpDAFp2Z3gkSd1yqVZGi0Ebx++YTEMonJy4oChEMLsxZ64j8FH6sSqtQ==}
-
- '@antfu/utils@9.3.0':
- resolution: {integrity: sha512-9hFT4RauhcUzqOE4f1+frMKLZrgNog5b06I7VmZQV1BkvwvqrbC8EBZf3L1eEL2AKb6rNKjER0sEvJiSP1FXEA==}
-
- '@babel/helper-string-parser@7.27.1':
- resolution: {integrity: sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==}
+ '@babel/code-frame@7.29.0':
+ resolution: {integrity: sha512-9NhCeYjq9+3uxgdtp20LSiJXJvN0FeCtNGpJxuMFZ1Kv3cWUNb6DOhJwUvcVCzKGR66cw4njwM6hrJLqgOwbcw==}
engines: {node: '>=6.9.0'}
'@babel/helper-validator-identifier@7.28.5':
resolution: {integrity: sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q==}
engines: {node: '>=6.9.0'}
- '@babel/parser@7.28.5':
- resolution: {integrity: sha512-KKBU1VGYR7ORr3At5HAtUQ+TV3SzRCXmA/8OdDZiLDBIZxVyzXuztPjfLd3BV1PRAQGCMWWSHYhL0F8d5uHBDQ==}
- engines: {node: '>=6.0.0'}
- hasBin: true
+ '@canvas/image-data@1.1.0':
+ resolution: {integrity: sha512-QdObRRjRbcXGmM1tmJ+MrHcaz1MftF2+W7YI+MsphnsCrmtyfS0d5qJbk0MeSbUeyM/jCb0hmnkXPsy026L7dA==}
- '@babel/types@7.28.5':
- resolution: {integrity: sha512-qQ5m48eI/MFLQ5PxQj4PFaprjyCTLI37ElWMmNs0K8Lk3dVeOdNpB3ks8jc7yM5CDmVC73eMVk/trk3fgmrUpA==}
- engines: {node: '>=6.9.0'}
+ '@emnapi/runtime@1.8.1':
+ resolution: {integrity: sha512-mehfKSMWjjNol8659Z8KxEMrdSJDDot5SXMq00dM8BN4o+CLNXQ0xH2V7EchNHV4RmbZLmmPdEaXZc5H2FXmDg==}
- '@braintree/sanitize-url@7.1.1':
- resolution: {integrity: sha512-i1L7noDNxtFyL5DmZafWy1wRVhGehQmzZaz1HiN5e7iylJMSZR7ekOV7NsIqa5qBldlLrsKv4HbgFUVlQrz8Mw==}
+ '@floating-ui/core@1.7.4':
+ resolution: {integrity: sha512-C3HlIdsBxszvm5McXlB8PeOEWfBhcGBTZGkGlWc2U0KFY5IwG5OQEuQ8rq52DZmcHDlPLd+YFBK+cZcytwIFWg==}
- '@chevrotain/cst-dts-gen@11.0.3':
- resolution: {integrity: sha512-BvIKpRLeS/8UbfxXxgC33xOumsacaeCKAjAeLyOn7Pcp95HiRbrpl14S+9vaZLolnbssPIUuiUd8IvgkRyt6NQ==}
+ '@floating-ui/dom@1.7.5':
+ resolution: {integrity: sha512-N0bD2kIPInNHUHehXhMke1rBGs1dwqvC9O9KYMyyjK7iXt7GAhnro7UlcuYcGdS/yYOlq0MAVgrow8IbWJwyqg==}
- '@chevrotain/gast@11.0.3':
- resolution: {integrity: sha512-+qNfcoNk70PyS/uxmj3li5NiECO+2YKZZQMbmjTqRI3Qchu8Hig/Q9vgkHpI3alNjr7M+a2St5pw5w5F6NL5/Q==}
-
- '@chevrotain/regexp-to-ast@11.0.3':
- resolution: {integrity: sha512-1fMHaBZxLFvWI067AVbGJav1eRY7N8DDvYCTwGBiE/ytKBgP8azTdgyrKyWZ9Mfh09eHWb5PgTSO8wi7U824RA==}
-
- '@chevrotain/types@11.0.3':
- resolution: {integrity: sha512-gsiM3G8b58kZC2HaWR50gu6Y1440cHiJ+i3JUvcp/35JchYejb2+5MVeJK0iKThYpAa/P2PYFV4hoi44HD+aHQ==}
-
- '@chevrotain/utils@11.0.3':
- resolution: {integrity: sha512-YslZMgtJUyuMbZ+aKvfF3x1f5liK4mWNxghFRv7jqRR9C3R3fAOGTTKvxXDa2Y1s9zSbcpuO0cAxDYsc9SrXoQ==}
-
- '@docsearch/css@3.8.2':
- resolution: {integrity: sha512-y05ayQFyUmCXze79+56v/4HpycYF3uFqB78pLPrSV5ZKAlDuIAAJNhaRi8tTdRNXh05yxX/TyNnzD6LwSM89vQ==}
-
- '@docsearch/js@3.8.2':
- resolution: {integrity: sha512-Q5wY66qHn0SwA7Taa0aDbHiJvaFJLOJyHmooQ7y8hlwwQLQ/5WwCcoX0g7ii04Qi2DJlHsd0XXzJ8Ypw9+9YmQ==}
-
- '@docsearch/react@3.8.2':
- resolution: {integrity: sha512-xCRrJQlTt8N9GU0DG4ptwHRkfnSnD/YpdeaXe02iKfqs97TkZJv60yE+1eq/tjPcVnTW8dP5qLP7itifFVV5eg==}
+ '@floating-ui/react-dom@2.1.7':
+ resolution: {integrity: sha512-0tLRojf/1Go2JgEVm+3Frg9A3IW8bJgKgdO0BN5RkF//ufuz2joZM63Npau2ff3J6lUVYgDSNzNkR+aH3IVfjg==}
peerDependencies:
- '@types/react': '>= 16.8.0 < 19.0.0'
- react: '>= 16.8.0 < 19.0.0'
- react-dom: '>= 16.8.0 < 19.0.0'
- search-insights: '>= 1 < 3'
- peerDependenciesMeta:
- '@types/react':
- optional: true
- react:
- optional: true
- react-dom:
- optional: true
- search-insights:
- optional: true
-
- '@esbuild/aix-ppc64@0.21.5':
- resolution: {integrity: sha512-1SDgH6ZSPTlggy1yI6+Dbkiz8xzpHJEVAlF/AM1tHPLsf5STom9rwtjE4hKAF20FfXXNTFqEYXyJNWh1GiZedQ==}
- engines: {node: '>=12'}
- cpu: [ppc64]
- os: [aix]
-
- '@esbuild/android-arm64@0.21.5':
- resolution: {integrity: sha512-c0uX9VAUBQ7dTDCjq+wdyGLowMdtR/GoC2U5IYk/7D1H1JYC0qseD7+11iMP2mRLN9RcCMRcjC4YMclCzGwS/A==}
- engines: {node: '>=12'}
- cpu: [arm64]
- os: [android]
-
- '@esbuild/android-arm@0.21.5':
- resolution: {integrity: sha512-vCPvzSjpPHEi1siZdlvAlsPxXl7WbOVUBBAowWug4rJHb68Ox8KualB+1ocNvT5fjv6wpkX6o/iEpbDrf68zcg==}
- engines: {node: '>=12'}
- cpu: [arm]
- os: [android]
-
- '@esbuild/android-x64@0.21.5':
- resolution: {integrity: sha512-D7aPRUUNHRBwHxzxRvp856rjUHRFW1SdQATKXH2hqA0kAZb1hKmi02OpYRacl0TxIGz/ZmXWlbZgjwWYaCakTA==}
- engines: {node: '>=12'}
- cpu: [x64]
- os: [android]
-
- '@esbuild/darwin-arm64@0.21.5':
- resolution: {integrity: sha512-DwqXqZyuk5AiWWf3UfLiRDJ5EDd49zg6O9wclZ7kUMv2WRFr4HKjXp/5t8JZ11QbQfUS6/cRCKGwYhtNAY88kQ==}
- engines: {node: '>=12'}
- cpu: [arm64]
- os: [darwin]
-
- '@esbuild/darwin-x64@0.21.5':
- resolution: {integrity: sha512-se/JjF8NlmKVG4kNIuyWMV/22ZaerB+qaSi5MdrXtd6R08kvs2qCN4C09miupktDitvh8jRFflwGFBQcxZRjbw==}
- engines: {node: '>=12'}
- cpu: [x64]
- os: [darwin]
-
- '@esbuild/freebsd-arm64@0.21.5':
- resolution: {integrity: sha512-5JcRxxRDUJLX8JXp/wcBCy3pENnCgBR9bN6JsY4OmhfUtIHe3ZW0mawA7+RDAcMLrMIZaf03NlQiX9DGyB8h4g==}
- engines: {node: '>=12'}
- cpu: [arm64]
- os: [freebsd]
-
- '@esbuild/freebsd-x64@0.21.5':
- resolution: {integrity: sha512-J95kNBj1zkbMXtHVH29bBriQygMXqoVQOQYA+ISs0/2l3T9/kj42ow2mpqerRBxDJnmkUDCaQT/dfNXWX/ZZCQ==}
- engines: {node: '>=12'}
- cpu: [x64]
- os: [freebsd]
-
- '@esbuild/linux-arm64@0.21.5':
- resolution: {integrity: sha512-ibKvmyYzKsBeX8d8I7MH/TMfWDXBF3db4qM6sy+7re0YXya+K1cem3on9XgdT2EQGMu4hQyZhan7TeQ8XkGp4Q==}
- engines: {node: '>=12'}
- cpu: [arm64]
- os: [linux]
-
- '@esbuild/linux-arm@0.21.5':
- resolution: {integrity: sha512-bPb5AHZtbeNGjCKVZ9UGqGwo8EUu4cLq68E95A53KlxAPRmUyYv2D6F0uUI65XisGOL1hBP5mTronbgo+0bFcA==}
- engines: {node: '>=12'}
- cpu: [arm]
- os: [linux]
-
- '@esbuild/linux-ia32@0.21.5':
- resolution: {integrity: sha512-YvjXDqLRqPDl2dvRODYmmhz4rPeVKYvppfGYKSNGdyZkA01046pLWyRKKI3ax8fbJoK5QbxblURkwK/MWY18Tg==}
- engines: {node: '>=12'}
- cpu: [ia32]
- os: [linux]
-
- '@esbuild/linux-loong64@0.21.5':
- resolution: {integrity: sha512-uHf1BmMG8qEvzdrzAqg2SIG/02+4/DHB6a9Kbya0XDvwDEKCoC8ZRWI5JJvNdUjtciBGFQ5PuBlpEOXQj+JQSg==}
- engines: {node: '>=12'}
- cpu: [loong64]
- os: [linux]
-
- '@esbuild/linux-mips64el@0.21.5':
- resolution: {integrity: sha512-IajOmO+KJK23bj52dFSNCMsz1QP1DqM6cwLUv3W1QwyxkyIWecfafnI555fvSGqEKwjMXVLokcV5ygHW5b3Jbg==}
- engines: {node: '>=12'}
- cpu: [mips64el]
- os: [linux]
-
- '@esbuild/linux-ppc64@0.21.5':
- resolution: {integrity: sha512-1hHV/Z4OEfMwpLO8rp7CvlhBDnjsC3CttJXIhBi+5Aj5r+MBvy4egg7wCbe//hSsT+RvDAG7s81tAvpL2XAE4w==}
- engines: {node: '>=12'}
- cpu: [ppc64]
- os: [linux]
-
- '@esbuild/linux-riscv64@0.21.5':
- resolution: {integrity: sha512-2HdXDMd9GMgTGrPWnJzP2ALSokE/0O5HhTUvWIbD3YdjME8JwvSCnNGBnTThKGEB91OZhzrJ4qIIxk/SBmyDDA==}
- engines: {node: '>=12'}
- cpu: [riscv64]
- os: [linux]
-
- '@esbuild/linux-s390x@0.21.5':
- resolution: {integrity: sha512-zus5sxzqBJD3eXxwvjN1yQkRepANgxE9lgOW2qLnmr8ikMTphkjgXu1HR01K4FJg8h1kEEDAqDcZQtbrRnB41A==}
- engines: {node: '>=12'}
- cpu: [s390x]
- os: [linux]
-
- '@esbuild/linux-x64@0.21.5':
- resolution: {integrity: sha512-1rYdTpyv03iycF1+BhzrzQJCdOuAOtaqHTWJZCWvijKD2N5Xu0TtVC8/+1faWqcP9iBCWOmjmhoH94dH82BxPQ==}
- engines: {node: '>=12'}
- cpu: [x64]
- os: [linux]
-
- '@esbuild/netbsd-x64@0.21.5':
- resolution: {integrity: sha512-Woi2MXzXjMULccIwMnLciyZH4nCIMpWQAs049KEeMvOcNADVxo0UBIQPfSmxB3CWKedngg7sWZdLvLczpe0tLg==}
- engines: {node: '>=12'}
- cpu: [x64]
- os: [netbsd]
-
- '@esbuild/openbsd-x64@0.21.5':
- resolution: {integrity: sha512-HLNNw99xsvx12lFBUwoT8EVCsSvRNDVxNpjZ7bPn947b8gJPzeHWyNVhFsaerc0n3TsbOINvRP2byTZ5LKezow==}
- engines: {node: '>=12'}
- cpu: [x64]
- os: [openbsd]
-
- '@esbuild/sunos-x64@0.21.5':
- resolution: {integrity: sha512-6+gjmFpfy0BHU5Tpptkuh8+uw3mnrvgs+dSPQXQOv3ekbordwnzTVEb4qnIvQcYXq6gzkyTnoZ9dZG+D4garKg==}
- engines: {node: '>=12'}
- cpu: [x64]
- os: [sunos]
-
- '@esbuild/win32-arm64@0.21.5':
- resolution: {integrity: sha512-Z0gOTd75VvXqyq7nsl93zwahcTROgqvuAcYDUr+vOv8uHhNSKROyU961kgtCD1e95IqPKSQKH7tBTslnS3tA8A==}
- engines: {node: '>=12'}
- cpu: [arm64]
- os: [win32]
-
- '@esbuild/win32-ia32@0.21.5':
- resolution: {integrity: sha512-SWXFF1CL2RVNMaVs+BBClwtfZSvDgtL//G/smwAc5oVK/UPu2Gu9tIaRgFmYFFKrmg3SyAjSrElf0TiJ1v8fYA==}
- engines: {node: '>=12'}
- cpu: [ia32]
- os: [win32]
-
- '@esbuild/win32-x64@0.21.5':
- resolution: {integrity: sha512-tQd/1efJuzPC6rCFwEvLtci/xNFcTZknmXs98FYDfGE4wP9ClFV98nyKrzJKVPMhdDnjzLhdUyMX4PsQAPjwIw==}
- engines: {node: '>=12'}
- cpu: [x64]
- os: [win32]
-
- '@floating-ui/core@1.7.3':
- resolution: {integrity: sha512-sGnvb5dmrJaKEZ+LDIpguvdX3bDlEllmv4/ClQ9awcmCZrlx5jQyyMWFM5kBI+EyNOCDDiKk8il0zeuX3Zlg/w==}
-
- '@floating-ui/dom@1.7.4':
- resolution: {integrity: sha512-OOchDgh4F2CchOX94cRVqhvy7b3AFb+/rQXyswmzmGakRfkMgoWVjfnLWkRirfLEfuD4ysVW16eXzwt3jHIzKA==}
+ react: '>=16.8.0'
+ react-dom: '>=16.8.0'
'@floating-ui/utils@0.2.10':
resolution: {integrity: sha512-aGTxbpbg8/b5JfU1HXSrbH3wXZuLPJcNEcZQFMxLs3oSzgtVu6nFPkbbGGUvBcUjKV2YyB9Wxxabo+HEH9tcRQ==}
- '@floating-ui/vue@1.1.9':
- resolution: {integrity: sha512-BfNqNW6KA83Nexspgb9DZuz578R7HT8MZw1CfK9I6Ah4QReNWEJsXWHN+SdmOVLNGmTPDi+fDT535Df5PzMLbQ==}
+ '@img/sharp-darwin-arm64@0.33.5':
+ resolution: {integrity: sha512-UT4p+iz/2H4twwAoLCqfA9UH5pI6DggwKEGuaPy7nCVQ8ZsiY5PIcrRvD1DzuY3qYL07NtIQcWnBSY/heikIFQ==}
+ engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0}
+ cpu: [arm64]
+ os: [darwin]
- '@iconify-json/simple-icons@1.2.57':
- resolution: {integrity: sha512-/yWbO502M6WfvmcV5OjEgA4uoPN/76nrn7Hri/8g9L4GiNQ6VMgXWE9vFp4tDsmGMAe4ZCov3NbH6vJCgXZ1hA==}
+ '@img/sharp-darwin-x64@0.33.5':
+ resolution: {integrity: sha512-fyHac4jIc1ANYGRDxtiqelIbdWkIuQaI84Mv45KvGRRxSAa7o7d1ZKAOBaYbnepLC1WqxfpimdeWfvqqSGwR2Q==}
+ engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0}
+ cpu: [x64]
+ os: [darwin]
- '@iconify/types@2.0.0':
- resolution: {integrity: sha512-+wluvCrRhXrhyOmRDJ3q8mux9JkKy5SJ/v8ol2tu4FVjyYvtEzkc/3pK15ET6RKg4b4w4BmTk1+gsCUhf21Ykg==}
+ '@img/sharp-libvips-darwin-arm64@1.0.4':
+ resolution: {integrity: sha512-XblONe153h0O2zuFfTAbQYAX2JhYmDHeWikp1LM9Hul9gVPjFY427k6dFEcOL72O01QxQsWi761svJ/ev9xEDg==}
+ cpu: [arm64]
+ os: [darwin]
- '@iconify/utils@3.0.2':
- resolution: {integrity: sha512-EfJS0rLfVuRuJRn4psJHtK2A9TqVnkxPpHY6lYHiB9+8eSuudsxbwMiavocG45ujOo6FJ+CIRlRnlOGinzkaGQ==}
+ '@img/sharp-libvips-darwin-x64@1.0.4':
+ resolution: {integrity: sha512-xnGR8YuZYfJGmWPvmlunFaWJsb9T/AO2ykoP3Fz/0X5XV2aoYBPkX6xqCQvUTKKiLddarLaxpzNe+b1hjeWHAQ==}
+ cpu: [x64]
+ os: [darwin]
- '@internationalized/date@3.10.0':
- resolution: {integrity: sha512-oxDR/NTEJ1k+UFVQElaNIk65E/Z83HK1z1WI3lQyhTtnNg4R5oVXaPzK3jcpKG8UHKDVuDQHzn+wsxSz8RP3aw==}
+ '@img/sharp-libvips-linux-arm64@1.0.4':
+ resolution: {integrity: sha512-9B+taZ8DlyyqzZQnoeIvDVR/2F4EbMepXMc/NdVbkzsJbzkUjhXv/70GQJ7tdLA4YJgNP25zukcxpX2/SueNrA==}
+ cpu: [arm64]
+ os: [linux]
- '@internationalized/number@3.6.5':
- resolution: {integrity: sha512-6hY4Kl4HPBvtfS62asS/R22JzNNy8vi/Ssev7x6EobfCp+9QIB2hKvI2EtbdJ0VSQacxVNtqhE/NmF/NZ0gm6g==}
+ '@img/sharp-libvips-linux-arm@1.0.5':
+ resolution: {integrity: sha512-gvcC4ACAOPRNATg/ov8/MnbxFDJqf/pDePbBnuBDcjsI8PssmjoKMAz4LtLaVi+OnSb5FK/yIOamqDwGmXW32g==}
+ cpu: [arm]
+ os: [linux]
+
+ '@img/sharp-libvips-linux-s390x@1.0.4':
+ resolution: {integrity: sha512-u7Wz6ntiSSgGSGcjZ55im6uvTrOxSIS8/dgoVMoiGE9I6JAfU50yH5BoDlYA1tcuGS7g/QNtetJnxA6QEsCVTA==}
+ cpu: [s390x]
+ os: [linux]
+
+ '@img/sharp-libvips-linux-x64@1.0.4':
+ resolution: {integrity: sha512-MmWmQ3iPFZr0Iev+BAgVMb3ZyC4KeFc3jFxnNbEPas60e1cIfevbtuyf9nDGIzOaW9PdnDciJm+wFFaTlj5xYw==}
+ cpu: [x64]
+ os: [linux]
+
+ '@img/sharp-libvips-linuxmusl-arm64@1.0.4':
+ resolution: {integrity: sha512-9Ti+BbTYDcsbp4wfYib8Ctm1ilkugkA/uscUn6UXK1ldpC1JjiXbLfFZtRlBhjPZ5o1NCLiDbg8fhUPKStHoTA==}
+ cpu: [arm64]
+ os: [linux]
+
+ '@img/sharp-libvips-linuxmusl-x64@1.0.4':
+ resolution: {integrity: sha512-viYN1KX9m+/hGkJtvYYp+CCLgnJXwiQB39damAO7WMdKWlIhmYTfHjwSbQeUK/20vY154mwezd9HflVFM1wVSw==}
+ cpu: [x64]
+ os: [linux]
+
+ '@img/sharp-linux-arm64@0.33.5':
+ resolution: {integrity: sha512-JMVv+AMRyGOHtO1RFBiJy/MBsgz0x4AWrT6QoEVVTyh1E39TrCUpTRI7mx9VksGX4awWASxqCYLCV4wBZHAYxA==}
+ engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0}
+ cpu: [arm64]
+ os: [linux]
+
+ '@img/sharp-linux-arm@0.33.5':
+ resolution: {integrity: sha512-JTS1eldqZbJxjvKaAkxhZmBqPRGmxgu+qFKSInv8moZ2AmT5Yib3EQ1c6gp493HvrvV8QgdOXdyaIBrhvFhBMQ==}
+ engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0}
+ cpu: [arm]
+ os: [linux]
+
+ '@img/sharp-linux-s390x@0.33.5':
+ resolution: {integrity: sha512-y/5PCd+mP4CA/sPDKl2961b+C9d+vPAveS33s6Z3zfASk2j5upL6fXVPZi7ztePZ5CuH+1kW8JtvxgbuXHRa4Q==}
+ engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0}
+ cpu: [s390x]
+ os: [linux]
+
+ '@img/sharp-linux-x64@0.33.5':
+ resolution: {integrity: sha512-opC+Ok5pRNAzuvq1AG0ar+1owsu842/Ab+4qvU879ippJBHvyY5n2mxF1izXqkPYlGuP/M556uh53jRLJmzTWA==}
+ engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0}
+ cpu: [x64]
+ os: [linux]
+
+ '@img/sharp-linuxmusl-arm64@0.33.5':
+ resolution: {integrity: sha512-XrHMZwGQGvJg2V/oRSUfSAfjfPxO+4DkiRh6p2AFjLQztWUuY/o8Mq0eMQVIY7HJ1CDQUJlxGGZRw1a5bqmd1g==}
+ engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0}
+ cpu: [arm64]
+ os: [linux]
+
+ '@img/sharp-linuxmusl-x64@0.33.5':
+ resolution: {integrity: sha512-WT+d/cgqKkkKySYmqoZ8y3pxx7lx9vVejxW/W4DOFMYVSkErR+w7mf2u8m/y4+xHe7yY9DAXQMWQhpnMuFfScw==}
+ engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0}
+ cpu: [x64]
+ os: [linux]
+
+ '@img/sharp-wasm32@0.33.5':
+ resolution: {integrity: sha512-ykUW4LVGaMcU9lu9thv85CbRMAwfeadCJHRsg2GmeRa/cJxsVY9Rbd57JcMxBkKHag5U/x7TSBpScF4U8ElVzg==}
+ engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0}
+ cpu: [wasm32]
+
+ '@img/sharp-win32-ia32@0.33.5':
+ resolution: {integrity: sha512-T36PblLaTwuVJ/zw/LaH0PdZkRz5rd3SmMHX8GSmR7vtNSP5Z6bQkExdSK7xGWyxLw4sUknBuugTelgw2faBbQ==}
+ engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0}
+ cpu: [ia32]
+ os: [win32]
+
+ '@img/sharp-win32-x64@0.33.5':
+ resolution: {integrity: sha512-MpY/o8/8kj+EcnxwvrP4aTJSWw/aZ7JIGR4aBeZkZw5B7/Jn+tY9/VNwtcoGmdT7GfggGIU4kygOMSbYnOrAbg==}
+ engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0}
+ cpu: [x64]
+ os: [win32]
+
+ '@inquirer/ansi@1.0.2':
+ resolution: {integrity: sha512-S8qNSZiYzFd0wAcyG5AXCvUHC5Sr7xpZ9wZ2py9XR88jUz8wooStVx5M6dRzczbBWjic9NP7+rY0Xi7qqK/aMQ==}
+ engines: {node: '>=18'}
+
+ '@inquirer/checkbox@4.3.2':
+ resolution: {integrity: sha512-VXukHf0RR1doGe6Sm4F0Em7SWYLTHSsbGfJdS9Ja2bX5/D5uwVOEjr07cncLROdBvmnvCATYEWlHqYmXv2IlQA==}
+ engines: {node: '>=18'}
+ peerDependencies:
+ '@types/node': '>=18'
+ peerDependenciesMeta:
+ '@types/node':
+ optional: true
+
+ '@inquirer/confirm@5.1.21':
+ resolution: {integrity: sha512-KR8edRkIsUayMXV+o3Gv+q4jlhENF9nMYUZs9PA2HzrXeHI8M5uDag70U7RJn9yyiMZSbtF5/UexBtAVtZGSbQ==}
+ engines: {node: '>=18'}
+ peerDependencies:
+ '@types/node': '>=18'
+ peerDependenciesMeta:
+ '@types/node':
+ optional: true
+
+ '@inquirer/core@10.3.2':
+ resolution: {integrity: sha512-43RTuEbfP8MbKzedNqBrlhhNKVwoK//vUFNW3Q3vZ88BLcrs4kYpGg+B2mm5p2K/HfygoCxuKwJJiv8PbGmE0A==}
+ engines: {node: '>=18'}
+ peerDependencies:
+ '@types/node': '>=18'
+ peerDependenciesMeta:
+ '@types/node':
+ optional: true
+
+ '@inquirer/editor@4.2.23':
+ resolution: {integrity: sha512-aLSROkEwirotxZ1pBaP8tugXRFCxW94gwrQLxXfrZsKkfjOYC1aRvAZuhpJOb5cu4IBTJdsCigUlf2iCOu4ZDQ==}
+ engines: {node: '>=18'}
+ peerDependencies:
+ '@types/node': '>=18'
+ peerDependenciesMeta:
+ '@types/node':
+ optional: true
+
+ '@inquirer/expand@4.0.23':
+ resolution: {integrity: sha512-nRzdOyFYnpeYTTR2qFwEVmIWypzdAx/sIkCMeTNTcflFOovfqUk+HcFhQQVBftAh9gmGrpFj6QcGEqrDMDOiew==}
+ engines: {node: '>=18'}
+ peerDependencies:
+ '@types/node': '>=18'
+ peerDependenciesMeta:
+ '@types/node':
+ optional: true
+
+ '@inquirer/external-editor@1.0.3':
+ resolution: {integrity: sha512-RWbSrDiYmO4LbejWY7ttpxczuwQyZLBUyygsA9Nsv95hpzUWwnNTVQmAq3xuh7vNwCp07UTmE5i11XAEExx4RA==}
+ engines: {node: '>=18'}
+ peerDependencies:
+ '@types/node': '>=18'
+ peerDependenciesMeta:
+ '@types/node':
+ optional: true
+
+ '@inquirer/figures@1.0.15':
+ resolution: {integrity: sha512-t2IEY+unGHOzAaVM5Xx6DEWKeXlDDcNPeDyUpsRc6CUhBfU3VQOEl+Vssh7VNp1dR8MdUJBWhuObjXCsVpjN5g==}
+ engines: {node: '>=18'}
+
+ '@inquirer/input@4.3.1':
+ resolution: {integrity: sha512-kN0pAM4yPrLjJ1XJBjDxyfDduXOuQHrBB8aLDMueuwUGn+vNpF7Gq7TvyVxx8u4SHlFFj4trmj+a2cbpG4Jn1g==}
+ engines: {node: '>=18'}
+ peerDependencies:
+ '@types/node': '>=18'
+ peerDependenciesMeta:
+ '@types/node':
+ optional: true
+
+ '@inquirer/number@3.0.23':
+ resolution: {integrity: sha512-5Smv0OK7K0KUzUfYUXDXQc9jrf8OHo4ktlEayFlelCjwMXz0299Y8OrI+lj7i4gCBY15UObk76q0QtxjzFcFcg==}
+ engines: {node: '>=18'}
+ peerDependencies:
+ '@types/node': '>=18'
+ peerDependenciesMeta:
+ '@types/node':
+ optional: true
+
+ '@inquirer/password@4.0.23':
+ resolution: {integrity: sha512-zREJHjhT5vJBMZX/IUbyI9zVtVfOLiTO66MrF/3GFZYZ7T4YILW5MSkEYHceSii/KtRk+4i3RE7E1CUXA2jHcA==}
+ engines: {node: '>=18'}
+ peerDependencies:
+ '@types/node': '>=18'
+ peerDependenciesMeta:
+ '@types/node':
+ optional: true
+
+ '@inquirer/prompts@7.9.0':
+ resolution: {integrity: sha512-X7/+dG9SLpSzRkwgG5/xiIzW0oMrV3C0HOa7YHG1WnrLK+vCQHfte4k/T80059YBdei29RBC3s+pSMvPJDU9/A==}
+ engines: {node: '>=18'}
+ peerDependencies:
+ '@types/node': '>=18'
+ peerDependenciesMeta:
+ '@types/node':
+ optional: true
+
+ '@inquirer/rawlist@4.1.11':
+ resolution: {integrity: sha512-+LLQB8XGr3I5LZN/GuAHo+GpDJegQwuPARLChlMICNdwW7OwV2izlCSCxN6cqpL0sMXmbKbFcItJgdQq5EBXTw==}
+ engines: {node: '>=18'}
+ peerDependencies:
+ '@types/node': '>=18'
+ peerDependenciesMeta:
+ '@types/node':
+ optional: true
+
+ '@inquirer/search@3.2.2':
+ resolution: {integrity: sha512-p2bvRfENXCZdWF/U2BXvnSI9h+tuA8iNqtUKb9UWbmLYCRQxd8WkvwWvYn+3NgYaNwdUkHytJMGG4MMLucI1kA==}
+ engines: {node: '>=18'}
+ peerDependencies:
+ '@types/node': '>=18'
+ peerDependenciesMeta:
+ '@types/node':
+ optional: true
+
+ '@inquirer/select@4.4.2':
+ resolution: {integrity: sha512-l4xMuJo55MAe+N7Qr4rX90vypFwCajSakx59qe/tMaC1aEHWLyw68wF4o0A4SLAY4E0nd+Vt+EyskeDIqu1M6w==}
+ engines: {node: '>=18'}
+ peerDependencies:
+ '@types/node': '>=18'
+ peerDependenciesMeta:
+ '@types/node':
+ optional: true
+
+ '@inquirer/type@3.0.10':
+ resolution: {integrity: sha512-BvziSRxfz5Ov8ch0z/n3oijRSEcEsHnhggm4xFZe93DHcUCTlutlq9Ox4SVENAfcRD22UQq7T/atg9Wr3k09eA==}
+ engines: {node: '>=18'}
+ peerDependencies:
+ '@types/node': '>=18'
+ peerDependenciesMeta:
+ '@types/node':
+ optional: true
+
+ '@jridgewell/gen-mapping@0.3.13':
+ resolution: {integrity: sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==}
+
+ '@jridgewell/resolve-uri@3.1.2':
+ resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==}
+ engines: {node: '>=6.0.0'}
'@jridgewell/sourcemap-codec@1.5.5':
resolution: {integrity: sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==}
- '@mermaid-js/parser@0.6.3':
- resolution: {integrity: sha512-lnjOhe7zyHjc+If7yT4zoedx2vo4sHaTmtkl1+or8BRTnCtDmcTpAjpzDSfCZrshM5bCoz0GyidzadJAH1xobA==}
+ '@jridgewell/trace-mapping@0.3.31':
+ resolution: {integrity: sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==}
- '@rollup/rollup-android-arm-eabi@4.52.5':
- resolution: {integrity: sha512-8c1vW4ocv3UOMp9K+gToY5zL2XiiVw3k7f1ksf4yO1FlDFQ1C2u72iACFnSOceJFsWskc2WZNqeRhFRPzv+wtQ==}
- cpu: [arm]
- os: [android]
+ '@jsep-plugin/assignment@1.3.0':
+ resolution: {integrity: sha512-VVgV+CXrhbMI3aSusQyclHkenWSAm95WaiKrMxRFam3JSUiIaQjoMIw2sEs/OX4XifnqeQUN4DYbJjlA8EfktQ==}
+ engines: {node: '>= 10.16.0'}
+ peerDependencies:
+ jsep: ^0.4.0||^1.0.0
- '@rollup/rollup-android-arm64@4.52.5':
- resolution: {integrity: sha512-mQGfsIEFcu21mvqkEKKu2dYmtuSZOBMmAl5CFlPGLY94Vlcm+zWApK7F/eocsNzp8tKmbeBP8yXyAbx0XHsFNA==}
- cpu: [arm64]
- os: [android]
+ '@jsep-plugin/regex@1.0.4':
+ resolution: {integrity: sha512-q7qL4Mgjs1vByCaTnDFcBnV9HS7GVPJX5vyVoCgZHNSC9rjwIlmbXG5sUuorR5ndfHAIlJ8pVStxvjXHbNvtUg==}
+ engines: {node: '>= 10.16.0'}
+ peerDependencies:
+ jsep: ^0.4.0||^1.0.0
- '@rollup/rollup-darwin-arm64@4.52.5':
- resolution: {integrity: sha512-takF3CR71mCAGA+v794QUZ0b6ZSrgJkArC+gUiG6LB6TQty9T0Mqh3m2ImRBOxS2IeYBo4lKWIieSvnEk2OQWA==}
- cpu: [arm64]
- os: [darwin]
+ '@jsep-plugin/ternary@1.1.4':
+ resolution: {integrity: sha512-ck5wiqIbqdMX6WRQztBL7ASDty9YLgJ3sSAK5ZpBzXeySvFGCzIvM6UiAI4hTZ22fEcYQVV/zhUbNscggW+Ukg==}
+ engines: {node: '>= 10.16.0'}
+ peerDependencies:
+ jsep: ^0.4.0||^1.0.0
- '@rollup/rollup-darwin-x64@4.52.5':
- resolution: {integrity: sha512-W901Pla8Ya95WpxDn//VF9K9u2JbocwV/v75TE0YIHNTbhqUTv9w4VuQ9MaWlNOkkEfFwkdNhXgcLqPSmHy0fA==}
- cpu: [x64]
- os: [darwin]
+ '@leichtgewicht/ip-codec@2.0.5':
+ resolution: {integrity: sha512-Vo+PSpZG2/fmgmiNzYK9qWRh8h/CHrwD0mo1h1DzL4yzHNSfWYujGTYsWGreD000gcgmZ7K4Ys6Tx9TxtsKdDw==}
- '@rollup/rollup-freebsd-arm64@4.52.5':
- resolution: {integrity: sha512-QofO7i7JycsYOWxe0GFqhLmF6l1TqBswJMvICnRUjqCx8b47MTo46W8AoeQwiokAx3zVryVnxtBMcGcnX12LvA==}
- cpu: [arm64]
- os: [freebsd]
+ '@mdx-js/mdx@3.1.1':
+ resolution: {integrity: sha512-f6ZO2ifpwAQIpzGWaBQT2TXxPv6z3RBzQKpVftEWN78Vl/YweF1uwussDx8ECAXVtr3Rs89fKyG9YlzUs9DyGQ==}
- '@rollup/rollup-freebsd-x64@4.52.5':
- resolution: {integrity: sha512-jr21b/99ew8ujZubPo9skbrItHEIE50WdV86cdSoRkKtmWa+DDr6fu2c/xyRT0F/WazZpam6kk7IHBerSL7LDQ==}
- cpu: [x64]
- os: [freebsd]
+ '@mdx-js/react@3.1.1':
+ resolution: {integrity: sha512-f++rKLQgUVYDAtECQ6fn/is15GkEH9+nZPM3MS0RcxVqoTfawHvDlSCH7JbMhAM6uJ32v3eXLvLmLvjGu7PTQw==}
+ peerDependencies:
+ '@types/react': '>=16'
+ react: '>=16'
- '@rollup/rollup-linux-arm-gnueabihf@4.52.5':
- resolution: {integrity: sha512-PsNAbcyv9CcecAUagQefwX8fQn9LQ4nZkpDboBOttmyffnInRy8R8dSg6hxxl2Re5QhHBf6FYIDhIj5v982ATQ==}
- cpu: [arm]
- os: [linux]
+ '@mintlify/cli@4.0.978':
+ resolution: {integrity: sha512-Zer7yXn+IzYbWl6r4PXeLsrkODlQkfr8t0OkkUQ7OqPCxlBI0bWtFKq6OvE/pDtQumghU+ajgaf14d2V01RziA==}
+ engines: {node: '>=18.0.0'}
+ hasBin: true
- '@rollup/rollup-linux-arm-musleabihf@4.52.5':
- resolution: {integrity: sha512-Fw4tysRutyQc/wwkmcyoqFtJhh0u31K+Q6jYjeicsGJJ7bbEq8LwPWV/w0cnzOqR2m694/Af6hpFayLJZkG2VQ==}
- cpu: [arm]
- os: [linux]
+ '@mintlify/common@1.0.661':
+ resolution: {integrity: sha512-/Hdiblzaomp+AWStQ4smhVMgesQhffzQjC9aYBnmLReNdh2Js+ccQFUaWL3TNIxwiS2esaZvsHSV/D+zyRS3hg==}
- '@rollup/rollup-linux-arm64-gnu@4.52.5':
- resolution: {integrity: sha512-a+3wVnAYdQClOTlyapKmyI6BLPAFYs0JM8HRpgYZQO02rMR09ZcV9LbQB+NL6sljzG38869YqThrRnfPMCDtZg==}
- cpu: [arm64]
- os: [linux]
+ '@mintlify/common@1.0.749':
+ resolution: {integrity: sha512-3ZN6HBwjwIys5m9z7Wi6WAaAHVJXdQNvt1sqC6/FHifX/Cr7m/jBtwaMfSyynfo5UiPDszeFeinE7nvL0B4Vyg==}
- '@rollup/rollup-linux-arm64-musl@4.52.5':
- resolution: {integrity: sha512-AvttBOMwO9Pcuuf7m9PkC1PUIKsfaAJ4AYhy944qeTJgQOqJYJ9oVl2nYgY7Rk0mkbsuOpCAYSs6wLYB2Xiw0Q==}
- cpu: [arm64]
- os: [linux]
+ '@mintlify/link-rot@3.0.913':
+ resolution: {integrity: sha512-028krnNVCKSERMrCfeauXxftRsl8USx2LAhc+0WU+gTcnR0H8VfWYVcsyXZSOAVhG7VP0Nze0+PCPe/FAlYJhA==}
+ engines: {node: '>=18.0.0'}
- '@rollup/rollup-linux-loong64-gnu@4.52.5':
- resolution: {integrity: sha512-DkDk8pmXQV2wVrF6oq5tONK6UHLz/XcEVow4JTTerdeV1uqPeHxwcg7aFsfnSm9L+OO8WJsWotKM2JJPMWrQtA==}
- cpu: [loong64]
- os: [linux]
+ '@mintlify/mdx@3.0.4':
+ resolution: {integrity: sha512-tJhdpnM5ReJLNJ2fuDRIEr0zgVd6id7/oAIfs26V46QlygiLsc8qx4Rz3LWIX51rUXW/cfakjj0EATxIciIw+g==}
+ peerDependencies:
+ '@radix-ui/react-popover': ^1.1.15
+ react: ^18.3.1
+ react-dom: ^18.3.1
- '@rollup/rollup-linux-ppc64-gnu@4.52.5':
- resolution: {integrity: sha512-W/b9ZN/U9+hPQVvlGwjzi+Wy4xdoH2I8EjaCkMvzpI7wJUs8sWJ03Rq96jRnHkSrcHTpQe8h5Tg3ZzUPGauvAw==}
- cpu: [ppc64]
- os: [linux]
+ '@mintlify/models@0.0.255':
+ resolution: {integrity: sha512-LIUkfA7l7ypHAAuOW74ZJws/NwNRqlDRD/U466jarXvvSlGhJec/6J4/I+IEcBvWDnc9anLFKmnGO04jPKgAsg==}
+ engines: {node: '>=18.0.0'}
- '@rollup/rollup-linux-riscv64-gnu@4.52.5':
- resolution: {integrity: sha512-sjQLr9BW7R/ZiXnQiWPkErNfLMkkWIoCz7YMn27HldKsADEKa5WYdobaa1hmN6slu9oWQbB6/jFpJ+P2IkVrmw==}
- cpu: [riscv64]
- os: [linux]
+ '@mintlify/models@0.0.274':
+ resolution: {integrity: sha512-/W7qlRoF8SQRkzvGNoAKPc/WZ4jNy2G3Ir3VnEbyuHG3+lKNPmIdlo/+MaqacFYw2HLiegvqk0hiluNBKSM2fQ==}
+ engines: {node: '>=18.0.0'}
- '@rollup/rollup-linux-riscv64-musl@4.52.5':
- resolution: {integrity: sha512-hq3jU/kGyjXWTvAh2awn8oHroCbrPm8JqM7RUpKjalIRWWXE01CQOf/tUNWNHjmbMHg/hmNCwc/Pz3k1T/j/Lg==}
- cpu: [riscv64]
- os: [linux]
+ '@mintlify/openapi-parser@0.0.8':
+ resolution: {integrity: sha512-9MBRq9lS4l4HITYCrqCL7T61MOb20q9IdU7HWhqYMNMM1jGO1nHjXasFy61yZ8V6gMZyyKQARGVoZ0ZrYN48Og==}
+ engines: {node: '>=18'}
- '@rollup/rollup-linux-s390x-gnu@4.52.5':
- resolution: {integrity: sha512-gn8kHOrku8D4NGHMK1Y7NA7INQTRdVOntt1OCYypZPRt6skGbddska44K8iocdpxHTMMNui5oH4elPH4QOLrFQ==}
- cpu: [s390x]
- os: [linux]
+ '@mintlify/prebuild@1.0.886':
+ resolution: {integrity: sha512-Tj6tfibYDFPql/TNg2+y6HQi4V2PynFt7b6wqaQLI7F1/yrpqUu9TfO7l5c95YiNNNgzqYCLuNtmMqFxxL9Esg==}
- '@rollup/rollup-linux-x64-gnu@4.52.5':
- resolution: {integrity: sha512-hXGLYpdhiNElzN770+H2nlx+jRog8TyynpTVzdlc6bndktjKWyZyiCsuDAlpd+j+W+WNqfcyAWz9HxxIGfZm1Q==}
- cpu: [x64]
- os: [linux]
+ '@mintlify/previewing@4.0.943':
+ resolution: {integrity: sha512-OvuAD9FlDd8SDZPjAeBUZC8eVUweeSZBbaDuVbYDEjuwRPOhVkRyQWSdds/GNT80GTyQxcCjRN4QnaMaahBWng==}
+ engines: {node: '>=18.0.0'}
- '@rollup/rollup-linux-x64-musl@4.52.5':
- resolution: {integrity: sha512-arCGIcuNKjBoKAXD+y7XomR9gY6Mw7HnFBv5Rw7wQRvwYLR7gBAgV7Mb2QTyjXfTveBNFAtPt46/36vV9STLNg==}
- cpu: [x64]
- os: [linux]
+ '@mintlify/scraping@4.0.522':
+ resolution: {integrity: sha512-PL2k52WT5S5OAgnT2K13bP7J2El6XwiVvQlrLvxDYw5KMMV+y34YVJI8ZscKb4trjitWDgyK0UTq2KN6NQgn6g==}
+ engines: {node: '>=18.0.0'}
+ hasBin: true
- '@rollup/rollup-openharmony-arm64@4.52.5':
- resolution: {integrity: sha512-QoFqB6+/9Rly/RiPjaomPLmR/13cgkIGfA40LHly9zcH1S0bN2HVFYk3a1eAyHQyjs3ZJYlXvIGtcCs5tko9Cw==}
- cpu: [arm64]
- os: [openharmony]
+ '@mintlify/scraping@4.0.611':
+ resolution: {integrity: sha512-JsUJ2ZZnRk+D6t2NrqMZ4tkhkUob4KHczMpkwp+b5lt7exz3rl8Gzt5q1XhY4ioN1KFaVQgx1ykBAFf2EtD7rw==}
+ engines: {node: '>=18.0.0'}
+ hasBin: true
- '@rollup/rollup-win32-arm64-msvc@4.52.5':
- resolution: {integrity: sha512-w0cDWVR6MlTstla1cIfOGyl8+qb93FlAVutcor14Gf5Md5ap5ySfQ7R9S/NjNaMLSFdUnKGEasmVnu3lCMqB7w==}
- cpu: [arm64]
- os: [win32]
+ '@mintlify/validation@0.1.555':
+ resolution: {integrity: sha512-11QVUReL4N5u8wSCgZt4RN7PA0jYQoMEBZ5IrUp5pgb5ZJBOoGV/vPsQrxPPa1cxsUDAuToNhtGxRQtOav/w8w==}
- '@rollup/rollup-win32-ia32-msvc@4.52.5':
- resolution: {integrity: sha512-Aufdpzp7DpOTULJCuvzqcItSGDH73pF3ko/f+ckJhxQyHtp67rHw3HMNxoIdDMUITJESNE6a8uh4Lo4SLouOUg==}
- cpu: [ia32]
- os: [win32]
+ '@mintlify/validation@0.1.605':
+ resolution: {integrity: sha512-4mMdB5Kah+NcpOsH5x1waJ+gWtiRSSJaLmBzfs5j6E2XVCn8MEbFbg+aZTR2lkesNtaEvz/nq7TQZy6GKS3X6g==}
- '@rollup/rollup-win32-x64-gnu@4.52.5':
- resolution: {integrity: sha512-UGBUGPFp1vkj6p8wCRraqNhqwX/4kNQPS57BCFc8wYh0g94iVIW33wJtQAx3G7vrjjNtRaxiMUylM0ktp/TRSQ==}
- cpu: [x64]
- os: [win32]
+ '@nodelib/fs.scandir@2.1.5':
+ resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==}
+ engines: {node: '>= 8'}
- '@rollup/rollup-win32-x64-msvc@4.52.5':
- resolution: {integrity: sha512-TAcgQh2sSkykPRWLrdyy2AiceMckNf5loITqXxFI5VuQjS5tSuw3WlwdN8qv8vzjLAUTvYaH/mVjSFpbkFbpTg==}
- cpu: [x64]
- os: [win32]
+ '@nodelib/fs.stat@2.0.5':
+ resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==}
+ engines: {node: '>= 8'}
- '@shikijs/core@2.5.0':
- resolution: {integrity: sha512-uu/8RExTKtavlpH7XqnVYBrfBkUc20ngXiX9NSrBhOVZYv/7XQRKUyhtkeflY5QsxC0GbJThCerruZfsUaSldg==}
+ '@nodelib/fs.walk@1.2.8':
+ resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==}
+ engines: {node: '>= 8'}
- '@shikijs/engine-javascript@2.5.0':
- resolution: {integrity: sha512-VjnOpnQf8WuCEZtNUdjjwGUbtAVKuZkVQ/5cHy/tojVVRIRtlWMYVjyWhxOmIq05AlSOv72z7hRNRGVBgQOl0w==}
+ '@openapi-contrib/openapi-schema-to-json-schema@3.2.0':
+ resolution: {integrity: sha512-Gj6C0JwCr8arj0sYuslWXUBSP/KnUlEGnPW4qxlXvAl543oaNQgMgIgkQUA6vs5BCCvwTEiL8m/wdWzfl4UvSw==}
- '@shikijs/engine-oniguruma@2.5.0':
- resolution: {integrity: sha512-pGd1wRATzbo/uatrCIILlAdFVKdxImWJGQ5rFiB5VZi2ve5xj3Ax9jny8QvkaV93btQEwR/rSz5ERFpC5mKNIw==}
+ '@puppeteer/browsers@2.3.0':
+ resolution: {integrity: sha512-ioXoq9gPxkss4MYhD+SFaU9p1IHFUX0ILAWFPyjGaBdjLsYAlZw6j1iLA0N/m12uVHLFDfSYNF7EQccjinIMDA==}
+ engines: {node: '>=18'}
+ hasBin: true
- '@shikijs/langs@2.5.0':
- resolution: {integrity: sha512-Qfrrt5OsNH5R+5tJ/3uYBBZv3SuGmnRPejV9IlIbFH3HTGLDlkqgHymAlzklVmKBjAaVmkPkyikAV/sQ1wSL+w==}
+ '@radix-ui/primitive@1.1.3':
+ resolution: {integrity: sha512-JTF99U/6XIjCBo0wqkU5sK10glYe27MRRsfwoiq5zzOEZLHU3A3KCMa5X/azekYRCJ0HlwI0crAXS/5dEHTzDg==}
- '@shikijs/themes@2.5.0':
- resolution: {integrity: sha512-wGrk+R8tJnO0VMzmUExHR+QdSaPUl/NKs+a4cQQRWyoc3YFbUzuLEi/KWK1hj+8BfHRKm2jNhhJck1dfstJpiw==}
+ '@radix-ui/react-arrow@1.1.7':
+ resolution: {integrity: sha512-F+M1tLhO+mlQaOWspE8Wstg+z6PwxwRd8oQ8IXceWz92kfAmalTRf0EjrouQeo7QssEPfCn05B4Ihs1K9WQ/7w==}
+ peerDependencies:
+ '@types/react': '*'
+ '@types/react-dom': '*'
+ react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
+ react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
+ peerDependenciesMeta:
+ '@types/react':
+ optional: true
+ '@types/react-dom':
+ optional: true
- '@shikijs/transformers@2.5.0':
- resolution: {integrity: sha512-SI494W5X60CaUwgi8u4q4m4s3YAFSxln3tzNjOSYqq54wlVgz0/NbbXEb3mdLbqMBztcmS7bVTaEd2w0qMmfeg==}
+ '@radix-ui/react-compose-refs@1.1.2':
+ resolution: {integrity: sha512-z4eqJvfiNnFMHIIvXP3CY57y2WJs5g2v3X0zm9mEJkrkNv4rDxu+sg9Jh8EkXyeqBkB7SOcboo9dMVqhyrACIg==}
+ peerDependencies:
+ '@types/react': '*'
+ react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
+ peerDependenciesMeta:
+ '@types/react':
+ optional: true
- '@shikijs/types@2.5.0':
- resolution: {integrity: sha512-ygl5yhxki9ZLNuNpPitBWvcy9fsSKKaRuO4BAlMyagszQidxcpLAr0qiW/q43DtSIDxO6hEbtYLiFZNXO/hdGw==}
+ '@radix-ui/react-context@1.1.2':
+ resolution: {integrity: sha512-jCi/QKUM2r1Ju5a3J64TH2A5SpKAgh0LpknyqdQ4m6DCV0xJ2HG1xARRwNGPQfi1SLdLWZ1OJz6F4OMBBNiGJA==}
+ peerDependencies:
+ '@types/react': '*'
+ react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
+ peerDependenciesMeta:
+ '@types/react':
+ optional: true
+
+ '@radix-ui/react-dismissable-layer@1.1.11':
+ resolution: {integrity: sha512-Nqcp+t5cTB8BinFkZgXiMJniQH0PsUt2k51FUhbdfeKvc4ACcG2uQniY/8+h1Yv6Kza4Q7lD7PQV0z0oicE0Mg==}
+ peerDependencies:
+ '@types/react': '*'
+ '@types/react-dom': '*'
+ react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
+ react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
+ peerDependenciesMeta:
+ '@types/react':
+ optional: true
+ '@types/react-dom':
+ optional: true
+
+ '@radix-ui/react-focus-guards@1.1.3':
+ resolution: {integrity: sha512-0rFg/Rj2Q62NCm62jZw0QX7a3sz6QCQU0LpZdNrJX8byRGaGVTqbrW9jAoIAHyMQqsNpeZ81YgSizOt5WXq0Pw==}
+ peerDependencies:
+ '@types/react': '*'
+ react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
+ peerDependenciesMeta:
+ '@types/react':
+ optional: true
+
+ '@radix-ui/react-focus-scope@1.1.7':
+ resolution: {integrity: sha512-t2ODlkXBQyn7jkl6TNaw/MtVEVvIGelJDCG41Okq/KwUsJBwQ4XVZsHAVUkK4mBv3ewiAS3PGuUWuY2BoK4ZUw==}
+ peerDependencies:
+ '@types/react': '*'
+ '@types/react-dom': '*'
+ react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
+ react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
+ peerDependenciesMeta:
+ '@types/react':
+ optional: true
+ '@types/react-dom':
+ optional: true
+
+ '@radix-ui/react-id@1.1.1':
+ resolution: {integrity: sha512-kGkGegYIdQsOb4XjsfM97rXsiHaBwco+hFI66oO4s9LU+PLAC5oJ7khdOVFxkhsmlbpUqDAvXw11CluXP+jkHg==}
+ peerDependencies:
+ '@types/react': '*'
+ react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
+ peerDependenciesMeta:
+ '@types/react':
+ optional: true
+
+ '@radix-ui/react-popover@1.1.15':
+ resolution: {integrity: sha512-kr0X2+6Yy/vJzLYJUPCZEc8SfQcf+1COFoAqauJm74umQhta9M7lNJHP7QQS3vkvcGLQUbWpMzwrXYwrYztHKA==}
+ peerDependencies:
+ '@types/react': '*'
+ '@types/react-dom': '*'
+ react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
+ react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
+ peerDependenciesMeta:
+ '@types/react':
+ optional: true
+ '@types/react-dom':
+ optional: true
+
+ '@radix-ui/react-popper@1.2.8':
+ resolution: {integrity: sha512-0NJQ4LFFUuWkE7Oxf0htBKS6zLkkjBH+hM1uk7Ng705ReR8m/uelduy1DBo0PyBXPKVnBA6YBlU94MBGXrSBCw==}
+ peerDependencies:
+ '@types/react': '*'
+ '@types/react-dom': '*'
+ react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
+ react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
+ peerDependenciesMeta:
+ '@types/react':
+ optional: true
+ '@types/react-dom':
+ optional: true
+
+ '@radix-ui/react-portal@1.1.9':
+ resolution: {integrity: sha512-bpIxvq03if6UNwXZ+HTK71JLh4APvnXntDc6XOX8UVq4XQOVl7lwok0AvIl+b8zgCw3fSaVTZMpAPPagXbKmHQ==}
+ peerDependencies:
+ '@types/react': '*'
+ '@types/react-dom': '*'
+ react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
+ react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
+ peerDependenciesMeta:
+ '@types/react':
+ optional: true
+ '@types/react-dom':
+ optional: true
+
+ '@radix-ui/react-presence@1.1.5':
+ resolution: {integrity: sha512-/jfEwNDdQVBCNvjkGit4h6pMOzq8bHkopq458dPt2lMjx+eBQUohZNG9A7DtO/O5ukSbxuaNGXMjHicgwy6rQQ==}
+ peerDependencies:
+ '@types/react': '*'
+ '@types/react-dom': '*'
+ react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
+ react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
+ peerDependenciesMeta:
+ '@types/react':
+ optional: true
+ '@types/react-dom':
+ optional: true
+
+ '@radix-ui/react-primitive@2.1.3':
+ resolution: {integrity: sha512-m9gTwRkhy2lvCPe6QJp4d3G1TYEUHn/FzJUtq9MjH46an1wJU+GdoGC5VLof8RX8Ft/DlpshApkhswDLZzHIcQ==}
+ peerDependencies:
+ '@types/react': '*'
+ '@types/react-dom': '*'
+ react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
+ react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
+ peerDependenciesMeta:
+ '@types/react':
+ optional: true
+ '@types/react-dom':
+ optional: true
+
+ '@radix-ui/react-slot@1.2.3':
+ resolution: {integrity: sha512-aeNmHnBxbi2St0au6VBVC7JXFlhLlOnvIIlePNniyUNAClzmtAUEY8/pBiK3iHjufOlwA+c20/8jngo7xcrg8A==}
+ peerDependencies:
+ '@types/react': '*'
+ react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
+ peerDependenciesMeta:
+ '@types/react':
+ optional: true
+
+ '@radix-ui/react-use-callback-ref@1.1.1':
+ resolution: {integrity: sha512-FkBMwD+qbGQeMu1cOHnuGB6x4yzPjho8ap5WtbEJ26umhgqVXbhekKUQO+hZEL1vU92a3wHwdp0HAcqAUF5iDg==}
+ peerDependencies:
+ '@types/react': '*'
+ react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
+ peerDependenciesMeta:
+ '@types/react':
+ optional: true
+
+ '@radix-ui/react-use-controllable-state@1.2.2':
+ resolution: {integrity: sha512-BjasUjixPFdS+NKkypcyyN5Pmg83Olst0+c6vGov0diwTEo6mgdqVR6hxcEgFuh4QrAs7Rc+9KuGJ9TVCj0Zzg==}
+ peerDependencies:
+ '@types/react': '*'
+ react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
+ peerDependenciesMeta:
+ '@types/react':
+ optional: true
+
+ '@radix-ui/react-use-effect-event@0.0.2':
+ resolution: {integrity: sha512-Qp8WbZOBe+blgpuUT+lw2xheLP8q0oatc9UpmiemEICxGvFLYmHm9QowVZGHtJlGbS6A6yJ3iViad/2cVjnOiA==}
+ peerDependencies:
+ '@types/react': '*'
+ react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
+ peerDependenciesMeta:
+ '@types/react':
+ optional: true
+
+ '@radix-ui/react-use-escape-keydown@1.1.1':
+ resolution: {integrity: sha512-Il0+boE7w/XebUHyBjroE+DbByORGR9KKmITzbR7MyQ4akpORYP/ZmbhAr0DG7RmmBqoOnZdy2QlvajJ2QA59g==}
+ peerDependencies:
+ '@types/react': '*'
+ react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
+ peerDependenciesMeta:
+ '@types/react':
+ optional: true
+
+ '@radix-ui/react-use-layout-effect@1.1.1':
+ resolution: {integrity: sha512-RbJRS4UWQFkzHTTwVymMTUv8EqYhOp8dOOviLj2ugtTiXRaRQS7GLGxZTLL1jWhMeoSCf5zmcZkqTl9IiYfXcQ==}
+ peerDependencies:
+ '@types/react': '*'
+ react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
+ peerDependenciesMeta:
+ '@types/react':
+ optional: true
+
+ '@radix-ui/react-use-rect@1.1.1':
+ resolution: {integrity: sha512-QTYuDesS0VtuHNNvMh+CjlKJ4LJickCMUAqjlE3+j8w+RlRpwyX3apEQKGFzbZGdo7XNG1tXa+bQqIE7HIXT2w==}
+ peerDependencies:
+ '@types/react': '*'
+ react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
+ peerDependenciesMeta:
+ '@types/react':
+ optional: true
+
+ '@radix-ui/react-use-size@1.1.1':
+ resolution: {integrity: sha512-ewrXRDTAqAXlkl6t/fkXWNAhFX9I+CkKlw6zjEwk86RSPKwZr3xpBRso655aqYafwtnbpHLj6toFzmd6xdVptQ==}
+ peerDependencies:
+ '@types/react': '*'
+ react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
+ peerDependenciesMeta:
+ '@types/react':
+ optional: true
+
+ '@radix-ui/rect@1.1.1':
+ resolution: {integrity: sha512-HPwpGIzkl28mWyZqG52jiqDJ12waP11Pa1lGoiyUkIEuMLBP0oeK/C89esbXrxsky5we7dfd8U58nm0SgAWpVw==}
+
+ '@shikijs/core@3.22.0':
+ resolution: {integrity: sha512-iAlTtSDDbJiRpvgL5ugKEATDtHdUVkqgHDm/gbD2ZS9c88mx7G1zSYjjOxp5Qa0eaW0MAQosFRmJSk354PRoQA==}
+
+ '@shikijs/engine-javascript@3.22.0':
+ resolution: {integrity: sha512-jdKhfgW9CRtj3Tor0L7+yPwdG3CgP7W+ZEqSsojrMzCjD1e0IxIbwUMDDpYlVBlC08TACg4puwFGkZfLS+56Tw==}
+
+ '@shikijs/engine-oniguruma@3.22.0':
+ resolution: {integrity: sha512-DyXsOG0vGtNtl7ygvabHd7Mt5EY8gCNqR9Y7Lpbbd/PbJvgWrqaKzH1JW6H6qFkuUa8aCxoiYVv8/YfFljiQxA==}
+
+ '@shikijs/langs@3.22.0':
+ resolution: {integrity: sha512-x/42TfhWmp6H00T6uwVrdTJGKgNdFbrEdhaDwSR5fd5zhQ1Q46bHq9EO61SCEWJR0HY7z2HNDMaBZp8JRmKiIA==}
+
+ '@shikijs/themes@3.22.0':
+ resolution: {integrity: sha512-o+tlOKqsr6FE4+mYJG08tfCFDS+3CG20HbldXeVoyP+cYSUxDhrFf3GPjE60U55iOkkjbpY2uC3It/eeja35/g==}
+
+ '@shikijs/transformers@3.22.0':
+ resolution: {integrity: sha512-E7eRV7mwDBjueLF6852n2oYeJYxBq3NSsDk+uyruYAXONv4U8holGmIrT+mPRJQ1J1SNOH6L8G19KRzmBawrFw==}
+
+ '@shikijs/twoslash@3.22.0':
+ resolution: {integrity: sha512-GO27UPN+kegOMQvC+4XcLt0Mttyg+n16XKjmoKjdaNZoW+sOJV7FLdv2QKauqUDws6nE3EQPD+TFHEdyyoUBDw==}
+ peerDependencies:
+ typescript: '>=5.5.0'
+
+ '@shikijs/types@3.22.0':
+ resolution: {integrity: sha512-491iAekgKDBFE67z70Ok5a8KBMsQ2IJwOWw3us/7ffQkIBCyOQfm/aNwVMBUriP02QshIfgHCBSIYAl3u2eWjg==}
'@shikijs/vscode-textmate@10.0.2':
resolution: {integrity: sha512-83yeghZ2xxin3Nj8z1NMd/NCuca+gsYXswywDy5bHvwlWL8tpTQmzGeUuHd9FC3E/SBEMvzJRwWEOz5gGes9Qg==}
- '@swc/helpers@0.5.17':
- resolution: {integrity: sha512-5IKx/Y13RsYd+sauPb2x+U/xZikHjolzfuDgTAl/Tdf3Q8rslRvC19NKDLgAJQ6wsqADk10ntlv08nPFw/gO/A==}
+ '@sindresorhus/is@5.6.0':
+ resolution: {integrity: sha512-TV7t8GKYaJWsn00tFDqBw8+Uqmr8A0fRU1tvTQhyZzGv0sJCGRQL3JGMI3ucuKo3XIZdUP+Lx7/gh2t3lewy7g==}
+ engines: {node: '>=14.16'}
- '@tanstack/virtual-core@3.13.12':
- resolution: {integrity: sha512-1YBOJfRHV4sXUmWsFSf5rQor4Ss82G8dQWLRbnk3GA4jeP8hQt1hxXh0tmflpC0dz3VgEv/1+qwPyLeWkQuPFA==}
+ '@sindresorhus/slugify@2.2.0':
+ resolution: {integrity: sha512-9Vybc/qX8Kj6pxJaapjkFbiUJPk7MAkCh/GFCxIBnnsuYCFPIXKvnLidG8xlepht3i24L5XemUmGtrJ3UWrl6w==}
+ engines: {node: '>=12'}
- '@tanstack/vue-virtual@3.13.12':
- resolution: {integrity: sha512-vhF7kEU9EXWXh+HdAwKJ2m3xaOnTTmgcdXcF2pim8g4GvI7eRrk2YRuV5nUlZnd/NbCIX4/Ja2OZu5EjJL06Ww==}
+ '@sindresorhus/transliterate@1.6.0':
+ resolution: {integrity: sha512-doH1gimEu3A46VX6aVxpHTeHrytJAG6HgdxntYnCFiIFHEM/ZGpG8KiZGBChchjQmG0XFIBL552kBTjVcMZXwQ==}
+ engines: {node: '>=12'}
+
+ '@socket.io/component-emitter@3.1.2':
+ resolution: {integrity: sha512-9BCxFwvbGg/RsZK9tjXd8s4UcwR0MWeFQ1XEKIQVVvAGJyINdrqKMcTRyLoK8Rse1GjzLV9cwjWV1olXRWEXVA==}
+
+ '@stoplight/better-ajv-errors@1.0.3':
+ resolution: {integrity: sha512-0p9uXkuB22qGdNfy3VeEhxkU5uwvp/KrBTAbrLBURv6ilxIVwanKwjMc41lQfIVgPGcOkmLbTolfFrSsueu7zA==}
+ engines: {node: ^12.20 || >= 14.13}
peerDependencies:
- vue: ^2.7.0 || ^3.0.0
+ ajv: '>=8'
- '@types/d3-array@3.2.2':
- resolution: {integrity: sha512-hOLWVbm7uRza0BYXpIIW5pxfrKe0W+D5lrFiAEYR+pb6w3N2SwSMaJbXdUfSEv+dT4MfHBLtn5js0LAWaO6otw==}
+ '@stoplight/json-ref-readers@1.2.2':
+ resolution: {integrity: sha512-nty0tHUq2f1IKuFYsLM4CXLZGHdMn+X/IwEUIpeSOXt0QjMUbL0Em57iJUDzz+2MkWG83smIigNZ3fauGjqgdQ==}
+ engines: {node: '>=8.3.0'}
- '@types/d3-axis@3.0.6':
- resolution: {integrity: sha512-pYeijfZuBd87T0hGn0FO1vQ/cgLk6E1ALJjfkC0oJ8cbwkZl3TpgS8bVBLZN+2jjGgg38epgxb2zmoGtSfvgMw==}
+ '@stoplight/json-ref-resolver@3.1.6':
+ resolution: {integrity: sha512-YNcWv3R3n3U6iQYBsFOiWSuRGE5su1tJSiX6pAPRVk7dP0L7lqCteXGzuVRQ0gMZqUl8v1P0+fAKxF6PLo9B5A==}
+ engines: {node: '>=8.3.0'}
- '@types/d3-brush@3.0.6':
- resolution: {integrity: sha512-nH60IZNNxEcrh6L1ZSMNA28rj27ut/2ZmI3r96Zd+1jrZD++zD3LsMIjWlvg4AYrHn/Pqz4CF3veCxGjtbqt7A==}
+ '@stoplight/json@3.21.0':
+ resolution: {integrity: sha512-5O0apqJ/t4sIevXCO3SBN9AHCEKKR/Zb4gaj7wYe5863jme9g02Q0n/GhM7ZCALkL+vGPTe4ZzTETP8TFtsw3g==}
+ engines: {node: '>=8.3.0'}
- '@types/d3-chord@3.0.6':
- resolution: {integrity: sha512-LFYWWd8nwfwEmTZG9PfQxd17HbNPksHBiJHaKuY1XeqscXacsS2tyoo6OdRsjf+NQYeB6XrNL3a25E3gH69lcg==}
+ '@stoplight/ordered-object-literal@1.0.5':
+ resolution: {integrity: sha512-COTiuCU5bgMUtbIFBuyyh2/yVVzlr5Om0v5utQDgBCuQUOPgU1DwoffkTfg4UBQOvByi5foF4w4T+H9CoRe5wg==}
+ engines: {node: '>=8'}
- '@types/d3-color@3.1.3':
- resolution: {integrity: sha512-iO90scth9WAbmgv7ogoq57O9YpKmFBbmoEoCHDB2xMBY0+/KVrqAaCDyCE16dUspeOvIxFFRI+0sEtqDqy2b4A==}
+ '@stoplight/path@1.3.2':
+ resolution: {integrity: sha512-lyIc6JUlUA8Ve5ELywPC8I2Sdnh1zc1zmbYgVarhXIp9YeAB0ReeqmGEOWNtlHkbP2DAA1AL65Wfn2ncjK/jtQ==}
+ engines: {node: '>=8'}
- '@types/d3-contour@3.0.6':
- resolution: {integrity: sha512-BjzLgXGnCWjUSYGfH1cpdo41/hgdWETu4YxpezoztawmqsvCeep+8QGfiY6YbDvfgHz/DkjeIkkZVJavB4a3rg==}
+ '@stoplight/spectral-core@1.21.0':
+ resolution: {integrity: sha512-oj4e/FrDLUhBRocIW+lRMKlJ/q/rDZw61HkLbTFsdMd+f/FTkli2xHNB1YC6n1mrMKjjvy7XlUuFkC7XxtgbWw==}
+ engines: {node: ^16.20 || ^18.18 || >= 20.17}
- '@types/d3-delaunay@6.0.4':
- resolution: {integrity: sha512-ZMaSKu4THYCU6sV64Lhg6qjf1orxBthaC161plr5KuPHo3CNm8DTHiLw/5Eq2b6TsNP0W0iJrUOFscY6Q450Hw==}
+ '@stoplight/spectral-formats@1.8.2':
+ resolution: {integrity: sha512-c06HB+rOKfe7tuxg0IdKDEA5XnjL2vrn/m/OVIIxtINtBzphZrOgtRn7epQ5bQF5SWp84Ue7UJWaGgDwVngMFw==}
+ engines: {node: ^16.20 || ^18.18 || >= 20.17}
- '@types/d3-dispatch@3.0.7':
- resolution: {integrity: sha512-5o9OIAdKkhN1QItV2oqaE5KMIiXAvDWBDPrD85e58Qlz1c1kI/J0NcqbEG88CoTwJrYe7ntUCVfeUl2UJKbWgA==}
+ '@stoplight/spectral-functions@1.10.1':
+ resolution: {integrity: sha512-obu8ZfoHxELOapfGsCJixKZXZcffjg+lSoNuttpmUFuDzVLT3VmH8QkPXfOGOL5Pz80BR35ClNAToDkdnYIURg==}
+ engines: {node: ^16.20 || ^18.18 || >= 20.17}
- '@types/d3-drag@3.0.7':
- resolution: {integrity: sha512-HE3jVKlzU9AaMazNufooRJ5ZpWmLIoc90A37WU2JMmeq28w1FQqCZswHZ3xR+SuxYftzHq6WU6KJHvqxKzTxxQ==}
+ '@stoplight/spectral-parsers@1.0.5':
+ resolution: {integrity: sha512-ANDTp2IHWGvsQDAY85/jQi9ZrF4mRrA5bciNHX+PUxPr4DwS6iv4h+FVWJMVwcEYdpyoIdyL+SRmHdJfQEPmwQ==}
+ engines: {node: ^16.20 || ^18.18 || >= 20.17}
- '@types/d3-dsv@3.0.7':
- resolution: {integrity: sha512-n6QBF9/+XASqcKK6waudgL0pf/S5XHPPI8APyMLLUHd8NqouBGLsU8MgtO7NINGtPBtk9Kko/W4ea0oAspwh9g==}
+ '@stoplight/spectral-ref-resolver@1.0.5':
+ resolution: {integrity: sha512-gj3TieX5a9zMW29z3mBlAtDOCgN3GEc1VgZnCVlr5irmR4Qi5LuECuFItAq4pTn5Zu+sW5bqutsCH7D4PkpyAA==}
+ engines: {node: ^16.20 || ^18.18 || >= 20.17}
- '@types/d3-ease@3.0.2':
- resolution: {integrity: sha512-NcV1JjO5oDzoK26oMzbILE6HW7uVXOHLQvHshBUW4UMdZGfiY6v5BeQwh9a9tCzv+CeefZQHJt5SRgK154RtiA==}
+ '@stoplight/spectral-runtime@1.1.4':
+ resolution: {integrity: sha512-YHbhX3dqW0do6DhiPSgSGQzr6yQLlWybhKwWx0cqxjMwxej3TqLv3BXMfIUYFKKUqIwH4Q2mV8rrMM8qD2N0rQ==}
+ engines: {node: ^16.20 || ^18.18 || >= 20.17}
- '@types/d3-fetch@3.0.7':
- resolution: {integrity: sha512-fTAfNmxSb9SOWNB9IoG5c8Hg6R+AzUHDRlsXsDZsNp6sxAEOP0tkP3gKkNSO/qmHPoBFTxNrjDprVHDQDvo5aA==}
+ '@stoplight/types@13.20.0':
+ resolution: {integrity: sha512-2FNTv05If7ib79VPDA/r9eUet76jewXFH2y2K5vuge6SXbRHtWBhcaRmu+6QpF4/WRNoJj5XYRSwLGXDxysBGA==}
+ engines: {node: ^12.20 || >=14.13}
- '@types/d3-force@3.0.10':
- resolution: {integrity: sha512-ZYeSaCF3p73RdOKcjj+swRlZfnYpK1EbaDiYICEEp5Q6sUiqFaFQ9qgoshp5CzIyyb/yD09kD9o2zEltCexlgw==}
+ '@stoplight/types@13.6.0':
+ resolution: {integrity: sha512-dzyuzvUjv3m1wmhPfq82lCVYGcXG0xUYgqnWfCq3PCVR4BKFhjdkHrnJ+jIDoMKvXb05AZP/ObQF6+NpDo29IQ==}
+ engines: {node: ^12.20 || >=14.13}
- '@types/d3-format@3.0.4':
- resolution: {integrity: sha512-fALi2aI6shfg7vM5KiR1wNJnZ7r6UuggVqtDA+xiEdPZQwy/trcQaHnwShLuLdta2rTymCNpxYTiMZX/e09F4g==}
+ '@stoplight/types@14.1.1':
+ resolution: {integrity: sha512-/kjtr+0t0tjKr+heVfviO9FrU/uGLc+QNX3fHJc19xsCNYqU7lVhaXxDmEID9BZTjG+/r9pK9xP/xU02XGg65g==}
+ engines: {node: ^12.20 || >=14.13}
- '@types/d3-geo@3.1.0':
- resolution: {integrity: sha512-856sckF0oP/diXtS4jNsiQw/UuK5fQG8l/a9VVLeSouf1/PPbBE1i1W852zVwKwYCBkFJJB7nCFTbk6UMEXBOQ==}
+ '@stoplight/yaml-ast-parser@0.0.50':
+ resolution: {integrity: sha512-Pb6M8TDO9DtSVla9yXSTAxmo9GVEouq5P40DWXdOie69bXogZTkgvopCq+yEvTMA0F6PEvdJmbtTV3ccIp11VQ==}
- '@types/d3-hierarchy@3.1.7':
- resolution: {integrity: sha512-tJFtNoYBtRtkNysX1Xq4sxtjK8YgoWUNpIiUee0/jHGRwqvzYxkq0hGVbbOGSz+JgFxxRu4K8nb3YpG3CMARtg==}
+ '@stoplight/yaml@4.3.0':
+ resolution: {integrity: sha512-JZlVFE6/dYpP9tQmV0/ADfn32L9uFarHWxfcRhReKUnljz1ZiUM5zpX+PH8h5CJs6lao3TuFqnPm9IJJCEkE2w==}
+ engines: {node: '>=10.8'}
- '@types/d3-interpolate@3.0.4':
- resolution: {integrity: sha512-mgLPETlrpVV1YRJIglr4Ez47g7Yxjl1lj7YKsiMCb27VJH9W8NVM6Bb9d8kkpG/uAQS5AmbA48q2IAolKKo1MA==}
+ '@szmarczak/http-timer@5.0.1':
+ resolution: {integrity: sha512-+PmQX0PiAYPMeVYe237LJAYvOMYW1j2rH5YROyS3b4CTVJum34HfRvKvAzozHAQG0TnHNdUfY9nCeUyRAs//cw==}
+ engines: {node: '>=14.16'}
- '@types/d3-path@3.1.1':
- resolution: {integrity: sha512-VMZBYyQvbGmWyWVea0EHs/BwLgxc+MKi1zLDCONksozI4YJMcTt8ZEuIR4Sb1MMTE8MMW49v0IwI5+b7RmfWlg==}
+ '@tootallnate/quickjs-emscripten@0.23.0':
+ resolution: {integrity: sha512-C5Mc6rdnsaJDjO3UpGW/CQTHtCKaYlScZTly4JIu97Jxo/odCiH0ITnDXSJPTOrEKk/ycSZ0AOgTmkDtkOsvIA==}
- '@types/d3-polygon@3.0.2':
- resolution: {integrity: sha512-ZuWOtMaHCkN9xoeEMr1ubW2nGWsp4nIql+OPQRstu4ypeZ+zk3YKqQT0CXVe/PYqrKpZAi+J9mTs05TKwjXSRA==}
+ '@types/acorn@4.0.6':
+ resolution: {integrity: sha512-veQTnWP+1D/xbxVrPC3zHnCZRjSrKfhbMUlEA43iMZLu7EsnTtkJklIuwrCPbOi8YkvDQAiW05VQQFvvz9oieQ==}
- '@types/d3-quadtree@3.0.6':
- resolution: {integrity: sha512-oUzyO1/Zm6rsxKRHA1vH0NEDG58HrT5icx/azi9MF1TWdtttWl0UIUsjEQBBh+SIkrpd21ZjEv7ptxWys1ncsg==}
+ '@types/cookie@0.4.1':
+ resolution: {integrity: sha512-XW/Aa8APYr6jSVVA1y/DEIZX0/GMKLEVekNG727R8cs56ahETkRAy/3DR7+fJyh7oUgGwNQaRfXCun0+KbWY7Q==}
- '@types/d3-random@3.0.3':
- resolution: {integrity: sha512-Imagg1vJ3y76Y2ea0871wpabqp613+8/r0mCLEBfdtqC7xMSfj9idOnmBYyMoULfHePJyxMAw3nWhJxzc+LFwQ==}
+ '@types/cors@2.8.19':
+ resolution: {integrity: sha512-mFNylyeyqN93lfe/9CSxOGREz8cpzAhH+E93xJ4xWQf62V8sQ/24reV2nyzUWM6H6Xji+GGHpkbLe7pVoUEskg==}
- '@types/d3-scale-chromatic@3.1.0':
- resolution: {integrity: sha512-iWMJgwkK7yTRmWqRB5plb1kadXyQ5Sj8V/zYlFGMUBbIPKQScw+Dku9cAAMgJG+z5GYDoMjWGLVOvjghDEFnKQ==}
+ '@types/debug@4.1.12':
+ resolution: {integrity: sha512-vIChWdVG3LG1SMxEvI/AK+FWJthlrqlTu7fbrlywTkkaONwk/UAGaULXRlf8vkzFBLVm0zkMdCquhL5aOjhXPQ==}
- '@types/d3-scale@4.0.9':
- resolution: {integrity: sha512-dLmtwB8zkAeO/juAMfnV+sItKjlsw2lKdZVVy6LRr0cBmegxSABiLEpGVmSJJ8O08i4+sGR6qQtb6WtuwJdvVw==}
+ '@types/es-aggregate-error@1.0.6':
+ resolution: {integrity: sha512-qJ7LIFp06h1QE1aVxbVd+zJP2wdaugYXYfd6JxsyRMrYHaxb6itXPogW2tz+ylUJ1n1b+JF1PHyYCfYHm0dvUg==}
- '@types/d3-selection@3.0.11':
- resolution: {integrity: sha512-bhAXu23DJWsrI45xafYpkQ4NtcKMwWnAC/vKrd2l+nxMFuvOT3XMYTIj2opv8vq8AO5Yh7Qac/nSeP/3zjTK0w==}
-
- '@types/d3-shape@3.1.7':
- resolution: {integrity: sha512-VLvUQ33C+3J+8p+Daf+nYSOsjB4GXp19/S/aGo60m9h1v6XaxjiT82lKVWJCfzhtuZ3yD7i/TPeC/fuKLLOSmg==}
-
- '@types/d3-time-format@4.0.3':
- resolution: {integrity: sha512-5xg9rC+wWL8kdDj153qZcsJ0FWiFt0J5RB6LYUNZjwSnesfblqrI/bJ1wBdJ8OQfncgbJG5+2F+qfqnqyzYxyg==}
-
- '@types/d3-time@3.0.4':
- resolution: {integrity: sha512-yuzZug1nkAAaBlBBikKZTgzCeA+k1uy4ZFwWANOfKw5z5LRhV0gNA7gNkKm7HoK+HRN0wX3EkxGk0fpbWhmB7g==}
-
- '@types/d3-timer@3.0.2':
- resolution: {integrity: sha512-Ps3T8E8dZDam6fUyNiMkekK3XUsaUEik+idO9/YjPtfj2qruF8tFBXS7XhtE4iIXBLxhmLjP3SXpLhVf21I9Lw==}
-
- '@types/d3-transition@3.0.9':
- resolution: {integrity: sha512-uZS5shfxzO3rGlu0cC3bjmMFKsXv+SmZZcgp0KD22ts4uGXp5EVYGzu/0YdwZeKmddhcAccYtREJKkPfXkZuCg==}
-
- '@types/d3-zoom@3.0.8':
- resolution: {integrity: sha512-iqMC4/YlFCSlO8+2Ii1GGGliCAY4XdeG748w5vQUbevlbDu0zSjH/+jojorQVBK/se0j6DUFNPBGSqD3YWYnDw==}
-
- '@types/d3@7.4.3':
- resolution: {integrity: sha512-lZXZ9ckh5R8uiFVt8ogUNf+pIrK4EsWrx2Np75WvF/eTpJ0FMHNhjXk8CKEx/+gpHbNQyJWehbFaTvqmHWB3ww==}
+ '@types/estree-jsx@1.0.5':
+ resolution: {integrity: sha512-52CcUVNFyfb1A2ALocQw/Dd1BQFNmSdkuC3BkZ6iqhdMfQz7JWOFRuJFloOzjk+6WijU56m9oKXFAXc7o3Towg==}
'@types/estree@1.0.8':
resolution: {integrity: sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==}
- '@types/geojson@7946.0.16':
- resolution: {integrity: sha512-6C8nqWur3j98U6+lXDfTUWIfgvZU+EumvpHKcYjujKH7woYyLj2sUmff0tRhrqM7BohUw7Pz3ZB1jj2gW9Fvmg==}
-
'@types/hast@3.0.4':
resolution: {integrity: sha512-WPs+bbQw5aCj+x6laNGWLH3wviHtoCv/P3+otBhbOhJgG8qtpdAMlTCxLtsTWA7LH1Oh/bFCHsBn0TPS5m30EQ==}
- '@types/linkify-it@5.0.0':
- resolution: {integrity: sha512-sVDA58zAw4eWAffKOaQH5/5j3XeayukzDk+ewSsnv3p4yJEZHCCzMDiZM8e0OUrRvmpGZ85jf4yDHkHsgBNr9Q==}
+ '@types/http-cache-semantics@4.2.0':
+ resolution: {integrity: sha512-L3LgimLHXtGkWikKnsPg0/VFx9OGZaC+eN1u4r+OB1XRqH3meBIAVC2zr1WdMH+RHmnRkqliQAOHNJ/E0j/e0Q==}
- '@types/markdown-it@14.1.2':
- resolution: {integrity: sha512-promo4eFwuiW+TfGxhi+0x3czqTYJkG8qB17ZUJiVF10Xm7NLVRSLUsfRTU/6h1e24VvRnXCx+hG7li58lkzog==}
+ '@types/json-schema@7.0.15':
+ resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==}
+
+ '@types/katex@0.16.8':
+ resolution: {integrity: sha512-trgaNyfU+Xh2Tc+ABIb44a5AYUpicB3uwirOioeOkNPPbmgRNtcWyDeeFRzjPZENO9Vq8gvVqfhaaXWLlevVwg==}
'@types/mdast@4.0.4':
resolution: {integrity: sha512-kGaNbPh1k7AFzgpud/gMdvIm5xuECykRR+JnWKQno9TAXVa6WIVCGTPvYGekIDL4uwCZQSYbUxNBSb1aUo79oA==}
- '@types/mdurl@2.0.0':
- resolution: {integrity: sha512-RGdgjQUZba5p6QEFAVx2OGb8rQDL/cPRG7GiedRzMcJ1tYnUANBncjbSB1NRGwbvjcPeikRABz2nshyPk1bhWg==}
+ '@types/mdx@2.0.13':
+ resolution: {integrity: sha512-+OWZQfAYyio6YkJb3HLxDrvnx6SWWDbC0zVPfBRzUk0/nqoDyf6dNxQi3eArPe8rJ473nobTMQ/8Zk+LxJ+Yuw==}
- '@types/trusted-types@2.0.7':
- resolution: {integrity: sha512-ScaPdn1dQczgbl0QFTeTOmVHFULt394XJgOQNoyVhZ6r2vLnMLJfBPd53SB52T/3G36VI1/g2MZaX0cwDuXsfw==}
+ '@types/ms@2.1.0':
+ resolution: {integrity: sha512-GsCCIZDE/p3i96vtEqx+7dBUGXrc7zeSK3wwPHIaRThS+9OhWIXRqzs4d6k1SVU8g91DrNRWxWUGhp5KXQb2VA==}
+
+ '@types/nlcst@2.0.3':
+ resolution: {integrity: sha512-vSYNSDe6Ix3q+6Z7ri9lyWqgGhJTmzRjZRqyq15N0Z/1/UnVsno9G/N40NBijoYx2seFDIl0+B2mgAb9mezUCA==}
+
+ '@types/node@25.3.0':
+ resolution: {integrity: sha512-4K3bqJpXpqfg2XKGK9bpDTc6xO/xoUP/RBWS7AtRMug6zZFaRekiLzjVtAoZMquxoAbzBvy5nxQ7veS5eYzf8A==}
+
+ '@types/react@19.2.14':
+ resolution: {integrity: sha512-ilcTH/UniCkMdtexkoCN0bI7pMcJDvmQFPvuPvmEaYA/NSfFTAgdUSLAoVjaRJm7+6PvcM+q1zYOwS4wTYMF9w==}
+
+ '@types/unist@2.0.11':
+ resolution: {integrity: sha512-CmBKiL6NNo/OqgmMn95Fk9Whlp2mtvIv+KNpQKN2F4SjvrEesubTRWGYSg+BnWZOnlCaSTU1sMpsBOzgbYhnsA==}
'@types/unist@3.0.3':
resolution: {integrity: sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q==}
- '@types/web-bluetooth@0.0.21':
- resolution: {integrity: sha512-oIQLCGWtcFZy2JW77j9k8nHzAOpqMHLQejDA48XXMWH6tjCQHz5RCFz1bzsmROyL6PUm+LLnUiI4BCn221inxA==}
+ '@types/urijs@1.19.26':
+ resolution: {integrity: sha512-wkXrVzX5yoqLnndOwFsieJA7oKM8cNkOKJtf/3vVGSUFkWDKZvFHpIl9Pvqb/T9UsawBBFMTTD8xu7sK5MWuvg==}
+
+ '@types/yauzl@2.10.3':
+ resolution: {integrity: sha512-oJoftv0LSuaDZE3Le4DbKX+KS9G36NzOeSap90UIK0yMA/NhKJhqlSGtNDORNRaIbQfzjXDrQa0ytJ6mNRGz/Q==}
+
+ '@typescript/vfs@1.6.4':
+ resolution: {integrity: sha512-PJFXFS4ZJKiJ9Qiuix6Dz/OwEIqHD7Dme1UwZhTK11vR+5dqW2ACbdndWQexBzCx+CPuMe5WBYQWCsFyGlQLlQ==}
+ peerDependencies:
+ typescript: '*'
'@ungap/structured-clone@1.3.0':
resolution: {integrity: sha512-WmoN8qaIAo7WTYWbAZuG8PYEhn5fkz7dZrqTBZ7dtt//lL2Gwms1IcnQ5yHqjDfX8Ft5j4YzDM23f87zBfDe9g==}
- '@vitejs/plugin-vue@5.2.4':
- resolution: {integrity: sha512-7Yx/SXSOcQq5HiiV3orevHUFn+pmMB4cgbEkDYgnkUWb0WfeQ/wa2yFv6D5ICiCQOVpjA7vYDXrC7AGO8yjDHA==}
- engines: {node: ^18.0.0 || >=20.0.0}
+ abort-controller@3.0.0:
+ resolution: {integrity: sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==}
+ engines: {node: '>=6.5'}
+
+ accepts@1.3.8:
+ resolution: {integrity: sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==}
+ engines: {node: '>= 0.6'}
+
+ acorn-jsx@5.3.2:
+ resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==}
peerDependencies:
- vite: ^5.0.0 || ^6.0.0
- vue: ^3.2.25
+ acorn: ^6.0.0 || ^7.0.0 || ^8.0.0
- '@vue/compiler-core@3.5.22':
- resolution: {integrity: sha512-jQ0pFPmZwTEiRNSb+i9Ow/I/cHv2tXYqsnHKKyCQ08irI2kdF5qmYedmF8si8mA7zepUFmJ2hqzS8CQmNOWOkQ==}
-
- '@vue/compiler-dom@3.5.22':
- resolution: {integrity: sha512-W8RknzUM1BLkypvdz10OVsGxnMAuSIZs9Wdx1vzA3mL5fNMN15rhrSCLiTm6blWeACwUwizzPVqGJgOGBEN/hA==}
-
- '@vue/compiler-sfc@3.5.22':
- resolution: {integrity: sha512-tbTR1zKGce4Lj+JLzFXDq36K4vcSZbJ1RBu8FxcDv1IGRz//Dh2EBqksyGVypz3kXpshIfWKGOCcqpSbyGWRJQ==}
-
- '@vue/compiler-ssr@3.5.22':
- resolution: {integrity: sha512-GdgyLvg4R+7T8Nk2Mlighx7XGxq/fJf9jaVofc3IL0EPesTE86cP/8DD1lT3h1JeZr2ySBvyqKQJgbS54IX1Ww==}
-
- '@vue/devtools-api@7.7.7':
- resolution: {integrity: sha512-lwOnNBH2e7x1fIIbVT7yF5D+YWhqELm55/4ZKf45R9T8r9dE2AIOy8HKjfqzGsoTHFbWbr337O4E0A0QADnjBg==}
-
- '@vue/devtools-kit@7.7.7':
- resolution: {integrity: sha512-wgoZtxcTta65cnZ1Q6MbAfePVFxfM+gq0saaeytoph7nEa7yMXoi6sCPy4ufO111B9msnw0VOWjPEFCXuAKRHA==}
-
- '@vue/devtools-shared@7.7.7':
- resolution: {integrity: sha512-+udSj47aRl5aKb0memBvcUG9koarqnxNM5yjuREvqwK6T3ap4mn3Zqqc17QrBFTqSMjr3HK1cvStEZpMDpfdyw==}
-
- '@vue/reactivity@3.5.22':
- resolution: {integrity: sha512-f2Wux4v/Z2pqc9+4SmgZC1p73Z53fyD90NFWXiX9AKVnVBEvLFOWCEgJD3GdGnlxPZt01PSlfmLqbLYzY/Fw4A==}
-
- '@vue/runtime-core@3.5.22':
- resolution: {integrity: sha512-EHo4W/eiYeAzRTN5PCextDUZ0dMs9I8mQ2Fy+OkzvRPUYQEyK9yAjbasrMCXbLNhF7P0OUyivLjIy0yc6VrLJQ==}
-
- '@vue/runtime-dom@3.5.22':
- resolution: {integrity: sha512-Av60jsryAkI023PlN7LsqrfPvwfxOd2yAwtReCjeuugTJTkgrksYJJstg1e12qle0NarkfhfFu1ox2D+cQotww==}
-
- '@vue/server-renderer@3.5.22':
- resolution: {integrity: sha512-gXjo+ao0oHYTSswF+a3KRHZ1WszxIqO7u6XwNHqcqb9JfyIL/pbWrrh/xLv7jeDqla9u+LK7yfZKHih1e1RKAQ==}
- peerDependencies:
- vue: 3.5.22
-
- '@vue/shared@3.5.22':
- resolution: {integrity: sha512-F4yc6palwq3TT0u+FYf0Ns4Tfl9GRFURDN2gWG7L1ecIaS/4fCIuFOjMTnCyjsu/OK6vaDKLCrGAa+KvvH+h4w==}
-
- '@vueuse/core@12.8.2':
- resolution: {integrity: sha512-HbvCmZdzAu3VGi/pWYm5Ut+Kd9mn1ZHnn4L5G8kOQTPs/IwIAmJoBrmYk2ckLArgMXZj0AW3n5CAejLUO+PhdQ==}
-
- '@vueuse/core@13.9.0':
- resolution: {integrity: sha512-ts3regBQyURfCE2BcytLqzm8+MmLlo5Ln/KLoxDVcsZ2gzIwVNnQpQOL/UKV8alUqjSZOlpFZcRNsLRqj+OzyA==}
- peerDependencies:
- vue: ^3.5.0
-
- '@vueuse/integrations@12.8.2':
- resolution: {integrity: sha512-fbGYivgK5uBTRt7p5F3zy6VrETlV9RtZjBqd1/HxGdjdckBgBM4ugP8LHpjolqTj14TXTxSK1ZfgPbHYyGuH7g==}
- peerDependencies:
- async-validator: ^4
- axios: ^1
- change-case: ^5
- drauu: ^0.4
- focus-trap: ^7
- fuse.js: ^7
- idb-keyval: ^6
- jwt-decode: ^4
- nprogress: ^0.2
- qrcode: ^1.5
- sortablejs: ^1
- universal-cookie: ^7
- peerDependenciesMeta:
- async-validator:
- optional: true
- axios:
- optional: true
- change-case:
- optional: true
- drauu:
- optional: true
- focus-trap:
- optional: true
- fuse.js:
- optional: true
- idb-keyval:
- optional: true
- jwt-decode:
- optional: true
- nprogress:
- optional: true
- qrcode:
- optional: true
- sortablejs:
- optional: true
- universal-cookie:
- optional: true
-
- '@vueuse/metadata@12.8.2':
- resolution: {integrity: sha512-rAyLGEuoBJ/Il5AmFHiziCPdQzRt88VxR+Y/A/QhJ1EWtWqPBBAxTAFaSkviwEuOEZNtW8pvkPgoCZQ+HxqW1A==}
-
- '@vueuse/metadata@13.9.0':
- resolution: {integrity: sha512-1AFRvuiGphfF7yWixZa0KwjYH8ulyjDCC0aFgrGRz8+P4kvDFSdXLVfTk5xAN9wEuD1J6z4/myMoYbnHoX07zg==}
-
- '@vueuse/shared@12.8.2':
- resolution: {integrity: sha512-dznP38YzxZoNloI0qpEfpkms8knDtaoQ6Y/sfS0L7Yki4zh40LFHEhur0odJC6xTHG5dxWVPiUWBXn+wCG2s5w==}
-
- '@vueuse/shared@13.9.0':
- resolution: {integrity: sha512-e89uuTLMh0U5cZ9iDpEI2senqPGfbPRTHM/0AaQkcxnpqjkZqDYP8rpfm7edOz8s+pOCOROEy1PIveSW8+fL5g==}
- peerDependencies:
- vue: ^3.5.0
-
- acorn@8.15.0:
- resolution: {integrity: sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==}
+ acorn@8.11.2:
+ resolution: {integrity: sha512-nc0Axzp/0FILLEVsm4fNwLCwMttvhEI263QtVPQcbpfZZ3ts0hLsZGOpE6czNlid7CJ9MlyH8reXkpsf3YUY4w==}
engines: {node: '>=0.4.0'}
hasBin: true
- algoliasearch@5.42.0:
- resolution: {integrity: sha512-X5+PtWc9EJIPafT/cj8ZG+6IU3cjRRnlHGtqMHK/9gsiupQbAyYlH5y7qt/FtsAhfX5AICHffZy69ZAsVrxWkQ==}
- engines: {node: '>= 14.0.0'}
+ address@1.2.2:
+ resolution: {integrity: sha512-4B/qKCfeE/ODUaAUpSwfzazo5x29WD4r3vXiWsB7I2mSDAihwEqKO+g8GELZUQSSAo5e1XTYh3ZVfLyxBc12nA==}
+ engines: {node: '>= 10.0.0'}
+
+ adm-zip@0.5.16:
+ resolution: {integrity: sha512-TGw5yVi4saajsSEgz25grObGHEUaDrniwvA2qwSC060KfqGPdglhvPMA2lPIoxs3PQIItj2iag35fONcQqgUaQ==}
+ engines: {node: '>=12.0'}
+
+ agent-base@7.1.4:
+ resolution: {integrity: sha512-MnA+YT8fwfJPgBx3m60MNqakm30XOkyIoH1y6huTQvC0PwZG7ki8NacLBcrPbNoo8vEZy7Jpuk7+jMO+CUovTQ==}
+ engines: {node: '>= 14'}
+
+ aggregate-error@4.0.1:
+ resolution: {integrity: sha512-0poP0T7el6Vq3rstR8Mn4V/IQrpBLO6POkUSrN7RhyY+GF/InCFShQzsQ39T25gkHhLgSLByyAz+Kjb+c2L98w==}
+ engines: {node: '>=12'}
+
+ ajv-draft-04@1.0.0:
+ resolution: {integrity: sha512-mv00Te6nmYbRp5DCwclxtt7yV/joXJPGS7nM+97GdxvuttCOfgI3K4U25zboyeX0O+myI8ERluxQe5wljMmVIw==}
+ peerDependencies:
+ ajv: ^8.5.0
+ peerDependenciesMeta:
+ ajv:
+ optional: true
+
+ ajv-errors@3.0.0:
+ resolution: {integrity: sha512-V3wD15YHfHz6y0KdhYFjyy9vWtEVALT9UrxfN3zqlI6dMioHnJrqOYfyPKol3oqrnCM9uwkcdCwkJ0WUcbLMTQ==}
+ peerDependencies:
+ ajv: ^8.0.1
+
+ ajv-formats@2.1.1:
+ resolution: {integrity: sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==}
+ peerDependencies:
+ ajv: ^8.0.0
+ peerDependenciesMeta:
+ ajv:
+ optional: true
+
+ ajv-formats@3.0.1:
+ resolution: {integrity: sha512-8iUql50EUR+uUcdRQ3HDqa6EVyo3docL8g5WJ3FNcWmu62IbkGUue/pEyLBW8VGKKucTPgqeks4fIU1DA4yowQ==}
+ peerDependencies:
+ ajv: ^8.0.0
+ peerDependenciesMeta:
+ ajv:
+ optional: true
+
+ ajv@8.18.0:
+ resolution: {integrity: sha512-PlXPeEWMXMZ7sPYOHqmDyCJzcfNrUr3fGNKtezX14ykXOEIvyK81d+qydx89KY5O71FKMPaQ2vBfBFI5NHR63A==}
+
+ ansi-escapes@4.3.2:
+ resolution: {integrity: sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==}
+ engines: {node: '>=8'}
+
+ ansi-escapes@7.3.0:
+ resolution: {integrity: sha512-BvU8nYgGQBxcmMuEeUEmNTvrMVjJNSH7RgW24vXexN4Ven6qCvy4TntnvlnwnMLTVlcRQQdbRY8NKnaIoeWDNg==}
+ engines: {node: '>=18'}
+
+ ansi-regex@5.0.1:
+ resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==}
+ engines: {node: '>=8'}
+
+ ansi-regex@6.2.2:
+ resolution: {integrity: sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg==}
+ engines: {node: '>=12'}
+
+ ansi-styles@4.3.0:
+ resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==}
+ engines: {node: '>=8'}
+
+ ansi-styles@6.2.3:
+ resolution: {integrity: sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg==}
+ engines: {node: '>=12'}
+
+ any-promise@1.3.0:
+ resolution: {integrity: sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==}
+
+ anymatch@3.1.3:
+ resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==}
+ engines: {node: '>= 8'}
+
+ arg@5.0.2:
+ resolution: {integrity: sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==}
+
+ argparse@1.0.10:
+ resolution: {integrity: sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==}
+
+ argparse@2.0.1:
+ resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==}
aria-hidden@1.2.6:
resolution: {integrity: sha512-ik3ZgC9dY/lYVVM++OISsaYDeg1tb0VtP5uL3ouh1koGOaUMDPpbFIei4JkFimWUFPn90sbMNMXQAIVOlnYKJA==}
engines: {node: '>=10'}
- birpc@2.7.0:
- resolution: {integrity: sha512-tub/wFGH49vNCm0xraykcY3TcRgX/3JsALYq/Lwrtti+bTyFHkCUAWF5wgYoie8P41wYwig2mIKiqoocr1EkEQ==}
+ arkregex@0.0.3:
+ resolution: {integrity: sha512-bU21QJOJEFJK+BPNgv+5bVXkvRxyAvgnon75D92newgHxkBJTgiFwQxusyViYyJkETsddPlHyspshDQcCzmkNg==}
+
+ arkregex@0.0.5:
+ resolution: {integrity: sha512-ncYjBdLlh5/QnVsAA8De16Tc9EqmYM7y/WU9j+236KcyYNUXogpz3sC4ATIZYzzLxwI+0sEOaQLEmLmRleaEXw==}
+
+ arktype@2.1.27:
+ resolution: {integrity: sha512-enctOHxI4SULBv/TDtCVi5M8oLd4J5SVlPUblXDzSsOYQNMzmVbUosGBnJuZDKmFlN5Ie0/QVEuTE+Z5X1UhsQ==}
+
+ arktype@2.1.29:
+ resolution: {integrity: sha512-jyfKk4xIOzvYNayqnD8ZJQqOwcrTOUbIU4293yrzAjA3O1dWh61j71ArMQ6tS/u4pD7vabSPe7nG3RCyoXW6RQ==}
+
+ array-buffer-byte-length@1.0.2:
+ resolution: {integrity: sha512-LHE+8BuR7RYGDKvnrmcuSq3tDcKv9OFEXQt/HpbZhY7V6h0zlUXutnAD82GiFx9rdieCMjkvtcsPqBwgUl1Iiw==}
+ engines: {node: '>= 0.4'}
+
+ array-flatten@1.1.1:
+ resolution: {integrity: sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==}
+
+ array-iterate@2.0.1:
+ resolution: {integrity: sha512-I1jXZMjAgCMmxT4qxXfPXa6SthSoE8h6gkSI9BGGNv8mP8G/v0blc+qFnZu6K42vTOiuME596QaLO0TP3Lk0xg==}
+
+ arraybuffer.prototype.slice@1.0.4:
+ resolution: {integrity: sha512-BNoCY6SXXPQ7gF2opIP4GBE+Xw7U+pHMYKuzjgCN3GwiaIR09UUeKfheyIry77QtrCBlC0KK0q5/TER/tYh3PQ==}
+ engines: {node: '>= 0.4'}
+
+ ast-types@0.13.4:
+ resolution: {integrity: sha512-x1FCFnFifvYDDzTaLII71vG5uvDwgtmDTEVWAxrgeiR8VjMONcCXJx7E+USjDtHlwFmt9MysbqgF9b9Vjr6w+w==}
+ engines: {node: '>=4'}
+
+ astring@1.9.0:
+ resolution: {integrity: sha512-LElXdjswlqjWrPpJFg1Fx4wpkOCxj1TDHlSV4PlaRxHGWko024xICaa97ZkMfs6DRKlCguiAI+rbXv5GWwXIkg==}
+ hasBin: true
+
+ async-function@1.0.0:
+ resolution: {integrity: sha512-hsU18Ae8CDTR6Kgu9DYf0EbCr/a5iGL0rytQDobUcdpYOKokk8LEjVphnXkDkgpi0wYVsqrXuP0bZxJaTqdgoA==}
+ engines: {node: '>= 0.4'}
+
+ asynckit@0.4.0:
+ resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==}
+
+ auto-bind@5.0.1:
+ resolution: {integrity: sha512-ooviqdwwgfIfNmDwo94wlshcdzfO64XV0Cg6oDsDYBJfITDz1EngD2z7DkbvCWn+XIMsIqW27sEVF6qcpJrRcg==}
+ engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
+
+ available-typed-arrays@1.0.7:
+ resolution: {integrity: sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==}
+ engines: {node: '>= 0.4'}
+
+ avsc@5.7.9:
+ resolution: {integrity: sha512-yOA4wFeI7ET3v32Di/sUybQ+ttP20JHSW3mxLuNGeO0uD6PPcvLrIQXSvy/rhJOWU5JrYh7U4OHplWMmtAtjMg==}
+ engines: {node: '>=0.11'}
+
+ axios@1.10.0:
+ resolution: {integrity: sha512-/1xYAC4MP/HEG+3duIhFr4ZQXR4sQXOIe+o6sdqzeykGLx6Upp/1p8MHqhINOvGeP7xyNHe7tsiJByc4SSVUxw==}
+
+ axios@1.13.2:
+ resolution: {integrity: sha512-VPk9ebNqPcy5lRGuSlKx752IlDatOjT9paPlm8A7yOuW2Fbvp4X3JznJtT4f0GzGLLiWE9W8onz51SqLYwzGaA==}
+
+ b4a@1.8.0:
+ resolution: {integrity: sha512-qRuSmNSkGQaHwNbM7J78Wwy+ghLEYF1zNrSeMxj4Kgw6y33O3mXcQ6Ie9fRvfU/YnxWkOchPXbaLb73TkIsfdg==}
+ peerDependencies:
+ react-native-b4a: '*'
+ peerDependenciesMeta:
+ react-native-b4a:
+ optional: true
+
+ bail@2.0.2:
+ resolution: {integrity: sha512-0xO6mYd7JB2YesxDKplafRpsiOzPt9V02ddPCLbY1xYGPOX24NTyN50qnUxgCPcSoYMhKpAuBTjQoRZCAkUDRw==}
+
+ balanced-match@1.0.2:
+ resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==}
+
+ bare-events@2.8.2:
+ resolution: {integrity: sha512-riJjyv1/mHLIPX4RwiK+oW9/4c3TEUeORHKefKAKnZ5kyslbN+HXowtbaVEqt4IMUB7OXlfixcs6gsFeo/jhiQ==}
+ peerDependencies:
+ bare-abort-controller: '*'
+ peerDependenciesMeta:
+ bare-abort-controller:
+ optional: true
+
+ bare-fs@4.5.4:
+ resolution: {integrity: sha512-POK4oplfA7P7gqvetNmCs4CNtm9fNsx+IAh7jH7GgU0OJdge2rso0R20TNWVq6VoWcCvsTdlNDaleLHGaKx8CA==}
+ engines: {bare: '>=1.16.0'}
+ peerDependencies:
+ bare-buffer: '*'
+ peerDependenciesMeta:
+ bare-buffer:
+ optional: true
+
+ bare-os@3.6.2:
+ resolution: {integrity: sha512-T+V1+1srU2qYNBmJCXZkUY5vQ0B4FSlL3QDROnKQYOqeiQR8UbjNHlPa+TIbM4cuidiN9GaTaOZgSEgsvPbh5A==}
+ engines: {bare: '>=1.14.0'}
+
+ bare-path@3.0.0:
+ resolution: {integrity: sha512-tyfW2cQcB5NN8Saijrhqn0Zh7AnFNsnczRcuWODH0eYAXBsJ5gVxAUuNr7tsHSC6IZ77cA0SitzT+s47kot8Mw==}
+
+ bare-stream@2.8.0:
+ resolution: {integrity: sha512-reUN0M2sHRqCdG4lUK3Fw8w98eeUIZHL5c3H7Mbhk2yVBL+oofgaIp0ieLfD5QXwPCypBpmEEKU2WZKzbAk8GA==}
+ peerDependencies:
+ bare-buffer: '*'
+ bare-events: '*'
+ peerDependenciesMeta:
+ bare-buffer:
+ optional: true
+ bare-events:
+ optional: true
+
+ bare-url@2.3.2:
+ resolution: {integrity: sha512-ZMq4gd9ngV5aTMa5p9+UfY0b3skwhHELaDkhEHetMdX0LRkW9kzaym4oo/Eh+Ghm0CCDuMTsRIGM/ytUc1ZYmw==}
+
+ base64-js@1.5.1:
+ resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==}
+
+ base64id@2.0.0:
+ resolution: {integrity: sha512-lGe34o6EHj9y3Kts9R4ZYs/Gr+6N7MCaMlIFA3F1R2O5/m7K06AxfSeO5530PEERE6/WyEg3lsuyw4GHlPZHog==}
+ engines: {node: ^4.5.0 || >= 5.9}
+
+ basic-ftp@5.1.0:
+ resolution: {integrity: sha512-RkaJzeJKDbaDWTIPiJwubyljaEPwpVWkm9Rt5h9Nd6h7tEXTJ3VB4qxdZBioV7JO5yLUaOKwz7vDOzlncUsegw==}
+ engines: {node: '>=10.0.0'}
+
+ better-opn@3.0.2:
+ resolution: {integrity: sha512-aVNobHnJqLiUelTaHat9DZ1qM2w0C0Eym4LPI/3JxOnSokGVdsl1T1kN7TFvsEAD8G47A6VKQ0TVHqbBnYMJlQ==}
+ engines: {node: '>=12.0.0'}
+
+ binary-extensions@2.3.0:
+ resolution: {integrity: sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==}
+ engines: {node: '>=8'}
+
+ body-parser@1.20.1:
+ resolution: {integrity: sha512-jWi7abTbYwajOytWCQc37VulmWiRae5RyTpaCyDcS5/lMdtwSz5lOpDE67srw/HYe35f1z3fDQw+3txg7gNtWw==}
+ engines: {node: '>= 0.8', npm: 1.2.8000 || >= 1.4.16}
+
+ brace-expansion@1.1.12:
+ resolution: {integrity: sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==}
+
+ braces@3.0.3:
+ resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==}
+ engines: {node: '>=8'}
+
+ buffer-crc32@0.2.13:
+ resolution: {integrity: sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==}
+
+ buffer@5.7.1:
+ resolution: {integrity: sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==}
+
+ bytes@3.1.2:
+ resolution: {integrity: sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==}
+ engines: {node: '>= 0.8'}
+
+ cacheable-lookup@7.0.0:
+ resolution: {integrity: sha512-+qJyx4xiKra8mZrcwhjMRMUhD5NR1R8esPkzIYxX96JiecFoxAXFuz/GpR3+ev4PE1WamHip78wV0vcmPQtp8w==}
+ engines: {node: '>=14.16'}
+
+ cacheable-request@10.2.14:
+ resolution: {integrity: sha512-zkDT5WAF4hSSoUgyfg5tFIxz8XQK+25W/TLVojJTMKBaxevLBBtLxgqguAuVQB8PVW79FVjHcU+GJ9tVbDZ9mQ==}
+ engines: {node: '>=14.16'}
+
+ call-bind-apply-helpers@1.0.2:
+ resolution: {integrity: sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==}
+ engines: {node: '>= 0.4'}
+
+ call-bind@1.0.8:
+ resolution: {integrity: sha512-oKlSFMcMwpUg2ednkhQ454wfWiU/ul3CkJe/PEHcTKuiX6RpbehUiFMXu13HalGZxfUwCQzZG747YXBn1im9ww==}
+ engines: {node: '>= 0.4'}
+
+ call-bound@1.0.4:
+ resolution: {integrity: sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==}
+ engines: {node: '>= 0.4'}
+
+ callsites@3.1.0:
+ resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==}
+ engines: {node: '>=6'}
+
+ camelcase-css@2.0.1:
+ resolution: {integrity: sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==}
+ engines: {node: '>= 6'}
ccount@2.0.1:
resolution: {integrity: sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg==}
+ chalk@5.2.0:
+ resolution: {integrity: sha512-ree3Gqw/nazQAPuJJEy+avdl7QfZMcUvmHIKgEZkGL+xOBzRvup5Hxo6LHuMceSxOabuJLJm5Yp/92R9eMmMvA==}
+ engines: {node: ^12.17.0 || ^14.13 || >=16.0.0}
+
+ chalk@5.3.0:
+ resolution: {integrity: sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w==}
+ engines: {node: ^12.17.0 || ^14.13 || >=16.0.0}
+
+ chalk@5.6.2:
+ resolution: {integrity: sha512-7NzBL0rN6fMUW+f7A6Io4h40qQlG+xGmtMxfbnH/K7TAtt8JQWVQK+6g0UXKMeVJoyV5EkkNsErQ8pVD3bLHbA==}
+ engines: {node: ^12.17.0 || ^14.13 || >=16.0.0}
+
character-entities-html4@2.1.0:
resolution: {integrity: sha512-1v7fgQRj6hnSwFpq1Eu0ynr/CDEw0rXo2B61qXrLNdHZmPKgb7fqS1a2JwF0rISo9q77jDI8VMEHoApn8qDoZA==}
character-entities-legacy@3.0.0:
resolution: {integrity: sha512-RpPp0asT/6ufRm//AJVwpViZbGM/MkjQFxJccQRHmISF/22NBtsHqAWmL+/pmkPWoIUJdWyeVleTl1wydHATVQ==}
- chevrotain-allstar@0.3.1:
- resolution: {integrity: sha512-b7g+y9A0v4mxCW1qUhf3BSVPg+/NvGErk/dOkrDaHA0nQIQGAtrOjlX//9OQtRlSCy+x9rfB5N8yC71lH1nvMw==}
+ character-entities@2.0.2:
+ resolution: {integrity: sha512-shx7oQ0Awen/BRIdkjkvz54PnEEI/EjwXDSIZp86/KKdbafHh1Df/RYGBhn4hbe2+uKC9FnT5UCEdyPz3ai9hQ==}
+
+ character-reference-invalid@2.0.1:
+ resolution: {integrity: sha512-iBZ4F4wRbyORVsu0jPV7gXkOsGYjGHPmAyv+HiHG8gi5PtC9KI2j1+v8/tlibRvjoWX027ypmG/n0HtO5t7unw==}
+
+ chardet@2.1.1:
+ resolution: {integrity: sha512-PsezH1rqdV9VvyNhxxOW32/d75r01NY7TQCmOqomRo15ZSOKbpTFVsfjghxo6JloQUCGnH4k1LGu0R4yCLlWQQ==}
+
+ chokidar@3.5.3:
+ resolution: {integrity: sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==}
+ engines: {node: '>= 8.10.0'}
+
+ chokidar@3.6.0:
+ resolution: {integrity: sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==}
+ engines: {node: '>= 8.10.0'}
+
+ chownr@2.0.0:
+ resolution: {integrity: sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==}
+ engines: {node: '>=10'}
+
+ chromium-bidi@0.6.2:
+ resolution: {integrity: sha512-4WVBa6ijmUTVr9cZD4eicQD8Mdy/HCX3bzEIYYpmk0glqYLoWH+LqQEvV9RpDRzoQSbY1KJHloYXbDMXMbDPhg==}
peerDependencies:
- chevrotain: ^11.0.0
+ devtools-protocol: '*'
- chevrotain@11.0.3:
- resolution: {integrity: sha512-ci2iJH6LeIkvP9eJW6gpueU8cnZhv85ELY8w8WiFtNjMHA5ad6pQLaJo9mEly/9qUyCpvqX8/POVUTf18/HFdw==}
+ clean-stack@4.2.0:
+ resolution: {integrity: sha512-LYv6XPxoyODi36Dp976riBtSY27VmFo+MKqEU9QCCWyTrdEPDog+RWA7xQWHi6Vbp61j5c4cdzzX1NidnwtUWg==}
+ engines: {node: '>=12'}
- class-variance-authority@0.7.1:
- resolution: {integrity: sha512-Ka+9Trutv7G8M6WT6SeiRWz792K5qEqIGEGzXKhAE6xOWAY6pPH8U+9IY3oCMv6kqTmLsv7Xh/2w2RigkePMsg==}
+ cli-boxes@3.0.0:
+ resolution: {integrity: sha512-/lzGpEWL/8PfI0BmBOPRwp0c/wFNX1RdUML3jK/RcSBA9T8mZDdQpqYBKtCFTOfQbwPqWEOpjqW+Fnayc0969g==}
+ engines: {node: '>=10'}
- clsx@2.1.1:
- resolution: {integrity: sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==}
+ cli-cursor@4.0.0:
+ resolution: {integrity: sha512-VGtlMu3x/4DOtIUwEkRezxUZ2lBacNJCHash0N0WeZDBS+7Ux1dm3XWAgWYxLJFMMdOeXMHXorshEFhbMSGelg==}
+ engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
+
+ cli-spinners@2.9.2:
+ resolution: {integrity: sha512-ywqV+5MmyL4E7ybXgKys4DugZbX0FC6LnwrhjuykIjnK9k8OQacQ7axGKnjDXWNhns0xot3bZI5h55H8yo9cJg==}
engines: {node: '>=6'}
+ cli-truncate@4.0.0:
+ resolution: {integrity: sha512-nPdaFdQ0h/GEigbPClz11D0v/ZJEwxmeVZGeMo3Z5StPtUTkA9o1lD6QwoirYiSDzbcwn2XcjwmCp68W1IS4TA==}
+ engines: {node: '>=18'}
+
+ cli-width@4.1.0:
+ resolution: {integrity: sha512-ouuZd4/dm2Sw5Gmqy6bGyNNNe1qt9RpmxveLSO7KcgsTnU7RXfsw+/bukWGo1abgBiMAic068rclZsO4IWmmxQ==}
+ engines: {node: '>= 12'}
+
+ cliui@8.0.1:
+ resolution: {integrity: sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==}
+ engines: {node: '>=12'}
+
+ code-excerpt@4.0.0:
+ resolution: {integrity: sha512-xxodCmBen3iy2i0WtAK8FlFNrRzjUqjRsMfho58xT/wvZU1YTM3fCnRjcy1gJPMepaRlgm/0e6w8SpWHpn3/cA==}
+ engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
+
+ collapse-white-space@2.1.0:
+ resolution: {integrity: sha512-loKTxY1zCOuG4j9f6EPnuyyYkf58RnhhWTvRoZEokgB+WbdXehfjFviyOVYkqzEWz1Q5kRiZdBYS5SwxbQYwzw==}
+
+ color-blend@4.0.0:
+ resolution: {integrity: sha512-fYODTHhI/NG+B5GnzvuL3kiFrK/UnkUezWFTgEPBTY5V+kpyfAn95Vn9sJeeCX6omrCOdxnqCL3CvH+6sXtIbw==}
+ engines: {node: '>=10.0.0'}
+
+ color-convert@2.0.1:
+ resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==}
+ engines: {node: '>=7.0.0'}
+
+ color-name@1.1.4:
+ resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==}
+
+ color-string@1.9.1:
+ resolution: {integrity: sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg==}
+
+ color@4.2.3:
+ resolution: {integrity: sha512-1rXeuUUiGGrykh+CeBdu5Ie7OJwinCgQY0bc7GCRxy5xVHy+moaqkpL/jqQq0MtQOeYcrqEz4abc5f0KtU7W4A==}
+ engines: {node: '>=12.5.0'}
+
+ combined-stream@1.0.8:
+ resolution: {integrity: sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==}
+ engines: {node: '>= 0.8'}
+
comma-separated-tokens@2.0.3:
resolution: {integrity: sha512-Fu4hJdvzeylCfQPp9SGWidpzrMs7tTrlu6Vb8XGaRGck8QSNZJJp538Wrb60Lax4fPwR64ViY468OIUTbRlGZg==}
- commander@7.2.0:
- resolution: {integrity: sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==}
- engines: {node: '>= 10'}
+ commander@4.1.1:
+ resolution: {integrity: sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==}
+ engines: {node: '>= 6'}
commander@8.3.0:
resolution: {integrity: sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==}
engines: {node: '>= 12'}
- confbox@0.1.8:
- resolution: {integrity: sha512-RMtmw0iFkeR4YV+fUOSucriAQNb9g8zFR52MWCtl+cCZOFRNL6zeB395vPzFhEjjn4fMxXudmELnl/KF/WrK6w==}
+ concat-map@0.0.1:
+ resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==}
- confbox@0.2.2:
- resolution: {integrity: sha512-1NB+BKqhtNipMsov4xI/NnhCKp9XG9NamYp5PVm9klAT0fsrNPjaFICsCFhNhwZJKNh7zB/3q8qXz0E9oaMNtQ==}
+ content-disposition@0.5.4:
+ resolution: {integrity: sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==}
+ engines: {node: '>= 0.6'}
- copy-anything@4.0.5:
- resolution: {integrity: sha512-7Vv6asjS4gMOuILabD3l739tsaxFQmC+a7pLZm02zyvs8p977bL3zEgq3yDk5rn9B0PbYgIv++jmHcuUab4RhA==}
- engines: {node: '>=18'}
+ content-type@1.0.5:
+ resolution: {integrity: sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==}
+ engines: {node: '>= 0.6'}
- cose-base@1.0.3:
- resolution: {integrity: sha512-s9whTXInMSgAp/NVXVNuVxVKzGH2qck3aQlVHxDCdAEPgtMKwc4Wq6/QKhgdEdgbLSi9rBTAcPoRa6JpiG4ksg==}
+ convert-to-spaces@2.0.1:
+ resolution: {integrity: sha512-rcQ1bsQO9799wq24uE5AM2tAILy4gXGIK/njFWcVQkGNZ96edlpY+A7bjwvzjYvLDyzmG1MmMLZhpcsb+klNMQ==}
+ engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
- cose-base@2.2.0:
- resolution: {integrity: sha512-AzlgcsCbUMymkADOJtQm3wO9S3ltPfYOFD5033keQn9NJzIbtnZj+UdBJe7DYml/8TdbtHJW3j58SOnKhWY/5g==}
+ cookie-signature@1.0.6:
+ resolution: {integrity: sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==}
- csstype@3.1.3:
- resolution: {integrity: sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==}
+ cookie@0.4.2:
+ resolution: {integrity: sha512-aSWTXFzaKWkvHO1Ny/s+ePFpvKsPnjc551iI41v3ny/ow6tBG5Vd+FuqGNhh1LxOmVzOlGUriIlOaokOvhaStA==}
+ engines: {node: '>= 0.6'}
- cytoscape-cose-bilkent@4.1.0:
- resolution: {integrity: sha512-wgQlVIUJF13Quxiv5e1gstZ08rnZj2XaLHGoFMYXz7SkNfCDOOteKBE6SYRfA9WxxI/iBc3ajfDoc6hb/MRAHQ==}
+ cookie@0.5.0:
+ resolution: {integrity: sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==}
+ engines: {node: '>= 0.6'}
+
+ cors@2.8.6:
+ resolution: {integrity: sha512-tJtZBBHA6vjIAaF6EnIaq6laBBP9aq/Y3ouVJjEfoHbRBcHBAHYcMh/w8LDrk2PvIMMq8gmopa5D4V8RmbrxGw==}
+ engines: {node: '>= 0.10'}
+
+ cosmiconfig@9.0.0:
+ resolution: {integrity: sha512-itvL5h8RETACmOTFc4UfIyB2RfEHi71Ax6E/PivVxq9NseKbOWpeyHEOIbmAw1rs8Ak0VursQNww7lf7YtUwzg==}
+ engines: {node: '>=14'}
peerDependencies:
- cytoscape: ^3.2.0
+ typescript: '>=4.9.5'
+ peerDependenciesMeta:
+ typescript:
+ optional: true
- cytoscape-fcose@2.2.0:
- resolution: {integrity: sha512-ki1/VuRIHFCzxWNrsshHYPs6L7TvLu3DL+TyIGEsRcvVERmxokbf5Gdk7mFxZnTdiGtnA4cfSmjZJMviqSuZrQ==}
- peerDependencies:
- cytoscape: ^3.2.0
-
- cytoscape@3.33.1:
- resolution: {integrity: sha512-iJc4TwyANnOGR1OmWhsS9ayRS3s+XQ185FmuHObThD+5AeJCakAAbWv8KimMTt08xCCLNgneQwFp+JRJOr9qGQ==}
- engines: {node: '>=0.10'}
-
- d3-array@2.12.1:
- resolution: {integrity: sha512-B0ErZK/66mHtEsR1TkPEEkwdy+WDesimkM5gpZr5Dsg54BiTA5RXtYW5qTLIAcekaS9xfZrzBLF/OAkB3Qn1YQ==}
-
- d3-array@3.2.4:
- resolution: {integrity: sha512-tdQAmyA18i4J7wprpYq8ClcxZy3SC31QMeByyCFyRt7BVHdREQZ5lpzoe5mFEYZUWe+oq8HBvk9JjpibyEV4Jg==}
- engines: {node: '>=12'}
-
- d3-axis@3.0.0:
- resolution: {integrity: sha512-IH5tgjV4jE/GhHkRV0HiVYPDtvfjHQlQfJHs0usq7M30XcSBvOotpmH1IgkcXsO/5gEQZD43B//fc7SRT5S+xw==}
- engines: {node: '>=12'}
-
- d3-brush@3.0.0:
- resolution: {integrity: sha512-ALnjWlVYkXsVIGlOsuWH1+3udkYFI48Ljihfnh8FZPF2QS9o+PzGLBslO0PjzVoHLZ2KCVgAM8NVkXPJB2aNnQ==}
- engines: {node: '>=12'}
-
- d3-chord@3.0.1:
- resolution: {integrity: sha512-VE5S6TNa+j8msksl7HwjxMHDM2yNK3XCkusIlpX5kwauBfXuyLAtNg9jCp/iHH61tgI4sb6R/EIMWCqEIdjT/g==}
- engines: {node: '>=12'}
-
- d3-color@3.1.0:
- resolution: {integrity: sha512-zg/chbXyeBtMQ1LbD/WSoW2DpC3I0mpmPdW+ynRTj/x2DAWYrIY7qeZIHidozwV24m4iavr15lNwIwLxRmOxhA==}
- engines: {node: '>=12'}
-
- d3-contour@4.0.2:
- resolution: {integrity: sha512-4EzFTRIikzs47RGmdxbeUvLWtGedDUNkTcmzoeyg4sP/dvCexO47AaQL7VKy/gul85TOxw+IBgA8US2xwbToNA==}
- engines: {node: '>=12'}
-
- d3-delaunay@6.0.4:
- resolution: {integrity: sha512-mdjtIZ1XLAM8bm/hx3WwjfHt6Sggek7qH043O8KEjDXN40xi3vx/6pYSVTwLjEgiXQTbvaouWKynLBiUZ6SK6A==}
- engines: {node: '>=12'}
-
- d3-dispatch@3.0.1:
- resolution: {integrity: sha512-rzUyPU/S7rwUflMyLc1ETDeBj0NRuHKKAcvukozwhshr6g6c5d8zh4c2gQjY2bZ0dXeGLWc1PF174P2tVvKhfg==}
- engines: {node: '>=12'}
-
- d3-drag@3.0.0:
- resolution: {integrity: sha512-pWbUJLdETVA8lQNJecMxoXfH6x+mO2UQo8rSmZ+QqxcbyA3hfeprFgIT//HW2nlHChWeIIMwS2Fq+gEARkhTkg==}
- engines: {node: '>=12'}
-
- d3-dsv@3.0.1:
- resolution: {integrity: sha512-UG6OvdI5afDIFP9w4G0mNq50dSOsXHJaRE8arAS5o9ApWnIElp8GZw1Dun8vP8OyHOZ/QJUKUJwxiiCCnUwm+Q==}
- engines: {node: '>=12'}
+ cssesc@3.0.0:
+ resolution: {integrity: sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==}
+ engines: {node: '>=4'}
hasBin: true
- d3-ease@3.0.1:
- resolution: {integrity: sha512-wR/XK3D3XcLIZwpbvQwQ5fK+8Ykds1ip7A2Txe0yxncXSdq1L9skcG7blcedkOX+ZcgxGAmLX1FrRGbADwzi0w==}
- engines: {node: '>=12'}
+ csstype@3.2.3:
+ resolution: {integrity: sha512-z1HGKcYy2xA8AGQfwrn0PAy+PB7X/GSj3UVJW9qKyn43xWa+gl5nXmU4qqLMRzWVLFC8KusUX8T/0kCiOYpAIQ==}
- d3-fetch@3.0.1:
- resolution: {integrity: sha512-kpkQIM20n3oLVBKGg6oHrUchHM3xODkTzjMoj7aWQFq5QEM+R6E4WkzT5+tojDY7yjez8KgCBRoj4aEr99Fdqw==}
- engines: {node: '>=12'}
+ data-uri-to-buffer@6.0.2:
+ resolution: {integrity: sha512-7hvf7/GW8e86rW0ptuwS3OcBGDjIi6SZva7hCyWC0yYry2cOPmLIjXAUHI6DK2HsnwJd9ifmt57i8eV2n4YNpw==}
+ engines: {node: '>= 14'}
- d3-force@3.0.0:
- resolution: {integrity: sha512-zxV/SsA+U4yte8051P4ECydjD/S+qeYtnaIyAs9tgHCqfguma/aAQDjo85A9Z6EKhBirHRJHXIgJUlffT4wdLg==}
- engines: {node: '>=12'}
+ data-view-buffer@1.0.2:
+ resolution: {integrity: sha512-EmKO5V3OLXh1rtK2wgXRansaK1/mtVdTUEiEI0W8RkvgT05kfxaH29PliLnpLP73yYO6142Q72QNa8Wx/A5CqQ==}
+ engines: {node: '>= 0.4'}
- d3-format@3.1.0:
- resolution: {integrity: sha512-YyUI6AEuY/Wpt8KWLgZHsIU86atmikuoOmCfommt0LYHiQSPjvX2AcFc38PX0CBpr2RCyZhjex+NS/LPOv6YqA==}
- engines: {node: '>=12'}
+ data-view-byte-length@1.0.2:
+ resolution: {integrity: sha512-tuhGbE6CfTM9+5ANGf+oQb72Ky/0+s3xKUpHvShfiz2RxMFgFPjsXuRLBVMtvMs15awe45SRb83D6wH4ew6wlQ==}
+ engines: {node: '>= 0.4'}
- d3-geo@3.1.1:
- resolution: {integrity: sha512-637ln3gXKXOwhalDzinUgY83KzNWZRKbYubaG+fGVuc/dxO64RRljtCTnf5ecMyE1RIdtqpkVcq0IbtU2S8j2Q==}
- engines: {node: '>=12'}
+ data-view-byte-offset@1.0.1:
+ resolution: {integrity: sha512-BS8PfmtDGnrgYdOonGZQdLZslWIeCGFP9tpan0hi1Co2Zr2NKADsvGYA8XxuG/4UWgJ6Cjtv+YJnB6MM69QGlQ==}
+ engines: {node: '>= 0.4'}
- d3-hierarchy@3.1.2:
- resolution: {integrity: sha512-FX/9frcub54beBdugHjDCdikxThEqjnR93Qt7PvQTOHxyiNCAlvMrHhclk3cD5VeAaq9fxmfRp+CnWw9rEMBuA==}
- engines: {node: '>=12'}
-
- d3-interpolate@3.0.1:
- resolution: {integrity: sha512-3bYs1rOD33uo8aqJfKP3JWPAibgw8Zm2+L9vBKEHJ2Rg+viTR7o5Mmv5mZcieN+FRYaAOWX5SJATX6k1PWz72g==}
- engines: {node: '>=12'}
-
- d3-path@1.0.9:
- resolution: {integrity: sha512-VLaYcn81dtHVTjEHd8B+pbe9yHWpXKZUC87PzoFmsFrJqgFwDe/qxfp5MlfsfM1V5E/iVt0MmEbWQ7FVIXh/bg==}
-
- d3-path@3.1.0:
- resolution: {integrity: sha512-p3KP5HCf/bvjBSSKuXid6Zqijx7wIfNW+J/maPs+iwR35at5JCbLUT0LzF1cnjbCHWhqzQTIN2Jpe8pRebIEFQ==}
- engines: {node: '>=12'}
-
- d3-polygon@3.0.1:
- resolution: {integrity: sha512-3vbA7vXYwfe1SYhED++fPUQlWSYTTGmFmQiany/gdbiWgU/iEyQzyymwL9SkJjFFuCS4902BSzewVGsHHmHtXg==}
- engines: {node: '>=12'}
-
- d3-quadtree@3.0.1:
- resolution: {integrity: sha512-04xDrxQTDTCFwP5H6hRhsRcb9xxv2RzkcsygFzmkSIOJy3PeRJP7sNk3VRIbKXcog561P9oU0/rVH6vDROAgUw==}
- engines: {node: '>=12'}
-
- d3-random@3.0.1:
- resolution: {integrity: sha512-FXMe9GfxTxqd5D6jFsQ+DJ8BJS4E/fT5mqqdjovykEB2oFbTMDVdg1MGFxfQW+FBOGoB++k8swBrgwSHT1cUXQ==}
- engines: {node: '>=12'}
-
- d3-sankey@0.12.3:
- resolution: {integrity: sha512-nQhsBRmM19Ax5xEIPLMY9ZmJ/cDvd1BG3UVvt5h3WRxKg5zGRbvnteTyWAbzeSvlh3tW7ZEmq4VwR5mB3tutmQ==}
-
- d3-scale-chromatic@3.1.0:
- resolution: {integrity: sha512-A3s5PWiZ9YCXFye1o246KoscMWqf8BsD9eRiJ3He7C9OBaxKhAd5TFCdEx/7VbKtxxTsu//1mMJFrEt572cEyQ==}
- engines: {node: '>=12'}
-
- d3-scale@4.0.2:
- resolution: {integrity: sha512-GZW464g1SH7ag3Y7hXjf8RoUuAFIqklOAq3MRl4OaWabTFJY9PN/E1YklhXLh+OQ3fM9yS2nOkCoS+WLZ6kvxQ==}
- engines: {node: '>=12'}
-
- d3-selection@3.0.0:
- resolution: {integrity: sha512-fmTRWbNMmsmWq6xJV8D19U/gw/bwrHfNXxrIN+HfZgnzqTHp9jOmKMhsTUjXOJnZOdZY9Q28y4yebKzqDKlxlQ==}
- engines: {node: '>=12'}
-
- d3-shape@1.3.7:
- resolution: {integrity: sha512-EUkvKjqPFUAZyOlhY5gzCxCeI0Aep04LwIRpsZ/mLFelJiUfnK56jo5JMDSE7yyP2kLSb6LtF+S5chMk7uqPqw==}
-
- d3-shape@3.2.0:
- resolution: {integrity: sha512-SaLBuwGm3MOViRq2ABk3eLoxwZELpH6zhl3FbAoJ7Vm1gofKx6El1Ib5z23NUEhF9AsGl7y+dzLe5Cw2AArGTA==}
- engines: {node: '>=12'}
-
- d3-time-format@4.1.0:
- resolution: {integrity: sha512-dJxPBlzC7NugB2PDLwo9Q8JiTR3M3e4/XANkreKSUxF8vvXKqm1Yfq4Q5dl8budlunRVlUUaDUgFt7eA8D6NLg==}
- engines: {node: '>=12'}
-
- d3-time@3.1.0:
- resolution: {integrity: sha512-VqKjzBLejbSMT4IgbmVgDjpkYrNWUYJnbCGo874u7MMKIWsILRX+OpX/gTk8MqjpT1A/c6HY2dCA77ZN0lkQ2Q==}
- engines: {node: '>=12'}
-
- d3-timer@3.0.1:
- resolution: {integrity: sha512-ndfJ/JxxMd3nw31uyKoY2naivF+r29V+Lc0svZxe1JvvIRmi8hUsrMvdOwgS1o6uBHmiz91geQ0ylPP0aj1VUA==}
- engines: {node: '>=12'}
-
- d3-transition@3.0.1:
- resolution: {integrity: sha512-ApKvfjsSR6tg06xrL434C0WydLr7JewBB3V+/39RMHsaXTOG0zmt/OAXeng5M5LBm0ojmxJrpomQVZ1aPvBL4w==}
- engines: {node: '>=12'}
+ debug@2.6.9:
+ resolution: {integrity: sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==}
peerDependencies:
- d3-selection: 2 - 3
+ supports-color: '*'
+ peerDependenciesMeta:
+ supports-color:
+ optional: true
- d3-zoom@3.0.0:
- resolution: {integrity: sha512-b8AmV3kfQaqWAuacbPuNbL6vahnOJflOhexLzMMNLga62+/nh0JzvJ0aO/5a5MVgUFGS7Hu1P9P03o3fJkDCyw==}
- engines: {node: '>=12'}
-
- d3@7.9.0:
- resolution: {integrity: sha512-e1U46jVP+w7Iut8Jt8ri1YsPOvFpg46k+K8TpCb0P+zjCkjkPnV7WzfDJzMHy1LnA+wj5pLT1wjO901gLXeEhA==}
- engines: {node: '>=12'}
-
- dagre-d3-es@7.0.13:
- resolution: {integrity: sha512-efEhnxpSuwpYOKRm/L5KbqoZmNNukHa/Flty4Wp62JRvgH2ojwVgPgdYyr4twpieZnyRDdIH7PY2mopX26+j2Q==}
-
- dayjs@1.11.19:
- resolution: {integrity: sha512-t5EcLVS6QPBNqM2z8fakk/NKel+Xzshgt8FFKAn+qwlD1pzZWxh0nVCrvFK7ZDb6XucZeF9z8C7CBWTRIVApAw==}
+ debug@4.3.7:
+ resolution: {integrity: sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==}
+ engines: {node: '>=6.0'}
+ peerDependencies:
+ supports-color: '*'
+ peerDependenciesMeta:
+ supports-color:
+ optional: true
debug@4.4.3:
resolution: {integrity: sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==}
@@ -949,211 +1330,1508 @@ packages:
supports-color:
optional: true
- defu@6.1.4:
- resolution: {integrity: sha512-mEQCMmwJu317oSz8CwdIOdwf3xMif1ttiM8LTufzc3g6kR+9Pe236twL8j3IYT1F7GfRgGcW6MWxzZjLIkuHIg==}
+ decode-bmp@0.2.1:
+ resolution: {integrity: sha512-NiOaGe+GN0KJqi2STf24hfMkFitDUaIoUU3eKvP/wAbLe8o6FuW5n/x7MHPR0HKvBokp6MQY/j7w8lewEeVCIA==}
+ engines: {node: '>=8.6.0'}
- delaunator@5.0.1:
- resolution: {integrity: sha512-8nvh+XBe96aCESrGOqMp/84b13H9cdKbG5P2ejQCh4d4sK9RL4371qou9drQjMhvnPmhWl5hnmqbEE0fXr9Xnw==}
+ decode-ico@0.4.1:
+ resolution: {integrity: sha512-69NZfbKIzux1vBOd31al3XnMnH+2mqDhEgLdpygErm4d60N+UwA5Sq5WFjmEDQzumgB9fElojGwWG0vybVfFmA==}
+ engines: {node: '>=8.6'}
+
+ decode-named-character-reference@1.3.0:
+ resolution: {integrity: sha512-GtpQYB283KrPp6nRw50q3U9/VfOutZOe103qlN7BPP6Ad27xYnOIWv4lPzo8HCAL+mMZofJ9KEy30fq6MfaK6Q==}
+
+ decompress-response@6.0.0:
+ resolution: {integrity: sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==}
+ engines: {node: '>=10'}
+
+ defer-to-connect@2.0.1:
+ resolution: {integrity: sha512-4tvttepXG1VaYGrRibk5EwJd1t4udunSOVMdLSAL6mId1ix438oPwPZMALY41FCijukO1L0twNcGsdzS7dHgDg==}
+ engines: {node: '>=10'}
+
+ define-data-property@1.1.4:
+ resolution: {integrity: sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==}
+ engines: {node: '>= 0.4'}
+
+ define-lazy-prop@2.0.0:
+ resolution: {integrity: sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==}
+ engines: {node: '>=8'}
+
+ define-properties@1.2.1:
+ resolution: {integrity: sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==}
+ engines: {node: '>= 0.4'}
+
+ degenerator@5.0.1:
+ resolution: {integrity: sha512-TllpMR/t0M5sqCXfj85i4XaAzxmS5tVA16dqvdkMwGmzI+dXLXnw3J+3Vdv7VKw+ThlTMboK6i9rnZ6Nntj5CQ==}
+ engines: {node: '>= 14'}
+
+ delayed-stream@1.0.0:
+ resolution: {integrity: sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==}
+ engines: {node: '>=0.4.0'}
+
+ depd@2.0.0:
+ resolution: {integrity: sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==}
+ engines: {node: '>= 0.8'}
+
+ dependency-graph@0.11.0:
+ resolution: {integrity: sha512-JeMq7fEshyepOWDfcfHK06N3MhyPhz++vtqWhMT5O9A3K42rdsEDpfdVqjaqaAhsw6a+ZqeDvQVtD0hFHQWrzg==}
+ engines: {node: '>= 0.6.0'}
dequal@2.0.3:
resolution: {integrity: sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==}
engines: {node: '>=6'}
+ destroy@1.2.0:
+ resolution: {integrity: sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==}
+ engines: {node: '>= 0.8', npm: 1.2.8000 || >= 1.4.16}
+
+ detect-libc@2.1.2:
+ resolution: {integrity: sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==}
+ engines: {node: '>=8'}
+
+ detect-node-es@1.1.0:
+ resolution: {integrity: sha512-ypdmJU/TbBby2Dxibuv7ZLW3Bs1QEmM7nHjEANfohJLvE0XVujisn1qPJcZxg+qDucsr+bP6fLD1rPS3AhJ7EQ==}
+
+ detect-port@1.5.1:
+ resolution: {integrity: sha512-aBzdj76lueB6uUst5iAs7+0H/oOjqI5D16XUWxlWMIMROhcM0rfsNVk93zTngq1dDNpoXRr++Sus7ETAExppAQ==}
+ hasBin: true
+
devlop@1.1.0:
resolution: {integrity: sha512-RWmIqhcFf1lRYBvNmr7qTNuyCt/7/ns2jbpp1+PalgE/rDQcBT0fioSMUpJ93irlUhC5hrg4cYqe6U+0ImW0rA==}
- dompurify@3.3.0:
- resolution: {integrity: sha512-r+f6MYR1gGN1eJv0TVQbhA7if/U7P87cdPl3HN5rikqaBSBxLiCb/b9O+2eG0cxz0ghyU+mU1QkbsOwERMYlWQ==}
+ devtools-protocol@0.0.1312386:
+ resolution: {integrity: sha512-DPnhUXvmvKT2dFA/j7B+riVLUt9Q6RKJlcppojL5CoRywJJKLDYnRlw0gTFKfgDPHP5E04UoB71SxoJlVZy8FA==}
- emoji-regex-xs@1.0.0:
- resolution: {integrity: sha512-LRlerrMYoIDrT6jgpeZ2YYl/L8EulRTt5hQcYjy5AInh7HWXKimpqx68aknBFpGL2+/IcogTcaydJEgaTmOpDg==}
+ didyoumean@1.2.2:
+ resolution: {integrity: sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==}
- entities@4.5.0:
- resolution: {integrity: sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==}
+ dlv@1.1.3:
+ resolution: {integrity: sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==}
+
+ dns-packet@5.6.1:
+ resolution: {integrity: sha512-l4gcSouhcgIKRvyy99RNVOgxXiicE+2jZoNmaNmZ6JXiGajBOJAesk1OBlJuM5k2c+eudGdLxDqXuPCKIj6kpw==}
+ engines: {node: '>=6'}
+
+ dns-socket@4.2.2:
+ resolution: {integrity: sha512-BDeBd8najI4/lS00HSKpdFia+OvUMytaVjfzR9n5Lq8MlZRSvtbI+uLtx1+XmQFls5wFU9dssccTmQQ6nfpjdg==}
+ engines: {node: '>=6'}
+
+ dunder-proto@1.0.1:
+ resolution: {integrity: sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==}
+ engines: {node: '>= 0.4'}
+
+ ee-first@1.1.1:
+ resolution: {integrity: sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==}
+
+ emoji-regex@10.6.0:
+ resolution: {integrity: sha512-toUI84YS5YmxW219erniWD0CIVOo46xGKColeNQRgOzDorgBi1v4D71/OFzgD9GO2UGKIv1C3Sp8DAn0+j5w7A==}
+
+ emoji-regex@8.0.0:
+ resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==}
+
+ encodeurl@1.0.2:
+ resolution: {integrity: sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==}
+ engines: {node: '>= 0.8'}
+
+ end-of-stream@1.4.5:
+ resolution: {integrity: sha512-ooEGc6HP26xXq/N+GCGOT0JKCLDGrq2bQUZrQ7gyrJiZANJ/8YDTxTpQBXGMn+WbIQXNVpyWymm7KYVICQnyOg==}
+
+ engine.io-parser@5.2.3:
+ resolution: {integrity: sha512-HqD3yTBfnBxIrbnM1DoD6Pcq8NECnh8d4As1Qgh0z5Gg3jRRIqijury0CL3ghu/edArpUYiYqQiDUQBIs4np3Q==}
+ engines: {node: '>=10.0.0'}
+
+ engine.io@6.5.5:
+ resolution: {integrity: sha512-C5Pn8Wk+1vKBoHghJODM63yk8MvrO9EWZUfkAt5HAqIgPE4/8FF0PEGHXtEd40l223+cE5ABWuPzm38PHFXfMA==}
+ engines: {node: '>=10.2.0'}
+
+ entities@6.0.1:
+ resolution: {integrity: sha512-aN97NXWF6AWBTahfVOIrB/NShkzi5H7F9r1s9mD3cDj4Ko5f2qhhVoYMibXF7GlLveb/D2ioWay8lxI97Ven3g==}
engines: {node: '>=0.12'}
- esbuild@0.21.5:
- resolution: {integrity: sha512-mg3OPMV4hXywwpoDxu3Qda5xCKQi+vCTZq8S9J/EpkhB2HzKXq4SNFZE3+NK93JYxc8VMSep+lOUSC/RVKaBqw==}
+ env-paths@2.2.1:
+ resolution: {integrity: sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==}
+ engines: {node: '>=6'}
+
+ environment@1.1.0:
+ resolution: {integrity: sha512-xUtoPkMggbz0MPyPiIWr1Kp4aeWJjDZ6SMvURhimjdZgsRuDplF5/s9hcgGhyXMhs+6vpnuoiZ2kFiu3FMnS8Q==}
+ engines: {node: '>=18'}
+
+ error-ex@1.3.4:
+ resolution: {integrity: sha512-sqQamAnR14VgCr1A618A3sGrygcpK+HEbenA/HiEAkkUwcZIIB/tgWqHFxWgOyDh4nB4JCRimh79dR5Ywc9MDQ==}
+
+ es-abstract@1.24.1:
+ resolution: {integrity: sha512-zHXBLhP+QehSSbsS9Pt23Gg964240DPd6QCf8WpkqEXxQ7fhdZzYsocOr5u7apWonsS5EjZDmTF+/slGMyasvw==}
+ engines: {node: '>= 0.4'}
+
+ es-aggregate-error@1.0.14:
+ resolution: {integrity: sha512-3YxX6rVb07B5TV11AV5wsL7nQCHXNwoHPsQC8S4AmBiqYhyNCJ5BRKXkXyDJvs8QzXN20NgRtxe3dEEQD9NLHA==}
+ engines: {node: '>= 0.4'}
+
+ es-define-property@1.0.1:
+ resolution: {integrity: sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==}
+ engines: {node: '>= 0.4'}
+
+ es-errors@1.3.0:
+ resolution: {integrity: sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==}
+ engines: {node: '>= 0.4'}
+
+ es-object-atoms@1.1.1:
+ resolution: {integrity: sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==}
+ engines: {node: '>= 0.4'}
+
+ es-set-tostringtag@2.1.0:
+ resolution: {integrity: sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==}
+ engines: {node: '>= 0.4'}
+
+ es-to-primitive@1.3.0:
+ resolution: {integrity: sha512-w+5mJ3GuFL+NjVtJlvydShqE1eN3h3PbI7/5LAsYJP/2qtuMXjfL2LpHSRqo4b4eSF5K/DH1JXKUAHSB2UW50g==}
+ engines: {node: '>= 0.4'}
+
+ es-toolkit@1.44.0:
+ resolution: {integrity: sha512-6penXeZalaV88MM3cGkFZZfOoLGWshWWfdy0tWw/RlVVyhvMaWSBTOvXNeiW3e5FwdS5ePW0LGEu17zT139ktg==}
+
+ esast-util-from-estree@2.0.0:
+ resolution: {integrity: sha512-4CyanoAudUSBAn5K13H4JhsMH6L9ZP7XbLVe/dKybkxMO7eDyLsT8UHl9TRNrU2Gr9nz+FovfSIjuXWJ81uVwQ==}
+
+ esast-util-from-js@2.0.1:
+ resolution: {integrity: sha512-8Ja+rNJ0Lt56Pcf3TAmpBZjmx8ZcK5Ts4cAzIOjsjevg9oSXJnl6SUQ2EevU8tv3h6ZLWmoKL5H4fgWvdvfETw==}
+
+ escalade@3.2.0:
+ resolution: {integrity: sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==}
+ engines: {node: '>=6'}
+
+ escape-html@1.0.3:
+ resolution: {integrity: sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==}
+
+ escape-string-regexp@2.0.0:
+ resolution: {integrity: sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==}
+ engines: {node: '>=8'}
+
+ escape-string-regexp@5.0.0:
+ resolution: {integrity: sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==}
engines: {node: '>=12'}
+
+ escodegen@2.1.0:
+ resolution: {integrity: sha512-2NlIDTwUWJN0mRPQOdtQBzbUHvdGY2P1VXSyU83Q3xKxM7WHX2Ql8dKq782Q9TgQUNOLEzEYu9bzLNj1q88I5w==}
+ engines: {node: '>=6.0'}
hasBin: true
- estree-walker@2.0.2:
- resolution: {integrity: sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==}
+ esprima@4.0.1:
+ resolution: {integrity: sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==}
+ engines: {node: '>=4'}
+ hasBin: true
- exsolve@1.0.7:
- resolution: {integrity: sha512-VO5fQUzZtI6C+vx4w/4BWJpg3s/5l+6pRQEHzFRM8WFi4XffSP1Z+4qi7GbjWbvRQEbdIco5mIMq+zX4rPuLrw==}
+ estraverse@5.3.0:
+ resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==}
+ engines: {node: '>=4.0'}
- focus-trap@7.6.6:
- resolution: {integrity: sha512-v/Z8bvMCajtx4mEXmOo7QEsIzlIOqRXTIwgUfsFOF9gEsespdbD0AkPIka1bSXZ8Y8oZ+2IVDQZePkTfEHZl7Q==}
+ estree-util-attach-comments@3.0.0:
+ resolution: {integrity: sha512-cKUwm/HUcTDsYh/9FgnuFqpfquUbwIqwKM26BVCGDPVgvaCl/nDCCjUfiLlx6lsEZ3Z4RFxNbOQ60pkaEwFxGw==}
+
+ estree-util-build-jsx@3.0.1:
+ resolution: {integrity: sha512-8U5eiL6BTrPxp/CHbs2yMgP8ftMhR5ww1eIKoWRMlqvltHF8fZn5LRDvTKuxD3DUn+shRbLGqXemcP51oFCsGQ==}
+
+ estree-util-is-identifier-name@3.0.0:
+ resolution: {integrity: sha512-hFtqIDZTIUZ9BXLb8y4pYGyk6+wekIivNVTcmvk8NoOh+VeRn5y6cEHzbURrWbfp1fIqdVipilzj+lfaadNZmg==}
+
+ estree-util-scope@1.0.0:
+ resolution: {integrity: sha512-2CAASclonf+JFWBNJPndcOpA8EMJwa0Q8LUFJEKqXLW6+qBvbFZuF5gItbQOs/umBUkjviCSDCbBwU2cXbmrhQ==}
+
+ estree-util-to-js@2.0.0:
+ resolution: {integrity: sha512-WDF+xj5rRWmD5tj6bIqRi6CkLIXbbNQUcxQHzGysQzvHmdYG2G7p/Tf0J0gpxGgkeMZNTIjT/AoSvC9Xehcgdg==}
+
+ estree-util-visit@2.0.0:
+ resolution: {integrity: sha512-m5KgiH85xAhhW8Wta0vShLcUvOsh3LLPI2YVwcbio1l7E09NTLL1EyMZFM1OyWowoH0skScNbhOPl4kcBgzTww==}
+
+ estree-walker@3.0.3:
+ resolution: {integrity: sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==}
+
+ esutils@2.0.3:
+ resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==}
+ engines: {node: '>=0.10.0'}
+
+ etag@1.8.1:
+ resolution: {integrity: sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==}
+ engines: {node: '>= 0.6'}
+
+ event-target-shim@5.0.1:
+ resolution: {integrity: sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==}
+ engines: {node: '>=6'}
+
+ events-universal@1.0.1:
+ resolution: {integrity: sha512-LUd5euvbMLpwOF8m6ivPCbhQeSiYVNb8Vs0fQ8QjXo0JTkEHpz8pxdQf0gStltaPpw0Cca8b39KxvK9cfKRiAw==}
+
+ express@4.18.2:
+ resolution: {integrity: sha512-5/PsL6iGPdfQ/lKM1UuielYgv3BUoJfz1aUwU9vHZ+J7gyvwdQXFEBIEIaxeGf0GIcreATNyBExtalisDbuMqQ==}
+ engines: {node: '>= 0.10.0'}
+
+ extend@3.0.2:
+ resolution: {integrity: sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==}
+
+ extract-zip@2.0.1:
+ resolution: {integrity: sha512-GDhU9ntwuKyGXdZBUgTIe+vXnWj0fppUEtMDL0+idd5Sta8TGpHssn/eusA9mrPr9qNDym6SxAYZjNvCn/9RBg==}
+ engines: {node: '>= 10.17.0'}
+ hasBin: true
+
+ fast-deep-equal@3.1.3:
+ resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==}
+
+ fast-fifo@1.3.2:
+ resolution: {integrity: sha512-/d9sfos4yxzpwkDkuN7k2SqFKtYNmCTzgfEpz82x34IM9/zc8KGxQoXg1liNC/izpRM/MBdt44Nmx41ZWqk+FQ==}
+
+ fast-glob@3.3.3:
+ resolution: {integrity: sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==}
+ engines: {node: '>=8.6.0'}
+
+ fast-memoize@2.5.2:
+ resolution: {integrity: sha512-Ue0LwpDYErFbmNnZSF0UH6eImUwDmogUO1jyE+JbN2gsQz/jICm1Ve7t9QT0rNSsfJt+Hs4/S3GnsDVjL4HVrw==}
+
+ fast-uri@3.1.0:
+ resolution: {integrity: sha512-iPeeDKJSWf4IEOasVVrknXpaBV0IApz/gp7S2bb7Z4Lljbl2MGJRqInZiUrQwV16cpzw/D3S5j5Julj/gT52AA==}
+
+ fastq@1.20.1:
+ resolution: {integrity: sha512-GGToxJ/w1x32s/D2EKND7kTil4n8OVk/9mycTc4VDza13lOvpUZTGX3mFSCtV9ksdGBVzvsyAVLM6mHFThxXxw==}
+
+ fault@2.0.1:
+ resolution: {integrity: sha512-WtySTkS4OKev5JtpHXnib4Gxiurzh5NCGvWrFaZ34m6JehfTUhKZvn9njTfw48t6JumVQOmrKqpmGcdwxnhqBQ==}
+
+ favicons@7.2.0:
+ resolution: {integrity: sha512-k/2rVBRIRzOeom3wI9jBPaSEvoTSQEW4iM0EveBmBBKFxO8mSyyRWtDlfC3VnEfu0avmjrMzy8/ZFPSe6F71Hw==}
+ engines: {node: '>=14.0.0'}
+
+ fd-slicer@1.1.0:
+ resolution: {integrity: sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g==}
+
+ fdir@6.5.0:
+ resolution: {integrity: sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==}
+ engines: {node: '>=12.0.0'}
+ peerDependencies:
+ picomatch: ^3 || ^4
+ peerDependenciesMeta:
+ picomatch:
+ optional: true
+
+ fill-range@7.1.1:
+ resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==}
+ engines: {node: '>=8'}
+
+ finalhandler@1.2.0:
+ resolution: {integrity: sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==}
+ engines: {node: '>= 0.8'}
+
+ follow-redirects@1.15.11:
+ resolution: {integrity: sha512-deG2P0JfjrTxl50XGCDyfI97ZGVCxIpfKYmfyrQ54n5FO/0gfIES8C/Psl6kWVDolizcaaxZJnTS0QSMxvnsBQ==}
+ engines: {node: '>=4.0'}
+ peerDependencies:
+ debug: '*'
+ peerDependenciesMeta:
+ debug:
+ optional: true
+
+ for-each@0.3.5:
+ resolution: {integrity: sha512-dKx12eRCVIzqCxFGplyFKJMPvLEWgmNtUrpTiJIR5u97zEhRG8ySrtboPHZXx7daLxQVrl643cTzbab2tkQjxg==}
+ engines: {node: '>= 0.4'}
+
+ form-data-encoder@2.1.4:
+ resolution: {integrity: sha512-yDYSgNMraqvnxiEXO4hi88+YZxaHC6QKzb5N84iRCTDeRO7ZALpir/lVmf/uXUhnwUr2O4HU8s/n6x+yNjQkHw==}
+ engines: {node: '>= 14.17'}
+
+ form-data@4.0.5:
+ resolution: {integrity: sha512-8RipRLol37bNs2bhoV67fiTEvdTrbMUYcFTiy3+wuuOnUog2QBHCZWXDRijWQfAkhBj2Uf5UnVaiWwA5vdd82w==}
+ engines: {node: '>= 6'}
+
+ format@0.2.2:
+ resolution: {integrity: sha512-wzsgA6WOq+09wrU1tsJ09udeR/YZRaeArL9e1wPbFg3GG2yDnC2ldKpxs4xunpFF9DgqCqOIra3bc1HWrJ37Ww==}
+ engines: {node: '>=0.4.x'}
+
+ forwarded@0.2.0:
+ resolution: {integrity: sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==}
+ engines: {node: '>= 0.6'}
+
+ fresh@0.5.2:
+ resolution: {integrity: sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==}
+ engines: {node: '>= 0.6'}
+
+ front-matter@4.0.2:
+ resolution: {integrity: sha512-I8ZuJ/qG92NWX8i5x1Y8qyj3vizhXS31OxjKDu3LKP+7/qBgfIKValiZIEwoVoJKUHlhWtYrktkxV1XsX+pPlg==}
+
+ fs-extra@11.1.0:
+ resolution: {integrity: sha512-0rcTq621PD5jM/e0a3EJoGC/1TC5ZBCERW82LQuwfGnCa1V8w7dpYH1yNu+SLb6E5dkeCBzKEyLGlFrnr+dUyw==}
+ engines: {node: '>=14.14'}
+
+ fs-extra@11.1.1:
+ resolution: {integrity: sha512-MGIE4HOvQCeUCzmlHs0vXpih4ysz4wg9qiSAu6cd42lVwPbTM1TjV7RusoyQqMmk/95gdQZX72u+YW+c3eEpFQ==}
+ engines: {node: '>=14.14'}
+
+ fs-extra@11.2.0:
+ resolution: {integrity: sha512-PmDi3uwK5nFuXh7XDTlVnS17xJS7vW36is2+w3xcv8SVxiB4NyATf4ctkVY5bkSjX0Y4nbvZCq1/EjtEyr9ktw==}
+ engines: {node: '>=14.14'}
+
+ fs-minipass@2.1.0:
+ resolution: {integrity: sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==}
+ engines: {node: '>= 8'}
fsevents@2.3.3:
resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==}
engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0}
os: [darwin]
- globals@15.15.0:
- resolution: {integrity: sha512-7ACyT3wmyp3I61S4fG682L0VA2RGD9otkqGJIwNUMF1SWUombIIk+af1unuDYgMm082aHYwD+mzJvv9Iu8dsgg==}
+ function-bind@1.1.2:
+ resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==}
+
+ function.prototype.name@1.1.8:
+ resolution: {integrity: sha512-e5iwyodOHhbMr/yNrc7fDYG4qlbIvI5gajyzPnb5TCwyhjApznQh1BMFou9b30SevY43gCJKXycoCBjMbsuW0Q==}
+ engines: {node: '>= 0.4'}
+
+ functions-have-names@1.2.3:
+ resolution: {integrity: sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==}
+
+ gcd@0.0.1:
+ resolution: {integrity: sha512-VNx3UEGr+ILJTiMs1+xc5SX1cMgJCrXezKPa003APUWNqQqaF6n25W8VcR7nHN6yRWbvvUTwCpZCFJeWC2kXlw==}
+
+ generator-function@2.0.1:
+ resolution: {integrity: sha512-SFdFmIJi+ybC0vjlHN0ZGVGHc3lgE0DxPAT0djjVg+kjOnSqclqmj0KQ7ykTOLP6YxoqOvuAODGdcHJn+43q3g==}
+ engines: {node: '>= 0.4'}
+
+ get-caller-file@2.0.5:
+ resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==}
+ engines: {node: 6.* || 8.* || >= 10.*}
+
+ get-east-asian-width@1.5.0:
+ resolution: {integrity: sha512-CQ+bEO+Tva/qlmw24dCejulK5pMzVnUOFOijVogd3KQs07HnRIgp8TGipvCCRT06xeYEbpbgwaCxglFyiuIcmA==}
engines: {node: '>=18'}
- hachure-fill@0.5.2:
- resolution: {integrity: sha512-3GKBOn+m2LX9iq+JC1064cSFprJY4jL1jCXTcpnfER5HYE2l/4EfWSGzkPa/ZDBmYI0ZOEj5VHV/eKnPGkHuOg==}
+ get-intrinsic@1.3.0:
+ resolution: {integrity: sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==}
+ engines: {node: '>= 0.4'}
+
+ get-nonce@1.0.1:
+ resolution: {integrity: sha512-FJhYRoDaiatfEkUK8HKlicmu/3SGFD51q3itKDGoSTysQJBnfOcxU5GxnhE1E6soB76MbT0MBtnKJuXyAx+96Q==}
+ engines: {node: '>=6'}
+
+ get-proto@1.0.1:
+ resolution: {integrity: sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==}
+ engines: {node: '>= 0.4'}
+
+ get-stream@5.2.0:
+ resolution: {integrity: sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==}
+ engines: {node: '>=8'}
+
+ get-stream@6.0.1:
+ resolution: {integrity: sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==}
+ engines: {node: '>=10'}
+
+ get-symbol-description@1.1.0:
+ resolution: {integrity: sha512-w9UMqWwJxHNOvoNzSJ2oPF5wvYcvP7jUvYzhp67yEhTi17ZDBBC1z9pTdGuzjD+EFIqLSYRweZjqfiPzQ06Ebg==}
+ engines: {node: '>= 0.4'}
+
+ get-uri@6.0.5:
+ resolution: {integrity: sha512-b1O07XYq8eRuVzBNgJLstU6FYc1tS6wnMtF1I1D9lE8LxZSOGZ7LhxN54yPP6mGw5f2CkXY2BQUL9Fx41qvcIg==}
+ engines: {node: '>= 14'}
+
+ glob-parent@5.1.2:
+ resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==}
+ engines: {node: '>= 6'}
+
+ glob-parent@6.0.2:
+ resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==}
+ engines: {node: '>=10.13.0'}
+
+ globalthis@1.0.4:
+ resolution: {integrity: sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==}
+ engines: {node: '>= 0.4'}
+
+ gopd@1.2.0:
+ resolution: {integrity: sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==}
+ engines: {node: '>= 0.4'}
+
+ got@12.6.1:
+ resolution: {integrity: sha512-mThBblvlAF1d4O5oqyvN+ZxLAYwIJK7bpMxgYqPD9okW0C3qm5FFn7k811QrcuEBwaogR3ngOFoCfs6mRv7teQ==}
+ engines: {node: '>=14.16'}
+
+ got@13.0.0:
+ resolution: {integrity: sha512-XfBk1CxOOScDcMr9O1yKkNaQyy865NbYs+F7dr4H0LZMVgCj2Le59k6PqbNHoL5ToeaEQUYh6c6yMfVcc6SJxA==}
+ engines: {node: '>=16'}
+
+ graceful-fs@4.2.11:
+ resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==}
+
+ has-bigints@1.1.0:
+ resolution: {integrity: sha512-R3pbpkcIqv2Pm3dUwgjclDRVmWpTJW2DcMzcIhEXEx1oh/CEMObMm3KLmRJOdvhM7o4uQBnwr8pzRK2sJWIqfg==}
+ engines: {node: '>= 0.4'}
+
+ has-property-descriptors@1.0.2:
+ resolution: {integrity: sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==}
+
+ has-proto@1.2.0:
+ resolution: {integrity: sha512-KIL7eQPfHQRC8+XluaIw7BHUwwqL19bQn4hzNgdr+1wXoU0KKj6rufu47lhY7KbJR2C6T6+PfyN0Ea7wkSS+qQ==}
+ engines: {node: '>= 0.4'}
+
+ has-symbols@1.1.0:
+ resolution: {integrity: sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==}
+ engines: {node: '>= 0.4'}
+
+ has-tostringtag@1.0.2:
+ resolution: {integrity: sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==}
+ engines: {node: '>= 0.4'}
+
+ hasown@2.0.2:
+ resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==}
+ engines: {node: '>= 0.4'}
+
+ hast-util-embedded@3.0.0:
+ resolution: {integrity: sha512-naH8sld4Pe2ep03qqULEtvYr7EjrLK2QHY8KJR6RJkTUjPGObe1vnx585uzem2hGra+s1q08DZZpfgDVYRbaXA==}
+
+ hast-util-from-dom@5.0.1:
+ resolution: {integrity: sha512-N+LqofjR2zuzTjCPzyDUdSshy4Ma6li7p/c3pA78uTwzFgENbgbUrm2ugwsOdcjI1muO+o6Dgzp9p8WHtn/39Q==}
+
+ hast-util-from-html-isomorphic@2.0.0:
+ resolution: {integrity: sha512-zJfpXq44yff2hmE0XmwEOzdWin5xwH+QIhMLOScpX91e/NSGPsAzNCvLQDIEPyO2TXi+lBmU6hjLIhV8MwP2kw==}
+
+ hast-util-from-html@2.0.3:
+ resolution: {integrity: sha512-CUSRHXyKjzHov8yKsQjGOElXy/3EKpyX56ELnkHH34vDVw1N1XSQ1ZcAvTyAPtGqLTuKP/uxM+aLkSPqF/EtMw==}
+
+ hast-util-from-parse5@8.0.3:
+ resolution: {integrity: sha512-3kxEVkEKt0zvcZ3hCRYI8rqrgwtlIOFMWkbclACvjlDw8Li9S2hk/d51OI0nr/gIpdMHNepwgOKqZ/sy0Clpyg==}
+
+ hast-util-has-property@3.0.0:
+ resolution: {integrity: sha512-MNilsvEKLFpV604hwfhVStK0usFY/QmM5zX16bo7EjnAEGofr5YyI37kzopBlZJkHD4t887i+q/C8/tr5Q94cA==}
+
+ hast-util-is-body-ok-link@3.0.1:
+ resolution: {integrity: sha512-0qpnzOBLztXHbHQenVB8uNuxTnm/QBFUOmdOSsEn7GnBtyY07+ENTWVFBAnXd/zEgd9/SUG3lRY7hSIBWRgGpQ==}
+
+ hast-util-is-element@3.0.0:
+ resolution: {integrity: sha512-Val9mnv2IWpLbNPqc/pUem+a7Ipj2aHacCwgNfTiK0vJKl0LF+4Ba4+v1oPHFpf3bLYmreq0/l3Gud9S5OH42g==}
+
+ hast-util-minify-whitespace@1.0.1:
+ resolution: {integrity: sha512-L96fPOVpnclQE0xzdWb/D12VT5FabA7SnZOUMtL1DbXmYiHJMXZvFkIZfiMmTCNJHUeO2K9UYNXoVyfz+QHuOw==}
+
+ hast-util-parse-selector@4.0.0:
+ resolution: {integrity: sha512-wkQCkSYoOGCRKERFWcxMVMOcYE2K1AaNLU8DXS9arxnLOUEWbOXKXiJUNzEpqZ3JOKpnha3jkFrumEjVliDe7A==}
+
+ hast-util-phrasing@3.0.1:
+ resolution: {integrity: sha512-6h60VfI3uBQUxHqTyMymMZnEbNl1XmEGtOxxKYL7stY2o601COo62AWAYBQR9lZbYXYSBoxag8UpPRXK+9fqSQ==}
+
+ hast-util-to-estree@3.1.3:
+ resolution: {integrity: sha512-48+B/rJWAp0jamNbAAf9M7Uf//UVqAoMmgXhBdxTDJLGKY+LRnZ99qcG+Qjl5HfMpYNzS5v4EAwVEF34LeAj7w==}
+
+ hast-util-to-html@9.0.4:
+ resolution: {integrity: sha512-wxQzXtdbhiwGAUKrnQJXlOPmHnEehzphwkK7aluUPQ+lEc1xefC8pblMgpp2w5ldBTEfveRIrADcrhGIWrlTDA==}
hast-util-to-html@9.0.5:
resolution: {integrity: sha512-OguPdidb+fbHQSU4Q4ZiLKnzWo8Wwsf5bZfbvu7//a9oTYoqD/fWpe96NuHkoS9h0ccGOTe0C4NGXdtS0iObOw==}
+ hast-util-to-jsx-runtime@2.3.6:
+ resolution: {integrity: sha512-zl6s8LwNyo1P9uw+XJGvZtdFF1GdAkOg8ujOw+4Pyb76874fLps4ueHXDhXWdk6YHQ6OgUtinliG7RsYvCbbBg==}
+
+ hast-util-to-mdast@10.1.0:
+ resolution: {integrity: sha512-DsL/SvCK9V7+vfc6SLQ+vKIyBDXTk2KLSbfBYkH4zeF/uR1yBajHRhkzuaUSGOB1WJSTieJBdHwxlC+HLKvZZw==}
+
+ hast-util-to-string@3.0.1:
+ resolution: {integrity: sha512-XelQVTDWvqcl3axRfI0xSeoVKzyIFPwsAGSLIsKdJKQMXDYJS4WYrBNF/8J7RdhIcFI2BOHgAifggsvsxp/3+A==}
+
+ hast-util-to-text@4.0.2:
+ resolution: {integrity: sha512-KK6y/BN8lbaq654j7JgBydev7wuNMcID54lkRav1P0CaE1e47P72AWWPiGKXTJU271ooYzcvTAn/Zt0REnvc7A==}
+
hast-util-whitespace@3.0.0:
resolution: {integrity: sha512-88JUN06ipLwsnv+dVn+OIYOvAuvBMy/Qoi6O7mQHxdPXpjy+Cd6xRkWwux7DKO+4sYILtLBRIKgsdpS2gQc7qw==}
- hookable@5.5.3:
- resolution: {integrity: sha512-Yc+BQe8SvoXH1643Qez1zqLRmbA5rCL+sSmk6TVos0LWVfNIB7PGncdlId77WzLGSIB5KaWgTaNTs2lNVEI6VQ==}
+ hastscript@9.0.1:
+ resolution: {integrity: sha512-g7df9rMFX/SPi34tyGCyUBREQoKkapwdY/T04Qn9TDWfHhAYt4/I0gMVirzK5wEzeUqIjEB+LXC/ypb7Aqno5w==}
+
+ hex-rgb@5.0.0:
+ resolution: {integrity: sha512-NQO+lgVUCtHxZ792FodgW0zflK+ozS9X9dwGp9XvvmPlH7pyxd588cn24TD3rmPm/N0AIRXF10Otah8yKqGw4w==}
+ engines: {node: '>=12'}
html-void-elements@3.0.0:
resolution: {integrity: sha512-bEqo66MRXsUGxWHV5IP0PUiAWwoEjba4VCzg0LjFJBpchPaTfyfCKTG6bc5F8ucKec3q5y6qOdGyYTSBEvhCrg==}
- iconv-lite@0.6.3:
- resolution: {integrity: sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==}
+ http-cache-semantics@4.2.0:
+ resolution: {integrity: sha512-dTxcvPXqPvXBQpq5dUr6mEMJX4oIEFv6bwom3FDwKRDsuIjjJGANqhBuoAn9c1RQJIdAKav33ED65E2ys+87QQ==}
+
+ http-errors@2.0.0:
+ resolution: {integrity: sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==}
+ engines: {node: '>= 0.8'}
+
+ http-proxy-agent@7.0.2:
+ resolution: {integrity: sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig==}
+ engines: {node: '>= 14'}
+
+ http2-wrapper@2.2.1:
+ resolution: {integrity: sha512-V5nVw1PAOgfI3Lmeaj2Exmeg7fenjhRUgz1lPSezy1CuhPYbgQtbQj4jZfEAEMlaL+vupsvhjqCyjzob0yxsmQ==}
+ engines: {node: '>=10.19.0'}
+
+ https-proxy-agent@7.0.6:
+ resolution: {integrity: sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw==}
+ engines: {node: '>= 14'}
+
+ ico-endec@0.1.6:
+ resolution: {integrity: sha512-ZdLU38ZoED3g1j3iEyzcQj+wAkY2xfWNkymszfJPoxucIUhK7NayQ+/C4Kv0nDFMIsbtbEHldv3V8PU494/ueQ==}
+
+ iconv-lite@0.4.24:
+ resolution: {integrity: sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==}
engines: {node: '>=0.10.0'}
- internmap@1.0.1:
- resolution: {integrity: sha512-lDB5YccMydFBtasVtxnZ3MRBHuaoE8GKsppq+EchKL2U4nK/DmEpPHNH8MZe5HkMtpSiTSOZwfN0tzYjO/lJEw==}
+ iconv-lite@0.7.2:
+ resolution: {integrity: sha512-im9DjEDQ55s9fL4EYzOAv0yMqmMBSZp6G0VvFyTMPKWxiSBHUj9NW/qqLmXUwXrrM7AvqSlTCfvqRb0cM8yYqw==}
+ engines: {node: '>=0.10.0'}
- internmap@2.0.3:
- resolution: {integrity: sha512-5Hh7Y1wQbvY5ooGgPbDaL5iYLAPzMTUrjMulskHLH6wnv/A+1q5rgEaiuqEjB+oxGXIVZs1FF+R/KPN3ZSQYYg==}
+ ieee754@1.2.1:
+ resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==}
+
+ ignore@7.0.5:
+ resolution: {integrity: sha512-Hs59xBNfUIunMFgWAbGX5cq6893IbWg4KnrjbYwX3tx0ztorVgTDA6B2sxf8ejHJ4wz8BqGUMYlnzNBer5NvGg==}
+ engines: {node: '>= 4'}
+
+ immer@9.0.21:
+ resolution: {integrity: sha512-bc4NBHqOqSfRW7POMkHd51LvClaeMXpm8dx0e8oE2GORbq5aRK7Bxl4FyzVLdGtLmvLKL7BTDBG5ACQm4HWjTA==}
+
+ import-fresh@3.3.1:
+ resolution: {integrity: sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==}
+ engines: {node: '>=6'}
+
+ indent-string@5.0.0:
+ resolution: {integrity: sha512-m6FAo/spmsW2Ab2fU35JTYwtOKa2yAwXSwgjSv1TJzh4Mh7mC3lzAOVLBprb72XsTrgkEIsl7YrFNAiDiRhIGg==}
engines: {node: '>=12'}
- is-what@5.5.0:
- resolution: {integrity: sha512-oG7cgbmg5kLYae2N5IVd3jm2s+vldjxJzK1pcu9LfpGuQ93MQSzo0okvRna+7y5ifrD+20FE8FvjusyGaz14fw==}
+ inherits@2.0.4:
+ resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==}
+
+ ink-spinner@5.0.0:
+ resolution: {integrity: sha512-EYEasbEjkqLGyPOUc8hBJZNuC5GvXGMLu0w5gdTNskPc7Izc5vO3tdQEYnzvshucyGCBXc86ig0ujXPMWaQCdA==}
+ engines: {node: '>=14.16'}
+ peerDependencies:
+ ink: '>=4.0.0'
+ react: '>=18.0.0'
+
+ ink@6.3.0:
+ resolution: {integrity: sha512-2CbJAa7XeziZYe6pDS5RVLirRY28iSGMQuEV8jRU5NQsONQNfcR/BZHHc9vkMg2lGYTHTM2pskxC1YmY28p6bQ==}
+ engines: {node: '>=20'}
+ peerDependencies:
+ '@types/react': '>=19.0.0'
+ react: '>=19.0.0'
+ react-devtools-core: ^4.19.1
+ peerDependenciesMeta:
+ '@types/react':
+ optional: true
+ react-devtools-core:
+ optional: true
+
+ inline-style-parser@0.2.7:
+ resolution: {integrity: sha512-Nb2ctOyNR8DqQoR0OwRG95uNWIC0C1lCgf5Naz5H6Ji72KZ8OcFZLz2P5sNgwlyoJ8Yif11oMuYs5pBQa86csA==}
+
+ inquirer@12.3.0:
+ resolution: {integrity: sha512-3NixUXq+hM8ezj2wc7wC37b32/rHq1MwNZDYdvx+d6jokOD+r+i8Q4Pkylh9tISYP114A128LCX8RKhopC5RfQ==}
+ engines: {node: '>=18'}
+ peerDependencies:
+ '@types/node': '>=18'
+
+ internal-slot@1.1.0:
+ resolution: {integrity: sha512-4gd7VpWNQNB4UKKCFFVcp1AVv+FMOgs9NKzjHKusc8jTMhd5eL1NqQqOpE0KzMds804/yHlglp3uxgluOqAPLw==}
+ engines: {node: '>= 0.4'}
+
+ ip-address@10.1.0:
+ resolution: {integrity: sha512-XXADHxXmvT9+CRxhXg56LJovE+bmWnEWB78LB83VZTprKTmaC5QfruXocxzTZ2Kl0DNwKuBdlIhjL8LeY8Sf8Q==}
+ engines: {node: '>= 12'}
+
+ ip-regex@4.3.0:
+ resolution: {integrity: sha512-B9ZWJxHHOHUhUjCPrMpLD4xEq35bUTClHM1S6CBU5ixQnkZmwipwgc96vAd7AAGM9TGHvJR+Uss+/Ak6UphK+Q==}
+ engines: {node: '>=8'}
+
+ ipaddr.js@1.9.1:
+ resolution: {integrity: sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==}
+ engines: {node: '>= 0.10'}
+
+ is-alphabetical@2.0.1:
+ resolution: {integrity: sha512-FWyyY60MeTNyeSRpkM2Iry0G9hpr7/9kD40mD/cGQEuilcZYS4okz8SN2Q6rLCJ8gbCt6fN+rC+6tMGS99LaxQ==}
+
+ is-alphanumerical@2.0.1:
+ resolution: {integrity: sha512-hmbYhX/9MUMF5uh7tOXyK/n0ZvWpad5caBA17GsC6vyuCqaWliRG5K1qS9inmUhEMaOBIW7/whAnSwveW/LtZw==}
+
+ is-array-buffer@3.0.5:
+ resolution: {integrity: sha512-DDfANUiiG2wC1qawP66qlTugJeL5HyzMpfr8lLK+jMQirGzNod0B12cFB/9q838Ru27sBwfw78/rdoU7RERz6A==}
+ engines: {node: '>= 0.4'}
+
+ is-arrayish@0.2.1:
+ resolution: {integrity: sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==}
+
+ is-arrayish@0.3.4:
+ resolution: {integrity: sha512-m6UrgzFVUYawGBh1dUsWR5M2Clqic9RVXC/9f8ceNlv2IcO9j9J/z8UoCLPqtsPBFNzEpfR3xftohbfqDx8EQA==}
+
+ is-async-function@2.1.1:
+ resolution: {integrity: sha512-9dgM/cZBnNvjzaMYHVoxxfPj2QXt22Ev7SuuPrs+xav0ukGB0S6d4ydZdEiM48kLx5kDV+QBPrpVnFyefL8kkQ==}
+ engines: {node: '>= 0.4'}
+
+ is-bigint@1.1.0:
+ resolution: {integrity: sha512-n4ZT37wG78iz03xPRKJrHTdZbe3IicyucEtdRsV5yglwc3GyUfbAfpSeD0FJ41NbUNSt5wbhqfp1fS+BgnvDFQ==}
+ engines: {node: '>= 0.4'}
+
+ is-binary-path@2.1.0:
+ resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==}
+ engines: {node: '>=8'}
+
+ is-boolean-object@1.2.2:
+ resolution: {integrity: sha512-wa56o2/ElJMYqjCjGkXri7it5FbebW5usLw/nPmCMs5DeZ7eziSYZhSmPRn0txqeW4LnAmQQU7FgqLpsEFKM4A==}
+ engines: {node: '>= 0.4'}
+
+ is-callable@1.2.7:
+ resolution: {integrity: sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==}
+ engines: {node: '>= 0.4'}
+
+ is-core-module@2.16.1:
+ resolution: {integrity: sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==}
+ engines: {node: '>= 0.4'}
+
+ is-data-view@1.0.2:
+ resolution: {integrity: sha512-RKtWF8pGmS87i2D6gqQu/l7EYRlVdfzemCJN/P3UOs//x1QE7mfhvzHIApBTRf7axvT6DMGwSwBXYCT0nfB9xw==}
+ engines: {node: '>= 0.4'}
+
+ is-date-object@1.1.0:
+ resolution: {integrity: sha512-PwwhEakHVKTdRNVOw+/Gyh0+MzlCl4R6qKvkhuvLtPMggI1WAHt9sOwZxQLSGpUaDnrdyDsomoRgNnCfKNSXXg==}
+ engines: {node: '>= 0.4'}
+
+ is-decimal@2.0.1:
+ resolution: {integrity: sha512-AAB9hiomQs5DXWcRB1rqsxGUstbRroFOPPVAomNk/3XHR5JyEZChOyTWe2oayKnsSsr/kcGqF+z6yuH6HHpN0A==}
+
+ is-docker@2.2.1:
+ resolution: {integrity: sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==}
+ engines: {node: '>=8'}
+ hasBin: true
+
+ is-extglob@2.1.1:
+ resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==}
+ engines: {node: '>=0.10.0'}
+
+ is-finalizationregistry@1.1.1:
+ resolution: {integrity: sha512-1pC6N8qWJbWoPtEjgcL2xyhQOP491EQjeUo3qTKcmV8YSDDJrOepfG8pcC7h/QgnQHYSv0mJ3Z/ZWxmatVrysg==}
+ engines: {node: '>= 0.4'}
+
+ is-fullwidth-code-point@3.0.0:
+ resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==}
+ engines: {node: '>=8'}
+
+ is-fullwidth-code-point@4.0.0:
+ resolution: {integrity: sha512-O4L094N2/dZ7xqVdrXhh9r1KODPJpFms8B5sGdJLPy664AgvXsreZUyCQQNItZRDlYug4xStLjNp/sz3HvBowQ==}
+ engines: {node: '>=12'}
+
+ is-fullwidth-code-point@5.1.0:
+ resolution: {integrity: sha512-5XHYaSyiqADb4RnZ1Bdad6cPp8Toise4TzEjcOYDHZkTCbKgiUl7WTUCpNWHuxmDt91wnsZBc9xinNzopv3JMQ==}
engines: {node: '>=18'}
- katex@0.16.25:
- resolution: {integrity: sha512-woHRUZ/iF23GBP1dkDQMh1QBad9dmr8/PAwNA54VrSOVYgI12MAcE14TqnDdQOdzyEonGzMepYnqBMYdsoAr8Q==}
+ is-generator-function@1.1.2:
+ resolution: {integrity: sha512-upqt1SkGkODW9tsGNG5mtXTXtECizwtS2kA161M+gJPc1xdb/Ax629af6YrTwcOeQHbewrPNlE5Dx7kzvXTizA==}
+ engines: {node: '>= 0.4'}
+
+ is-glob@4.0.3:
+ resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==}
+ engines: {node: '>=0.10.0'}
+
+ is-hexadecimal@2.0.1:
+ resolution: {integrity: sha512-DgZQp241c8oO6cA1SbTEWiXeoxV42vlcJxgH+B3hi1AiqqKruZR3ZGF8In3fj4+/y/7rHvlOZLZtgJ/4ttYGZg==}
+
+ is-in-ci@2.0.0:
+ resolution: {integrity: sha512-cFeerHriAnhrQSbpAxL37W1wcJKUUX07HyLWZCW1URJT/ra3GyUTzBgUnh24TMVfNTV2Hij2HLxkPHFZfOZy5w==}
+ engines: {node: '>=20'}
hasBin: true
- khroma@2.1.0:
- resolution: {integrity: sha512-Ls993zuzfayK269Svk9hzpeGUKob/sIgZzyHYdjQoAdQetRKpOLj+k/QQQ/6Qi0Yz65mlROrfd+Ev+1+7dz9Kw==}
+ is-ip@3.1.0:
+ resolution: {integrity: sha512-35vd5necO7IitFPjd/YBeqwWnyDWbuLH9ZXQdMfDA8TEo7pv5X8yfrvVO3xbJbLUlERCMvf6X0hTUamQxCYJ9Q==}
+ engines: {node: '>=8'}
- kolorist@1.8.0:
- resolution: {integrity: sha512-Y+60/zizpJ3HRH8DCss+q95yr6145JXZo46OTpFvDZWLfRCE4qChOyk1b26nMaNpfHHgxagk9dXT5OP0Tfe+dQ==}
+ is-map@2.0.3:
+ resolution: {integrity: sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw==}
+ engines: {node: '>= 0.4'}
- langium@3.3.1:
- resolution: {integrity: sha512-QJv/h939gDpvT+9SiLVlY7tZC3xB2qK57v0J04Sh9wpMb6MP1q8gB21L3WIo8T5P1MSMg3Ep14L7KkDCFG3y4w==}
- engines: {node: '>=16.0.0'}
+ is-negative-zero@2.0.3:
+ resolution: {integrity: sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw==}
+ engines: {node: '>= 0.4'}
- layout-base@1.0.2:
- resolution: {integrity: sha512-8h2oVEZNktL4BH2JCOI90iD1yXwL6iNW7KcCKT2QZgQJR2vbqDsldCTPRU9NifTCqHZci57XvQQ15YTu+sTYPg==}
+ is-number-object@1.1.1:
+ resolution: {integrity: sha512-lZhclumE1G6VYD8VHe35wFaIif+CTy5SJIi5+3y4psDgWu4wPDoBhF8NxUOinEc7pHgiTsT6MaBb92rKhhD+Xw==}
+ engines: {node: '>= 0.4'}
- layout-base@2.0.1:
- resolution: {integrity: sha512-dp3s92+uNI1hWIpPGH3jK2kxE2lMjdXdr+DH8ynZHpd6PUlH6x6cbuXnoMmiNumznqaNO31xu9e79F0uuZ0JFg==}
+ is-number@7.0.0:
+ resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==}
+ engines: {node: '>=0.12.0'}
- local-pkg@1.1.2:
- resolution: {integrity: sha512-arhlxbFRmoQHl33a0Zkle/YWlmNwoyt6QNZEIJcqNbdrsix5Lvc4HyyI3EnwxTYlZYc32EbYrQ8SzEZ7dqgg9A==}
+ is-online@10.0.0:
+ resolution: {integrity: sha512-WCPdKwNDjXJJmUubf2VHLMDBkUZEtuOvpXUfUnUFbEnM6In9ByiScL4f4jKACz/fsb2qDkesFerW3snf/AYz3A==}
+ engines: {node: '>=14.16'}
+
+ is-plain-obj@4.1.0:
+ resolution: {integrity: sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==}
+ engines: {node: '>=12'}
+
+ is-regex@1.2.1:
+ resolution: {integrity: sha512-MjYsKHO5O7mCsmRGxWcLWheFqN9DJ/2TmngvjKXihe6efViPqc274+Fx/4fYj/r03+ESvBdTXK0V6tA3rgez1g==}
+ engines: {node: '>= 0.4'}
+
+ is-set@2.0.3:
+ resolution: {integrity: sha512-iPAjerrse27/ygGLxw+EBR9agv9Y6uLeYVJMu+QNCoouJ1/1ri0mGrcWpfCqFZuzzx3WjtwxG098X+n4OuRkPg==}
+ engines: {node: '>= 0.4'}
+
+ is-shared-array-buffer@1.0.4:
+ resolution: {integrity: sha512-ISWac8drv4ZGfwKl5slpHG9OwPNty4jOWPRIhBpxOoD+hqITiwuipOQ2bNthAzwA3B4fIjO4Nln74N0S9byq8A==}
+ engines: {node: '>= 0.4'}
+
+ is-string@1.1.1:
+ resolution: {integrity: sha512-BtEeSsoaQjlSPBemMQIrY1MY0uM6vnS1g5fmufYOtnxLGUZM2178PKbhsk7Ffv58IX+ZtcvoGwccYsh0PglkAA==}
+ engines: {node: '>= 0.4'}
+
+ is-symbol@1.1.1:
+ resolution: {integrity: sha512-9gGx6GTtCQM73BgmHQXfDmLtfjjTUDSyoxTCbp5WtoixAhfgsDirWIcVQ/IHpvI5Vgd5i/J5F7B9cN/WlVbC/w==}
+ engines: {node: '>= 0.4'}
+
+ is-typed-array@1.1.15:
+ resolution: {integrity: sha512-p3EcsicXjit7SaskXHs1hA91QxgTw46Fv6EFKKGS5DRFLD8yKnohjF3hxoju94b/OcMZoQukzpPpBE9uLVKzgQ==}
+ engines: {node: '>= 0.4'}
+
+ is-weakmap@2.0.2:
+ resolution: {integrity: sha512-K5pXYOm9wqY1RgjpL3YTkF39tni1XajUIkawTLUo9EZEVUFga5gSQJF8nNS7ZwJQ02y+1YCNYcMh+HIf1ZqE+w==}
+ engines: {node: '>= 0.4'}
+
+ is-weakref@1.1.1:
+ resolution: {integrity: sha512-6i9mGWSlqzNMEqpCp93KwRS1uUOodk2OJ6b+sq7ZPDSy2WuI5NFIxp/254TytR8ftefexkWn5xNiHUNpPOfSew==}
+ engines: {node: '>= 0.4'}
+
+ is-weakset@2.0.4:
+ resolution: {integrity: sha512-mfcwb6IzQyOKTs84CQMrOwW4gQcaTOAWJ0zzJCl2WSPDrWk/OzDaImWFH3djXhb24g4eudZfLRozAvPGw4d9hQ==}
+ engines: {node: '>= 0.4'}
+
+ is-wsl@2.2.0:
+ resolution: {integrity: sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==}
+ engines: {node: '>=8'}
+
+ isarray@2.0.5:
+ resolution: {integrity: sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==}
+
+ jiti@1.21.7:
+ resolution: {integrity: sha512-/imKNG4EbWNrVjoNC/1H5/9GFy+tqjGBHCaSsN+P2RnPqjsLmv6UD3Ej+Kj8nBWaRAwyk7kK5ZUc+OEatnTR3A==}
+ hasBin: true
+
+ js-tokens@4.0.0:
+ resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==}
+
+ js-yaml@3.14.2:
+ resolution: {integrity: sha512-PMSmkqxr106Xa156c2M265Z+FTrPl+oxd/rgOQy2tijQeK5TxQ43psO1ZCwhVOSdnn+RzkzlRz/eY4BgJBYVpg==}
+ hasBin: true
+
+ js-yaml@4.1.0:
+ resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==}
+ hasBin: true
+
+ jsep@1.4.0:
+ resolution: {integrity: sha512-B7qPcEVE3NVkmSJbaYxvv4cHkVW7DQsZz13pUMrfS8z8Q/BuShN+gcTXrUlPiGqM2/t/EEaI030bpxMqY8gMlw==}
+ engines: {node: '>= 10.16.0'}
+
+ json-buffer@3.0.1:
+ resolution: {integrity: sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==}
+
+ json-parse-even-better-errors@2.3.1:
+ resolution: {integrity: sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==}
+
+ json-schema-traverse@1.0.0:
+ resolution: {integrity: sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==}
+
+ jsonc-parser@2.2.1:
+ resolution: {integrity: sha512-o6/yDBYccGvTz1+QFevz6l6OBZ2+fMVu2JZ9CIhzsYRX4mjaK5IyX9eldUdCmga16zlgQxyrj5pt9kzuj2C02w==}
+
+ jsonfile@6.2.0:
+ resolution: {integrity: sha512-FGuPw30AdOIUTRMC2OMRtQV+jkVj2cfPqSeWXv1NEAJ1qZ5zb1X6z1mFhbfOB/iy3ssJCD+3KuZ8r8C3uVFlAg==}
+
+ jsonpath-plus@10.4.0:
+ resolution: {integrity: sha512-T92WWatJXmhBbKsgH/0hl+jxjdXrifi5IKeMY02DWggRxX0UElcbVzPlmgLTbvsPeW1PasQ6xE2Q75stkhGbsA==}
+ engines: {node: '>=18.0.0'}
+ hasBin: true
+
+ jsonpointer@5.0.1:
+ resolution: {integrity: sha512-p/nXbhSEcu3pZRdkW1OfJhpsVtW1gd4Wa1fnQc9YLiTfAjn0312eMKimbdIQzuZl9aa9xUGaRlP9T/CJE/ditQ==}
+ engines: {node: '>=0.10.0'}
+
+ katex@0.16.28:
+ resolution: {integrity: sha512-YHzO7721WbmAL6Ov1uzN/l5mY5WWWhJBSW+jq4tkfZfsxmo1hu6frS0EOswvjBUnWE6NtjEs48SFn5CQESRLZg==}
+ hasBin: true
+
+ keyv@4.5.4:
+ resolution: {integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==}
+
+ lcm@0.0.3:
+ resolution: {integrity: sha512-TB+ZjoillV6B26Vspf9l2L/vKaRY/4ep3hahcyVkCGFgsTNRUQdc24bQeNFiZeoxH0vr5+7SfNRMQuPHv/1IrQ==}
+
+ leven@3.1.0:
+ resolution: {integrity: sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==}
+ engines: {node: '>=6'}
+
+ leven@4.1.0:
+ resolution: {integrity: sha512-KZ9W9nWDT7rF7Dazg8xyLHGLrmpgq2nVNFUckhqdW3szVP6YhCpp/RAnpmVExA9JvrMynjwSLVrEj3AepHR6ew==}
+ engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
+
+ lilconfig@2.1.0:
+ resolution: {integrity: sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==}
+ engines: {node: '>=10'}
+
+ lilconfig@3.1.3:
+ resolution: {integrity: sha512-/vlFKAoH5Cgt3Ie+JLhRbwOsCQePABiU3tJ1egGvyQ+33R/vcwM2Zl2QR/LzjsBeItPt3oSVXapn+m4nQDvpzw==}
engines: {node: '>=14'}
- lodash-es@4.17.21:
- resolution: {integrity: sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw==}
+ lines-and-columns@1.2.4:
+ resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==}
- lucide-vue-next@0.503.0:
- resolution: {integrity: sha512-3MrtHIBdh4dPCUZDLxQnvmQ17UzUnBYgezUSIo87Laais8hOz6qIPllp0iG/uS/UIzk7bJxyZRzoZTW/gLSr4A==}
- peerDependencies:
- vue: '>=3.0.1'
+ lodash.topath@4.5.2:
+ resolution: {integrity: sha512-1/W4dM+35DwvE/iEd1M9ekewOSTlpFekhw9mhAtrwjVqUr83/ilQiyAvmg4tVX7Unkcfl1KC+i9WdaT4B6aQcg==}
- magic-string@0.30.21:
- resolution: {integrity: sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==}
+ lodash@4.17.21:
+ resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==}
- mark.js@8.11.1:
- resolution: {integrity: sha512-1I+1qpDt4idfgLQG+BNWmrqku+7/2bi5nLf4YwF8y8zXvmfiTBY3PV3ZibfrjBueCByROpuBjLLFCajqkgYoLQ==}
+ lodash@4.17.23:
+ resolution: {integrity: sha512-LgVTMpQtIopCi79SJeDiP0TfWi5CNEc/L/aRdTh3yIvmZXTnheWpKjSZhnvMl8iXbC1tFg9gdHHDMLoV7CnG+w==}
- markdown-it-link-attributes@4.0.1:
- resolution: {integrity: sha512-pg5OK0jPLg62H4k7M9mRJLT61gUp9nvG0XveKYHMOOluASo9OEF13WlXrpAp2aj35LbedAy3QOCgQCw0tkLKAQ==}
+ longest-streak@3.1.0:
+ resolution: {integrity: sha512-9Ri+o0JYgehTaVBBDoMqIl8GXtbWg711O3srftcHhZ0dqnETqLaoIK0x17fUw9rFSlK/0NlsKe0Ahhyl5pXE2g==}
- marked@16.4.1:
- resolution: {integrity: sha512-ntROs7RaN3EvWfy3EZi14H4YxmT6A5YvywfhO+0pm+cH/dnSQRmdAmoFIc3B9aiwTehyk7pESH4ofyBY+V5hZg==}
- engines: {node: '>= 20'}
+ loose-envify@1.4.0:
+ resolution: {integrity: sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==}
hasBin: true
- mdast-util-to-hast@13.2.0:
- resolution: {integrity: sha512-QGYKEuUsYT9ykKBCMOEDLsU5JRObWQusAolFMeko/tYPufNkRffBAQjIE+99jbA87xv6FgmjLtwjh9wBWajwAA==}
+ lowercase-keys@3.0.0:
+ resolution: {integrity: sha512-ozCC6gdQ+glXOQsveKD0YsDy8DSQFjDTz4zyzEHNV5+JP5D62LmfDZ6o1cycFx9ouG940M5dE8C8CTewdj2YWQ==}
+ engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
- mermaid@11.12.1:
- resolution: {integrity: sha512-UlIZrRariB11TY1RtTgUWp65tphtBv4CSq7vyS2ZZ2TgoMjs2nloq+wFqxiwcxlhHUvs7DPGgMjs2aeQxz5h9g==}
+ lru-cache@7.18.3:
+ resolution: {integrity: sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==}
+ engines: {node: '>=12'}
+
+ markdown-extensions@2.0.0:
+ resolution: {integrity: sha512-o5vL7aDWatOTX8LzaS1WMoaoxIiLRQJuIKKe2wAw6IeULDHaqbiqiggmx+pKvZDb1Sj+pE46Sn1T7lCqfFtg1Q==}
+ engines: {node: '>=16'}
+
+ markdown-table@3.0.4:
+ resolution: {integrity: sha512-wiYz4+JrLyb/DqW2hkFJxP7Vd7JuTDm77fvbM8VfEQdmSMqcImWeeRbHwZjBjIFki/VaMK2BhFi7oUUZeM5bqw==}
+
+ math-intrinsics@1.1.0:
+ resolution: {integrity: sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==}
+ engines: {node: '>= 0.4'}
+
+ mdast-util-find-and-replace@3.0.2:
+ resolution: {integrity: sha512-Tmd1Vg/m3Xz43afeNxDIhWRtFZgM2VLyaf4vSTYwudTyeuTneoL3qtWMA5jeLyz/O1vDJmmV4QuScFCA2tBPwg==}
+
+ mdast-util-from-markdown@2.0.2:
+ resolution: {integrity: sha512-uZhTV/8NBuw0WHkPTrCqDOl0zVe1BIng5ZtHoDk49ME1qqcjYmmLmOf0gELgcRMxN4w2iuIeVso5/6QymSrgmA==}
+
+ mdast-util-from-markdown@2.0.3:
+ resolution: {integrity: sha512-W4mAWTvSlKvf8L6J+VN9yLSqQ9AOAAvHuoDAmPkz4dHf553m5gVj2ejadHJhoJmcmxEnOv6Pa8XJhpxE93kb8Q==}
+
+ mdast-util-frontmatter@2.0.1:
+ resolution: {integrity: sha512-LRqI9+wdgC25P0URIJY9vwocIzCcksduHQ9OF2joxQoyTNVduwLAFUzjoopuRJbJAReaKrNQKAZKL3uCMugWJA==}
+
+ mdast-util-gfm-autolink-literal@2.0.1:
+ resolution: {integrity: sha512-5HVP2MKaP6L+G6YaxPNjuL0BPrq9orG3TsrZ9YXbA3vDw/ACI4MEsnoDpn6ZNm7GnZgtAcONJyPhOP8tNJQavQ==}
+
+ mdast-util-gfm-footnote@2.1.0:
+ resolution: {integrity: sha512-sqpDWlsHn7Ac9GNZQMeUzPQSMzR6Wv0WKRNvQRg0KqHh02fpTz69Qc1QSseNX29bhz1ROIyNyxExfawVKTm1GQ==}
+
+ mdast-util-gfm-strikethrough@2.0.0:
+ resolution: {integrity: sha512-mKKb915TF+OC5ptj5bJ7WFRPdYtuHv0yTRxK2tJvi+BDqbkiG7h7u/9SI89nRAYcmap2xHQL9D+QG/6wSrTtXg==}
+
+ mdast-util-gfm-table@2.0.0:
+ resolution: {integrity: sha512-78UEvebzz/rJIxLvE7ZtDd/vIQ0RHv+3Mh5DR96p7cS7HsBhYIICDBCu8csTNWNO6tBWfqXPWekRuj2FNOGOZg==}
+
+ mdast-util-gfm-task-list-item@2.0.0:
+ resolution: {integrity: sha512-IrtvNvjxC1o06taBAVJznEnkiHxLFTzgonUdy8hzFVeDun0uTjxxrRGVaNFqkU1wJR3RBPEfsxmU6jDWPofrTQ==}
+
+ mdast-util-gfm@3.0.0:
+ resolution: {integrity: sha512-dgQEX5Amaq+DuUqf26jJqSK9qgixgd6rYDHAv4aTBuA92cTknZlKpPfa86Z/s8Dj8xsAQpFfBmPUHWJBWqS4Bw==}
+
+ mdast-util-gfm@3.1.0:
+ resolution: {integrity: sha512-0ulfdQOM3ysHhCJ1p06l0b0VKlhU0wuQs3thxZQagjcjPrlFRqY215uZGHHJan9GEAXd9MbfPjFJz+qMkVR6zQ==}
+
+ mdast-util-math@3.0.0:
+ resolution: {integrity: sha512-Tl9GBNeG/AhJnQM221bJR2HPvLOSnLE/T9cJI9tlc6zwQk2nPk/4f0cHkOdEixQPC/j8UtKDdITswvLAy1OZ1w==}
+
+ mdast-util-mdx-expression@2.0.1:
+ resolution: {integrity: sha512-J6f+9hUp+ldTZqKRSg7Vw5V6MqjATc+3E4gf3CFNcuZNWD8XdyI6zQ8GqH7f8169MM6P7hMBRDVGnn7oHB9kXQ==}
+
+ mdast-util-mdx-jsx@3.1.3:
+ resolution: {integrity: sha512-bfOjvNt+1AcbPLTFMFWY149nJz0OjmewJs3LQQ5pIyVGxP4CdOqNVJL6kTaM5c68p8q82Xv3nCyFfUnuEcH3UQ==}
+
+ mdast-util-mdx-jsx@3.2.0:
+ resolution: {integrity: sha512-lj/z8v0r6ZtsN/cGNNtemmmfoLAFZnjMbNyLzBafjzikOM+glrjNHPlf6lQDOTccj9n5b0PPihEBbhneMyGs1Q==}
+
+ mdast-util-mdx@3.0.0:
+ resolution: {integrity: sha512-JfbYLAW7XnYTTbUsmpu0kdBUVe+yKVJZBItEjwyYJiDJuZ9w4eeaqks4HQO+R7objWgS2ymV60GYpI14Ug554w==}
+
+ mdast-util-mdxjs-esm@2.0.1:
+ resolution: {integrity: sha512-EcmOpxsZ96CvlP03NghtH1EsLtr0n9Tm4lPUJUBccV9RwUOneqSycg19n5HGzCf+10LozMRSObtVr3ee1WoHtg==}
+
+ mdast-util-phrasing@4.1.0:
+ resolution: {integrity: sha512-TqICwyvJJpBwvGAMZjj4J2n0X8QWp21b9l0o7eXyVJ25YNWYbJDVIyD1bZXE6WtV6RmKJVYmQAKWa0zWOABz2w==}
+
+ mdast-util-to-hast@13.2.1:
+ resolution: {integrity: sha512-cctsq2wp5vTsLIcaymblUriiTcZd0CwWtCbLvrOzYCDZoWyMNV8sZ7krj09FSnsiJi3WVsHLM4k6Dq/yaPyCXA==}
+
+ mdast-util-to-markdown@2.1.2:
+ resolution: {integrity: sha512-xj68wMTvGXVOKonmog6LwyJKrYXZPvlwabaryTjLh9LuvovB/KAH+kvi8Gjj+7rJjsFi23nkUxRQv1KqSroMqA==}
+
+ mdast-util-to-string@4.0.0:
+ resolution: {integrity: sha512-0H44vDimn51F0YwvxSJSm0eCDOJTRlmN0R1yBh4HLj9wiV1Dn0QoXGbvFAWj2hSItVTlCmBF1hqKlIyUBVFLPg==}
+
+ media-typer@0.3.0:
+ resolution: {integrity: sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==}
+ engines: {node: '>= 0.6'}
+
+ merge-descriptors@1.0.1:
+ resolution: {integrity: sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w==}
+
+ merge2@1.4.1:
+ resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==}
+ engines: {node: '>= 8'}
+
+ methods@1.1.2:
+ resolution: {integrity: sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==}
+ engines: {node: '>= 0.6'}
+
+ micromark-core-commonmark@2.0.3:
+ resolution: {integrity: sha512-RDBrHEMSxVFLg6xvnXmb1Ayr2WzLAWjeSATAoxwKYJV94TeNavgoIdA0a9ytzDSVzBy2YKFK+emCPOEibLeCrg==}
+
+ micromark-extension-frontmatter@2.0.0:
+ resolution: {integrity: sha512-C4AkuM3dA58cgZha7zVnuVxBhDsbttIMiytjgsM2XbHAB2faRVaHRle40558FBN+DJcrLNCoqG5mlrpdU4cRtg==}
+
+ micromark-extension-gfm-autolink-literal@2.1.0:
+ resolution: {integrity: sha512-oOg7knzhicgQ3t4QCjCWgTmfNhvQbDDnJeVu9v81r7NltNCVmhPy1fJRX27pISafdjL+SVc4d3l48Gb6pbRypw==}
+
+ micromark-extension-gfm-footnote@2.1.0:
+ resolution: {integrity: sha512-/yPhxI1ntnDNsiHtzLKYnE3vf9JZ6cAisqVDauhp4CEHxlb4uoOTxOCJ+9s51bIB8U1N1FJ1RXOKTIlD5B/gqw==}
+
+ micromark-extension-gfm-strikethrough@2.1.0:
+ resolution: {integrity: sha512-ADVjpOOkjz1hhkZLlBiYA9cR2Anf8F4HqZUO6e5eDcPQd0Txw5fxLzzxnEkSkfnD0wziSGiv7sYhk/ktvbf1uw==}
+
+ micromark-extension-gfm-table@2.1.1:
+ resolution: {integrity: sha512-t2OU/dXXioARrC6yWfJ4hqB7rct14e8f7m0cbI5hUmDyyIlwv5vEtooptH8INkbLzOatzKuVbQmAYcbWoyz6Dg==}
+
+ micromark-extension-gfm-tagfilter@2.0.0:
+ resolution: {integrity: sha512-xHlTOmuCSotIA8TW1mDIM6X2O1SiX5P9IuDtqGonFhEK0qgRI4yeC6vMxEV2dgyr2TiD+2PQ10o+cOhdVAcwfg==}
+
+ micromark-extension-gfm-task-list-item@2.1.0:
+ resolution: {integrity: sha512-qIBZhqxqI6fjLDYFTBIa4eivDMnP+OZqsNwmQ3xNLE4Cxwc+zfQEfbs6tzAo2Hjq+bh6q5F+Z8/cksrLFYWQQw==}
+
+ micromark-extension-gfm@3.0.0:
+ resolution: {integrity: sha512-vsKArQsicm7t0z2GugkCKtZehqUm31oeGBV/KVSorWSy8ZlNAv7ytjFhvaryUiCUJYqs+NoE6AFhpQvBTM6Q4w==}
+
+ micromark-extension-math@3.1.0:
+ resolution: {integrity: sha512-lvEqd+fHjATVs+2v/8kg9i5Q0AP2k85H0WUOwpIVvUML8BapsMvh1XAogmQjOCsLpoKRCVQqEkQBB3NhVBcsOg==}
+
+ micromark-extension-mdx-expression@3.0.1:
+ resolution: {integrity: sha512-dD/ADLJ1AeMvSAKBwO22zG22N4ybhe7kFIZ3LsDI0GlsNr2A3KYxb0LdC1u5rj4Nw+CHKY0RVdnHX8vj8ejm4Q==}
+
+ micromark-extension-mdx-jsx@3.0.1:
+ resolution: {integrity: sha512-vNuFb9czP8QCtAQcEJn0UJQJZA8Dk6DXKBqx+bg/w0WGuSxDxNr7hErW89tHUY31dUW4NqEOWwmEUNhjTFmHkg==}
+
+ micromark-extension-mdx-md@2.0.0:
+ resolution: {integrity: sha512-EpAiszsB3blw4Rpba7xTOUptcFeBFi+6PY8VnJ2hhimH+vCQDirWgsMpz7w1XcZE7LVrSAUGb9VJpG9ghlYvYQ==}
+
+ micromark-extension-mdxjs-esm@3.0.0:
+ resolution: {integrity: sha512-DJFl4ZqkErRpq/dAPyeWp15tGrcrrJho1hKK5uBS70BCtfrIFg81sqcTVu3Ta+KD1Tk5vAtBNElWxtAa+m8K9A==}
+
+ micromark-extension-mdxjs@3.0.0:
+ resolution: {integrity: sha512-A873fJfhnJ2siZyUrJ31l34Uqwy4xIFmvPY1oj+Ean5PHcPBYzEsvqvWGaWcfEIr11O5Dlw3p2y0tZWpKHDejQ==}
+
+ micromark-factory-destination@2.0.1:
+ resolution: {integrity: sha512-Xe6rDdJlkmbFRExpTOmRj9N3MaWmbAgdpSrBQvCFqhezUn4AHqJHbaEnfbVYYiexVSs//tqOdY/DxhjdCiJnIA==}
+
+ micromark-factory-label@2.0.1:
+ resolution: {integrity: sha512-VFMekyQExqIW7xIChcXn4ok29YE3rnuyveW3wZQWWqF4Nv9Wk5rgJ99KzPvHjkmPXF93FXIbBp6YdW3t71/7Vg==}
+
+ micromark-factory-mdx-expression@2.0.3:
+ resolution: {integrity: sha512-kQnEtA3vzucU2BkrIa8/VaSAsP+EJ3CKOvhMuJgOEGg9KDC6OAY6nSnNDVRiVNRqj7Y4SlSzcStaH/5jge8JdQ==}
+
+ micromark-factory-space@2.0.1:
+ resolution: {integrity: sha512-zRkxjtBxxLd2Sc0d+fbnEunsTj46SWXgXciZmHq0kDYGnck/ZSGj9/wULTV95uoeYiK5hRXP2mJ98Uo4cq/LQg==}
+
+ micromark-factory-title@2.0.1:
+ resolution: {integrity: sha512-5bZ+3CjhAd9eChYTHsjy6TGxpOFSKgKKJPJxr293jTbfry2KDoWkhBb6TcPVB4NmzaPhMs1Frm9AZH7OD4Cjzw==}
+
+ micromark-factory-whitespace@2.0.1:
+ resolution: {integrity: sha512-Ob0nuZ3PKt/n0hORHyvoD9uZhr+Za8sFoP+OnMcnWK5lngSzALgQYKMr9RJVOWLqQYuyn6ulqGWSXdwf6F80lQ==}
micromark-util-character@2.1.1:
resolution: {integrity: sha512-wv8tdUTJ3thSFFFJKtpYKOYiGP2+v96Hvk4Tu8KpCAsTMs6yi+nVmGh1syvSCsaxz45J6Jbw+9DD6g97+NV67Q==}
+ micromark-util-chunked@2.0.1:
+ resolution: {integrity: sha512-QUNFEOPELfmvv+4xiNg2sRYeS/P84pTW0TCgP5zc9FpXetHY0ab7SxKyAQCNCc1eK0459uoLI1y5oO5Vc1dbhA==}
+
+ micromark-util-classify-character@2.0.1:
+ resolution: {integrity: sha512-K0kHzM6afW/MbeWYWLjoHQv1sgg2Q9EccHEDzSkxiP/EaagNzCm7T/WMKZ3rjMbvIpvBiZgwR3dKMygtA4mG1Q==}
+
+ micromark-util-combine-extensions@2.0.1:
+ resolution: {integrity: sha512-OnAnH8Ujmy59JcyZw8JSbK9cGpdVY44NKgSM7E9Eh7DiLS2E9RNQf0dONaGDzEG9yjEl5hcqeIsj4hfRkLH/Bg==}
+
+ micromark-util-decode-numeric-character-reference@2.0.2:
+ resolution: {integrity: sha512-ccUbYk6CwVdkmCQMyr64dXz42EfHGkPQlBj5p7YVGzq8I7CtjXZJrubAYezf7Rp+bjPseiROqe7G6foFd+lEuw==}
+
+ micromark-util-decode-string@2.0.1:
+ resolution: {integrity: sha512-nDV/77Fj6eH1ynwscYTOsbK7rR//Uj0bZXBwJZRfaLEJ1iGBR6kIfNmlNqaqJf649EP0F3NWNdeJi03elllNUQ==}
+
micromark-util-encode@2.0.1:
resolution: {integrity: sha512-c3cVx2y4KqUnwopcO9b/SCdo2O67LwJJ/UyqGfbigahfegL9myoEFoDYZgkT7f36T0bLrM9hZTAaAyH+PCAXjw==}
+ micromark-util-events-to-acorn@2.0.3:
+ resolution: {integrity: sha512-jmsiEIiZ1n7X1Rr5k8wVExBQCg5jy4UXVADItHmNk1zkwEVhBuIUKRu3fqv+hs4nxLISi2DQGlqIOGiFxgbfHg==}
+
+ micromark-util-html-tag-name@2.0.1:
+ resolution: {integrity: sha512-2cNEiYDhCWKI+Gs9T0Tiysk136SnR13hhO8yW6BGNyhOC4qYFnwF1nKfD3HFAIXA5c45RrIG1ub11GiXeYd1xA==}
+
+ micromark-util-normalize-identifier@2.0.1:
+ resolution: {integrity: sha512-sxPqmo70LyARJs0w2UclACPUUEqltCkJ6PhKdMIDuJ3gSf/Q+/GIe3WKl0Ijb/GyH9lOpUkRAO2wp0GVkLvS9Q==}
+
+ micromark-util-resolve-all@2.0.1:
+ resolution: {integrity: sha512-VdQyxFWFT2/FGJgwQnJYbe1jjQoNTS4RjglmSjTUlpUMa95Htx9NHeYW4rGDJzbjvCsl9eLjMQwGeElsqmzcHg==}
+
micromark-util-sanitize-uri@2.0.1:
resolution: {integrity: sha512-9N9IomZ/YuGGZZmQec1MbgxtlgougxTodVwDzzEouPKo3qFWvymFHWcnDi2vzV1ff6kas9ucW+o3yzJK9YB1AQ==}
+ micromark-util-subtokenize@2.1.0:
+ resolution: {integrity: sha512-XQLu552iSctvnEcgXw6+Sx75GflAPNED1qx7eBJ+wydBb2KCbRZe+NwvIEEMM83uml1+2WSXpBAcp9IUCgCYWA==}
+
micromark-util-symbol@2.0.1:
resolution: {integrity: sha512-vs5t8Apaud9N28kgCrRUdEed4UJ+wWNvicHLPxCa9ENlYuAY31M0ETy5y1vA33YoNPDFTghEbnh6efaE8h4x0Q==}
micromark-util-types@2.0.2:
resolution: {integrity: sha512-Yw0ECSpJoViF1qTU4DC6NwtC4aWGt1EkzaQB8KPPyCRR8z9TWeV0HbEFGTO+ZY1wB22zmxnJqhPyTpOVCpeHTA==}
- minisearch@7.2.0:
- resolution: {integrity: sha512-dqT2XBYUOZOiC5t2HRnwADjhNS2cecp9u+TJRiJ1Qp/f5qjkeT5APcGPjHw+bz89Ms8Jp+cG4AlE+QZ/QnDglg==}
+ micromark@4.0.2:
+ resolution: {integrity: sha512-zpe98Q6kvavpCr1NPVSCMebCKfD7CA2NqZ+rykeNhONIJBpc1tFKt9hucLGwha3jNTNI8lHpctWJWoimVF4PfA==}
+
+ micromatch@4.0.8:
+ resolution: {integrity: sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==}
+ engines: {node: '>=8.6'}
+
+ mime-db@1.52.0:
+ resolution: {integrity: sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==}
+ engines: {node: '>= 0.6'}
+
+ mime-types@2.1.35:
+ resolution: {integrity: sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==}
+ engines: {node: '>= 0.6'}
+
+ mime@1.6.0:
+ resolution: {integrity: sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==}
+ engines: {node: '>=4'}
+ hasBin: true
+
+ mimic-fn@2.1.0:
+ resolution: {integrity: sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==}
+ engines: {node: '>=6'}
+
+ mimic-response@3.1.0:
+ resolution: {integrity: sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==}
+ engines: {node: '>=10'}
+
+ mimic-response@4.0.0:
+ resolution: {integrity: sha512-e5ISH9xMYU0DzrT+jl8q2ze9D6eWBto+I8CNpe+VI+K2J/F/k3PdkdTdz4wvGVH4NTpo+NRYTVIuMQEMMcsLqg==}
+ engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
+
+ minimatch@3.1.2:
+ resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==}
+
+ minipass@3.3.6:
+ resolution: {integrity: sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==}
+ engines: {node: '>=8'}
+
+ minipass@5.0.0:
+ resolution: {integrity: sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==}
+ engines: {node: '>=8'}
+
+ minizlib@2.1.2:
+ resolution: {integrity: sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==}
+ engines: {node: '>= 8'}
+
+ mintlify@4.2.375:
+ resolution: {integrity: sha512-10Ny+U1xCT97nPGQh1Mf9juLYaE8dXd5cRVvBZ/9bm4cZgZCvjnzaj6qKzj3z/itfcfRLOWFaacMlVcemYISTg==}
+ engines: {node: '>=18.0.0'}
+ hasBin: true
mitt@3.0.1:
resolution: {integrity: sha512-vKivATfr97l2/QBCYAkXYDbrIWPM2IIKEl7YPhjCvKlG3kE2gm+uBo6nEXK3M5/Ffh/FLpKExzOQ3JJoJGFKBw==}
- mlly@1.8.0:
- resolution: {integrity: sha512-l8D9ODSRWLe2KHJSifWGwBqpTZXIXTeo8mlKjY+E2HAakaTeNpqAyBZ8GSqLzHgw4XmHmC8whvpjJNMbFZN7/g==}
+ mkdirp@1.0.4:
+ resolution: {integrity: sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==}
+ engines: {node: '>=10'}
+ hasBin: true
+
+ ms@2.0.0:
+ resolution: {integrity: sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==}
ms@2.1.3:
resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==}
+ mute-stream@2.0.0:
+ resolution: {integrity: sha512-WWdIxpyjEn+FhQJQQv9aQAYlHoNVdzIzUySNV1gHUPDSdZJ3yZn7pAAbQcV7B56Mvu881q9FZV+0Vx2xC44VWA==}
+ engines: {node: ^18.17.0 || >=20.5.0}
+
+ mz@2.7.0:
+ resolution: {integrity: sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==}
+
nanoid@3.3.11:
resolution: {integrity: sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==}
engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1}
hasBin: true
- ohash@2.0.11:
- resolution: {integrity: sha512-RdR9FQrFwNBNXAr4GixM8YaRZRJ5PUWbKYbE5eOsrwAjJW0q2REGcf79oYPsLyskQCZG1PLN+S/K1V00joZAoQ==}
+ negotiator@0.6.3:
+ resolution: {integrity: sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==}
+ engines: {node: '>= 0.6'}
- oniguruma-to-es@3.1.1:
- resolution: {integrity: sha512-bUH8SDvPkH3ho3dvwJwfonjlQ4R80vjyvrU8YpxuROddv55vAEJrTuCuCVUhhsHbtlD9tGGbaNApGQckXhS8iQ==}
+ neotraverse@0.6.18:
+ resolution: {integrity: sha512-Z4SmBUweYa09+o6pG+eASabEpP6QkQ70yHj351pQoEXIs8uHbaU2DWVmzBANKgflPa47A50PtB2+NgRpQvr7vA==}
+ engines: {node: '>= 10'}
- package-manager-detector@1.5.0:
- resolution: {integrity: sha512-uBj69dVlYe/+wxj8JOpr97XfsxH/eumMt6HqjNTmJDf/6NO9s+0uxeOneIz3AsPt2m6y9PqzDzd3ATcU17MNfw==}
+ netmask@2.0.2:
+ resolution: {integrity: sha512-dBpDMdxv9Irdq66304OLfEmQ9tbNRFnFTuZiLo+bD+r332bBmMJ8GBLXklIXXgxd3+v9+KUnZaUR5PJMa75Gsg==}
+ engines: {node: '>= 0.4.0'}
- path-data-parser@0.1.0:
- resolution: {integrity: sha512-NOnmBpt5Y2RWbuv0LMzsayp3lVylAHLPUTut412ZA3l+C4uw4ZVkQbjShYCQ8TCpUMdPapr4YjUqLYD6v68j+w==}
+ next-mdx-remote-client@1.1.6:
+ resolution: {integrity: sha512-O4HIpi44d6SismhfG5W78aTUfgxfbsj6FgoM4/G3o4Vtcobt0Ej439IiDPkv+IqsmtouVYG1tGAsz1DIuj9Tfg==}
+ engines: {node: '>=20.9.0'}
+ peerDependencies:
+ react: '>= 18.3.0 < 19.0.0'
+ react-dom: '>= 18.3.0 < 19.0.0'
- pathe@2.0.3:
- resolution: {integrity: sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==}
+ nimma@0.2.3:
+ resolution: {integrity: sha512-1ZOI8J+1PKKGceo/5CT5GfQOG6H8I2BencSK06YarZ2wXwH37BSSUWldqJmMJYA5JfqDqffxDXynt6f11AyKcA==}
+ engines: {node: ^12.20 || >=14.13}
- perfect-debounce@1.0.0:
- resolution: {integrity: sha512-xCy9V055GLEqoFaHoC1SoLIaLmWctgCUaBaWxDZ7/Zx4CTyX7cJQLJOok/orfjZAh9kEYpjJa4d0KcJmCbctZA==}
+ nlcst-to-string@4.0.0:
+ resolution: {integrity: sha512-YKLBCcUYKAg0FNlOBT6aI91qFmSiFKiluk655WzPF+DDMA02qIyy8uiRqI8QXtcFpEvll12LpL5MXqEmAZ+dcA==}
+
+ node-fetch@2.6.7:
+ resolution: {integrity: sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==}
+ engines: {node: 4.x || >=6.0.0}
+ peerDependencies:
+ encoding: ^0.1.0
+ peerDependenciesMeta:
+ encoding:
+ optional: true
+
+ node-fetch@2.7.0:
+ resolution: {integrity: sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==}
+ engines: {node: 4.x || >=6.0.0}
+ peerDependencies:
+ encoding: ^0.1.0
+ peerDependenciesMeta:
+ encoding:
+ optional: true
+
+ non-error@0.1.0:
+ resolution: {integrity: sha512-TMB1uHiGsHRGv1uYclfhivcnf0/PdFp2pNqRxXjncaAsjYMoisaQJI+SSZCqRq+VliwRTC8tsMQfmrWjDMhkPQ==}
+ engines: {node: '>=20'}
+
+ normalize-path@3.0.0:
+ resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==}
+ engines: {node: '>=0.10.0'}
+
+ normalize-url@8.1.1:
+ resolution: {integrity: sha512-JYc0DPlpGWB40kH5g07gGTrYuMqV653k3uBKY6uITPWds3M0ov3GaWGp9lbE3Bzngx8+XkfzgvASb9vk9JDFXQ==}
+ engines: {node: '>=14.16'}
+
+ object-assign@4.1.1:
+ resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==}
+ engines: {node: '>=0.10.0'}
+
+ object-hash@3.0.0:
+ resolution: {integrity: sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==}
+ engines: {node: '>= 6'}
+
+ object-inspect@1.13.4:
+ resolution: {integrity: sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==}
+ engines: {node: '>= 0.4'}
+
+ object-keys@1.1.1:
+ resolution: {integrity: sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==}
+ engines: {node: '>= 0.4'}
+
+ object.assign@4.1.7:
+ resolution: {integrity: sha512-nK28WOo+QIjBkDduTINE4JkF/UJJKyf2EJxvJKfblDpyg0Q+pkOHNTL0Qwy6NP6FhE/EnzV73BxxqcJaXY9anw==}
+ engines: {node: '>= 0.4'}
+
+ on-finished@2.4.1:
+ resolution: {integrity: sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==}
+ engines: {node: '>= 0.8'}
+
+ once@1.4.0:
+ resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==}
+
+ onetime@5.1.2:
+ resolution: {integrity: sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==}
+ engines: {node: '>=6'}
+
+ oniguruma-parser@0.12.1:
+ resolution: {integrity: sha512-8Unqkvk1RYc6yq2WBYRj4hdnsAxVze8i7iPfQr8e4uSP3tRv0rpZcbGUDvxfQQcdwHt/e9PrMvGCsa8OqG9X3w==}
+
+ oniguruma-to-es@4.3.4:
+ resolution: {integrity: sha512-3VhUGN3w2eYxnTzHn+ikMI+fp/96KoRSVK9/kMTcFqj1NRDh2IhQCKvYxDnWePKRXY/AqH+Fuiyb7VHSzBjHfA==}
+
+ open@8.4.2:
+ resolution: {integrity: sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ==}
+ engines: {node: '>=12'}
+
+ openapi-types@12.1.3:
+ resolution: {integrity: sha512-N4YtSYJqghVu4iek2ZUvcN/0aqH1kRDuNqzcycDxhOUpg7GdvLa2F3DgS6yBNhInhv2r/6I0Flkn7CqL8+nIcw==}
+
+ own-keys@1.0.1:
+ resolution: {integrity: sha512-qFOyK5PjiWZd+QQIh+1jhdb9LpxTF0qs7Pm8o5QHYZ0M3vKqSqzsZaEB6oWlxZ+q2sJBMI/Ktgd2N5ZwQoRHfg==}
+ engines: {node: '>= 0.4'}
+
+ p-any@4.0.0:
+ resolution: {integrity: sha512-S/B50s+pAVe0wmEZHmBs/9yJXeZ5KhHzOsgKzt0hRdgkoR3DxW9ts46fcsWi/r3VnzsnkKS7q4uimze+zjdryw==}
+ engines: {node: '>=12.20'}
+
+ p-cancelable@3.0.0:
+ resolution: {integrity: sha512-mlVgR3PGuzlo0MmTdk4cXqXWlwQDLnONTAg6sm62XkMJEiRxN3GL3SffkYvqwonbkJBcrI7Uvv5Zh9yjvn2iUw==}
+ engines: {node: '>=12.20'}
+
+ p-some@6.0.0:
+ resolution: {integrity: sha512-CJbQCKdfSX3fIh8/QKgS+9rjm7OBNUTmwWswAFQAhc8j1NR1dsEDETUEuVUtQHZpV+J03LqWBEwvu0g1Yn+TYg==}
+ engines: {node: '>=12.20'}
+
+ p-timeout@5.1.0:
+ resolution: {integrity: sha512-auFDyzzzGZZZdHz3BtET9VEz0SE/uMEAx7uWfGPucfzEwwe/xH0iVeZibQmANYE/hp9T2+UUZT5m+BKyrDp3Ew==}
+ engines: {node: '>=12'}
+
+ pac-proxy-agent@7.2.0:
+ resolution: {integrity: sha512-TEB8ESquiLMc0lV8vcd5Ql/JAKAoyzHFXaStwjkzpOpC5Yv+pIzLfHvjTSdf3vpa2bMiUQrg9i6276yn8666aA==}
+ engines: {node: '>= 14'}
+
+ pac-resolver@7.0.1:
+ resolution: {integrity: sha512-5NPgf87AT2STgwa2ntRMr45jTKrYBGkVU36yT0ig/n/GMAa3oPqhZfIQ2kMEimReg0+t9kZViDVZ83qfVUlckg==}
+ engines: {node: '>= 14'}
+
+ parent-module@1.0.1:
+ resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==}
+ engines: {node: '>=6'}
+
+ parse-entities@4.0.2:
+ resolution: {integrity: sha512-GG2AQYWoLgL877gQIKeRPGO1xF9+eG1ujIb5soS5gPvLQ1y2o8FL90w2QWNdf9I361Mpp7726c+lj3U0qK1uGw==}
+
+ parse-json@5.2.0:
+ resolution: {integrity: sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==}
+ engines: {node: '>=8'}
+
+ parse-latin@7.0.0:
+ resolution: {integrity: sha512-mhHgobPPua5kZ98EF4HWiH167JWBfl4pvAIXXdbaVohtK7a6YBOy56kvhCqduqyo/f3yrHFWmqmiMg/BkBkYYQ==}
+
+ parse5@7.3.0:
+ resolution: {integrity: sha512-IInvU7fabl34qmi9gY8XOVxhYyMyuH2xUNpb2q8/Y+7552KlejkRvqvD19nMoUW/uQGGbqNpA6Tufu5FL5BZgw==}
+
+ parseurl@1.3.3:
+ resolution: {integrity: sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==}
+ engines: {node: '>= 0.8'}
+
+ patch-console@2.0.0:
+ resolution: {integrity: sha512-0YNdUceMdaQwoKce1gatDScmMo5pu/tfABfnzEqeG0gtTmd7mh/WcwgUjtAeOU7N8nFFlbQBnFK2gXW5fGvmMA==}
+ engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
+
+ path-parse@1.0.7:
+ resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==}
+
+ path-to-regexp@0.1.7:
+ resolution: {integrity: sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==}
+
+ pend@1.2.0:
+ resolution: {integrity: sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg==}
picocolors@1.1.1:
resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==}
- pkg-types@1.3.1:
- resolution: {integrity: sha512-/Jm5M4RvtBFVkKWRu2BLUTNP8/M2a+UwuAX+ae4770q1qVGtfjG+WTCupoZixokjmHiry8uI+dlY8KXYV5HVVQ==}
+ picomatch@2.3.1:
+ resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==}
+ engines: {node: '>=8.6'}
- pkg-types@2.3.0:
- resolution: {integrity: sha512-SIqCzDRg0s9npO5XQ3tNZioRY1uK06lA41ynBC1YmFTmnY6FjUjVt6s4LoADmwoig1qqD0oK8h1p/8mlMx8Oig==}
+ picomatch@4.0.3:
+ resolution: {integrity: sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==}
+ engines: {node: '>=12'}
- points-on-curve@0.2.0:
- resolution: {integrity: sha512-0mYKnYYe9ZcqMCWhUjItv/oHjvgEsfKvnUTg8sAtnHr3GVy7rGkXCb6d5cSyqrWqL4k81b9CPg3urd+T7aop3A==}
+ pify@2.3.0:
+ resolution: {integrity: sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==}
+ engines: {node: '>=0.10.0'}
- points-on-path@0.2.1:
- resolution: {integrity: sha512-25ClnWWuw7JbWZcgqY/gJ4FQWadKxGWk+3kR/7kD0tCaDtPPMj7oHu2ToLaVhfpnHrZzYby2w6tUA0eOIuUg8g==}
+ pirates@4.0.7:
+ resolution: {integrity: sha512-TfySrs/5nm8fQJDcBDuUng3VOUKsd7S+zqvbOTiGXHfxX4wK31ard+hoNuvkicM/2YFzlpDgABOevKSsB4G/FA==}
+ engines: {node: '>= 6'}
+
+ pony-cause@1.1.1:
+ resolution: {integrity: sha512-PxkIc/2ZpLiEzQXu5YRDOUgBlfGYBY8156HY5ZcRAwwonMk5W/MrJP2LLkG/hF7GEQzaHo2aS7ho6ZLCOvf+6g==}
+ engines: {node: '>=12.0.0'}
+
+ possible-typed-array-names@1.1.0:
+ resolution: {integrity: sha512-/+5VFTchJDoVj3bhoqi6UeymcD00DAwb1nJwamzPvHEszJ4FpF6SNNbUbOS8yI56qHzdV8eK0qEfOSiodkTdxg==}
+ engines: {node: '>= 0.4'}
+
+ postcss-import@15.1.0:
+ resolution: {integrity: sha512-hpr+J05B2FVYUAXHeK1YyI267J/dDDhMU6B6civm8hSY1jYJnBXxzKDKDswzJmtLHryrjhnDjqqp/49t8FALew==}
+ engines: {node: '>=14.0.0'}
+ peerDependencies:
+ postcss: ^8.0.0
+
+ postcss-js@4.1.0:
+ resolution: {integrity: sha512-oIAOTqgIo7q2EOwbhb8UalYePMvYoIeRY2YKntdpFQXNosSu3vLrniGgmH9OKs/qAkfoj5oB3le/7mINW1LCfw==}
+ engines: {node: ^12 || ^14 || >= 16}
+ peerDependencies:
+ postcss: ^8.4.21
+
+ postcss-load-config@4.0.2:
+ resolution: {integrity: sha512-bSVhyJGL00wMVoPUzAVAnbEoWyqRxkjv64tUl427SKnPrENtq6hJwUojroMz2VB+Q1edmi4IfrAPpami5VVgMQ==}
+ engines: {node: '>= 14'}
+ peerDependencies:
+ postcss: '>=8.0.9'
+ ts-node: '>=9.0.0'
+ peerDependenciesMeta:
+ postcss:
+ optional: true
+ ts-node:
+ optional: true
+
+ postcss-nested@6.2.0:
+ resolution: {integrity: sha512-HQbt28KulC5AJzG+cZtj9kvKB93CFCdLvog1WFLf1D+xmMvPGlBstkpTEZfK5+AN9hfJocyBFCNiqyS48bpgzQ==}
+ engines: {node: '>=12.0'}
+ peerDependencies:
+ postcss: ^8.2.14
+
+ postcss-selector-parser@6.1.2:
+ resolution: {integrity: sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg==}
+ engines: {node: '>=4'}
+
+ postcss-value-parser@4.2.0:
+ resolution: {integrity: sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==}
postcss@8.5.6:
resolution: {integrity: sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==}
engines: {node: ^10 || ^12 || >=14}
- preact@10.27.2:
- resolution: {integrity: sha512-5SYSgFKSyhCbk6SrXyMpqjb5+MQBgfvEKE/OC+PujcY34sOpqtr+0AZQtPYx5IA6VxynQ7rUPCtKzyovpj9Bpg==}
+ progress@2.0.3:
+ resolution: {integrity: sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==}
+ engines: {node: '>=0.4.0'}
+
+ property-information@6.5.0:
+ resolution: {integrity: sha512-PgTgs/BlvHxOu8QuEN7wi5A0OmXaBcHpmCSTehcs6Uuu9IkDIEo13Hy7n898RHfrQ49vKCoGeWZSaAK01nwVig==}
property-information@7.1.0:
resolution: {integrity: sha512-TwEZ+X+yCJmYfL7TPUOcvBZ4QfoT5YenQiJuX//0th53DE6w0xxLEtfK3iyryQFddXuvkIk51EEgrJQ0WJkOmQ==}
- quansync@0.2.11:
- resolution: {integrity: sha512-AifT7QEbW9Nri4tAwR5M/uzpBuqfZf+zwaEM/QkzEjj7NBuFD2rBuy0K3dE+8wltbezDV7JMA0WfnCPYRSYbXA==}
+ proxy-addr@2.0.7:
+ resolution: {integrity: sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==}
+ engines: {node: '>= 0.10'}
+
+ proxy-agent@6.5.0:
+ resolution: {integrity: sha512-TmatMXdr2KlRiA2CyDu8GqR8EjahTG3aY3nXjdzFyoZbmB8hrBsTyMezhULIXKnC0jpfjlmiZ3+EaCzoInSu/A==}
+ engines: {node: '>= 14'}
+
+ proxy-from-env@1.1.0:
+ resolution: {integrity: sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==}
+
+ public-ip@5.0.0:
+ resolution: {integrity: sha512-xaH3pZMni/R2BG7ZXXaWS9Wc9wFlhyDVJF47IJ+3ali0TGv+2PsckKxbmo+rnx3ZxiV2wblVhtdS3bohAP6GGw==}
+ engines: {node: ^14.13.1 || >=16.0.0}
+
+ pump@3.0.3:
+ resolution: {integrity: sha512-todwxLMY7/heScKmntwQG8CXVkWUOdYxIvY2s0VWAAMh/nd8SoYiRaKjlr7+iCs984f2P8zvrfWcDDYVb73NfA==}
+
+ puppeteer-core@22.14.0:
+ resolution: {integrity: sha512-rl4tOY5LcA3e374GAlsGGHc05HL3eGNf5rZ+uxkl6id9zVZKcwcp1Z+Nd6byb6WPiPeecT/dwz8f/iUm+AZQSw==}
+ engines: {node: '>=18'}
+
+ puppeteer@22.14.0:
+ resolution: {integrity: sha512-MGTR6/pM8zmWbTdazb6FKnwIihzsSEXBPH49mFFU96DNZpQOevCAZMnjBZGlZRGRzRK6aADCavR6SQtrbv5dQw==}
+ engines: {node: '>=18'}
+ deprecated: < 24.15.0 is no longer supported
+ hasBin: true
+
+ qs@6.11.0:
+ resolution: {integrity: sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==}
+ engines: {node: '>=0.6'}
+
+ queue-microtask@1.2.3:
+ resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==}
+
+ quick-lru@5.1.1:
+ resolution: {integrity: sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==}
+ engines: {node: '>=10'}
+
+ range-parser@1.2.1:
+ resolution: {integrity: sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==}
+ engines: {node: '>= 0.6'}
+
+ raw-body@2.5.1:
+ resolution: {integrity: sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig==}
+ engines: {node: '>= 0.8'}
+
+ react-dom@18.3.1:
+ resolution: {integrity: sha512-5m4nQKp+rZRb09LNH59GM4BxTh9251/ylbKIbpe7TpGxfJ+9kv6BLkLBXIjjspbgbnIBNqlI23tRnTWT0snUIw==}
+ peerDependencies:
+ react: ^18.3.1
+
+ react-reconciler@0.32.0:
+ resolution: {integrity: sha512-2NPMOzgTlG0ZWdIf3qG+dcbLSoAc/uLfOwckc3ofy5sSK0pLJqnQLpUFxvGcN2rlXSjnVtGeeFLNimCQEj5gOQ==}
+ engines: {node: '>=0.10.0'}
+ peerDependencies:
+ react: ^19.1.0
+
+ react-remove-scroll-bar@2.3.8:
+ resolution: {integrity: sha512-9r+yi9+mgU33AKcj6IbT9oRCO78WriSj6t/cF8DWBZJ9aOGPOTEDvdUDz1FwKim7QXWwmHqtdHnRJfhAxEG46Q==}
+ engines: {node: '>=10'}
+ peerDependencies:
+ '@types/react': '*'
+ react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0
+ peerDependenciesMeta:
+ '@types/react':
+ optional: true
+
+ react-remove-scroll@2.7.2:
+ resolution: {integrity: sha512-Iqb9NjCCTt6Hf+vOdNIZGdTiH1QSqr27H/Ek9sv/a97gfueI/5h1s3yRi1nngzMUaOOToin5dI1dXKdXiF+u0Q==}
+ engines: {node: '>=10'}
+ peerDependencies:
+ '@types/react': '*'
+ react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc
+ peerDependenciesMeta:
+ '@types/react':
+ optional: true
+
+ react-style-singleton@2.2.3:
+ resolution: {integrity: sha512-b6jSvxvVnyptAiLjbkWLE/lOnR4lfTtDAl+eUC7RZy+QQWc6wRzIV2CE6xBuMmDxc2qIihtDCZD5NPOFl7fRBQ==}
+ engines: {node: '>=10'}
+ peerDependencies:
+ '@types/react': '*'
+ react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc
+ peerDependenciesMeta:
+ '@types/react':
+ optional: true
+
+ react@19.2.3:
+ resolution: {integrity: sha512-Ku/hhYbVjOQnXDZFv2+RibmLFGwFdeeKHFcOTlrt7xplBnya5OGn/hIRDsqDiSUcfORsDC7MPxwork8jBwsIWA==}
+ engines: {node: '>=0.10.0'}
+
+ read-cache@1.0.0:
+ resolution: {integrity: sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==}
+
+ readdirp@3.6.0:
+ resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==}
+ engines: {node: '>=8.10.0'}
+
+ recma-build-jsx@1.0.0:
+ resolution: {integrity: sha512-8GtdyqaBcDfva+GUKDr3nev3VpKAhup1+RvkMvUxURHpW7QyIvk9F5wz7Vzo06CEMSilw6uArgRqhpiUcWp8ew==}
+
+ recma-jsx@1.0.1:
+ resolution: {integrity: sha512-huSIy7VU2Z5OLv6oFLosQGGDqPqdO1iq6bWNAdhzMxSJP7RAso4fCZ1cKu8j9YHCZf3TPrq4dw3okhrylgcd7w==}
+ peerDependencies:
+ acorn: ^6.0.0 || ^7.0.0 || ^8.0.0
+
+ recma-parse@1.0.0:
+ resolution: {integrity: sha512-OYLsIGBB5Y5wjnSnQW6t3Xg7q3fQ7FWbw/vcXtORTnyaSFscOtABg+7Pnz6YZ6c27fG1/aN8CjfwoUEUIdwqWQ==}
+
+ recma-stringify@1.0.0:
+ resolution: {integrity: sha512-cjwII1MdIIVloKvC9ErQ+OgAtwHBmcZ0Bg4ciz78FtbT8In39aAYbaA7zvxQ61xVMSPE8WxhLwLbhif4Js2C+g==}
+
+ reflect.getprototypeof@1.0.10:
+ resolution: {integrity: sha512-00o4I+DVrefhv+nX0ulyi3biSHCPDe+yLv5o/p6d/UVlirijB8E16FtfwSAi4g3tcqrQ4lRAqQSoFEZJehYEcw==}
+ engines: {node: '>= 0.4'}
regex-recursion@6.0.2:
resolution: {integrity: sha512-0YCaSCq2VRIebiaUviZNs0cBz1kg5kVS2UKUfNIx8YVs1cN3AV7NTctO5FOKBA+UT2BPJIWZauYHPqJODG50cg==}
@@ -1161,1202 +2839,3115 @@ packages:
regex-utilities@2.3.0:
resolution: {integrity: sha512-8VhliFJAWRaUiVvREIiW2NXXTmHs4vMNnSzuJVhscgmGav3g9VDxLrQndI3dZZVVdp0ZO/5v0xmX516/7M9cng==}
- regex@6.0.1:
- resolution: {integrity: sha512-uorlqlzAKjKQZ5P+kTJr3eeJGSVroLKoHmquUj4zHWuR+hEyNqlXsSKlYYF5F4NI6nl7tWCs0apKJ0lmfsXAPA==}
+ regex@6.1.0:
+ resolution: {integrity: sha512-6VwtthbV4o/7+OaAF9I5L5V3llLEsoPyq9P1JVXkedTP33c7MfCG0/5NOPcSJn0TzXcG9YUrR0gQSWioew3LDg==}
- reka-ui@2.6.0:
- resolution: {integrity: sha512-NrGMKrABD97l890mFS3TNUzB0BLUfbL3hh0NjcJRIUSUljb288bx3Mzo31nOyUcdiiW0HqFGXJwyCBh9cWgb0w==}
+ regexp.prototype.flags@1.5.4:
+ resolution: {integrity: sha512-dYqgNSZbDwkaJ2ceRd9ojCGjBq+mOm9LmtXnAnEGyHhN/5R7iDW2TRw3h+o/jCFxus3P2LfWIIiwowAjANm7IA==}
+ engines: {node: '>= 0.4'}
+
+ rehype-katex@7.0.1:
+ resolution: {integrity: sha512-OiM2wrZ/wuhKkigASodFoo8wimG3H12LWQaH8qSPVJn9apWKFSH3YOCtbKpBorTVw/eI7cuT21XBbvwEswbIOA==}
+
+ rehype-minify-whitespace@6.0.2:
+ resolution: {integrity: sha512-Zk0pyQ06A3Lyxhe9vGtOtzz3Z0+qZ5+7icZ/PL/2x1SHPbKao5oB/g/rlc6BCTajqBb33JcOe71Ye1oFsuYbnw==}
+
+ rehype-parse@9.0.1:
+ resolution: {integrity: sha512-ksCzCD0Fgfh7trPDxr2rSylbwq9iYDkSn8TCDmEJ49ljEUBxDVCzCHv7QNzZOfODanX4+bWQ4WZqLCRWYLfhag==}
+
+ rehype-recma@1.0.0:
+ resolution: {integrity: sha512-lqA4rGUf1JmacCNWWZx0Wv1dHqMwxzsDWYMTowuplHF3xH0N/MmrZ/G3BDZnzAkRmxDadujCjaKM2hqYdCBOGw==}
+
+ rehype-stringify@10.0.1:
+ resolution: {integrity: sha512-k9ecfXHmIPuFVI61B9DeLPN0qFHfawM6RsuX48hoqlaKSF61RskNjSm1lI8PhBEM0MRdLxVVm4WmTqJQccH9mA==}
+
+ remark-frontmatter@5.0.0:
+ resolution: {integrity: sha512-XTFYvNASMe5iPN0719nPrdItC9aU0ssC4v14mH1BCi1u0n1gAocqcujWUrByftZTbLhRtiKRyjYTSIOcr69UVQ==}
+
+ remark-gfm@4.0.0:
+ resolution: {integrity: sha512-U92vJgBPkbw4Zfu/IiW2oTZLSL3Zpv+uI7My2eq8JxKgqraFdU8YUGicEJCEgSbeaG+QDFqIcwwfMTOEelPxuA==}
+
+ remark-math@6.0.0:
+ resolution: {integrity: sha512-MMqgnP74Igy+S3WwnhQ7kqGlEerTETXMvJhrUzDikVZ2/uogJCb+WHUg97hK9/jcfc0dkD73s3LN8zU49cTEtA==}
+
+ remark-mdx-remove-esm@1.2.3:
+ resolution: {integrity: sha512-n6r36SaE+7cno7pmshWbGzYolDVLxJm5EKuw67+q4SPQT6kelNJHyZAiFYYtOB0axh+/1xF4BC57Ec3jncAGXQ==}
peerDependencies:
- vue: '>= 3.2.0'
+ unified: ^11
- rfdc@1.4.1:
- resolution: {integrity: sha512-q1b3N5QkRUWUl7iyylaaj3kOpIT0N2i9MqIEQXP73GVsN9cw3fdx8X63cEmWhJGi2PPCF23Ijp7ktmd39rawIA==}
+ remark-mdx@3.0.1:
+ resolution: {integrity: sha512-3Pz3yPQ5Rht2pM5R+0J2MrGoBSrzf+tJG94N+t/ilfdh8YLyyKYtidAYwTveB20BoHAcwIopOUqhcmh2F7hGYA==}
- robust-predicates@3.0.2:
- resolution: {integrity: sha512-IXgzBWvWQwE6PrDI05OvmXUIruQTcoMDzRsOd5CDvHCVLcLHMTSYvOK5Cm46kWqlV3yAbuSpBZdJ5oP5OUoStg==}
+ remark-mdx@3.1.0:
+ resolution: {integrity: sha512-Ngl/H3YXyBV9RcRNdlYsZujAmhsxwzxpDzpDEhFBVAGthS4GDgnctpDjgFl/ULx5UEDzqtW1cyBSNKqYYrqLBA==}
- rollup@4.52.5:
- resolution: {integrity: sha512-3GuObel8h7Kqdjt0gxkEzaifHTqLVW56Y/bjN7PSQtkKr0w3V/QYSdt6QWYtd7A1xUtYQigtdUfgj1RvWVtorw==}
- engines: {node: '>=18.0.0', npm: '>=8.0.0'}
+ remark-parse@11.0.0:
+ resolution: {integrity: sha512-FCxlKLNGknS5ba/1lmpYijMUzX2esxW5xQqjWxw2eHFfS2MSdaHVINFmhjo+qN1WhZhNimq0dZATN9pH0IDrpA==}
+
+ remark-rehype@11.1.1:
+ resolution: {integrity: sha512-g/osARvjkBXb6Wo0XvAeXQohVta8i84ACbenPpoSsxTOQH/Ae0/RGP4WZgnMH5pMLpsj4FG7OHmcIcXxpza8eQ==}
+
+ remark-smartypants@3.0.2:
+ resolution: {integrity: sha512-ILTWeOriIluwEvPjv67v7Blgrcx+LZOkAUVtKI3putuhlZm84FnqDORNXPPm+HY3NdZOMhyDwZ1E+eZB/Df5dA==}
+ engines: {node: '>=16.0.0'}
+
+ remark-stringify@11.0.0:
+ resolution: {integrity: sha512-1OSmLd3awB/t8qdoEOMazZkNsfVTeY4fTsgzcQFdXNq8ToTN4ZGwrMnlda4K6smTFKD+GRV6O48i6Z4iKgPPpw==}
+
+ remark@15.0.1:
+ resolution: {integrity: sha512-Eht5w30ruCXgFmxVUSlNWQ9iiimq07URKeFS3hNc8cUWy1llX4KDWfyEDZRycMc+znsN9Ux5/tJ/BFdgdOwA3A==}
+
+ require-directory@2.1.1:
+ resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==}
+ engines: {node: '>=0.10.0'}
+
+ require-from-string@2.0.2:
+ resolution: {integrity: sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==}
+ engines: {node: '>=0.10.0'}
+
+ resolve-alpn@1.2.1:
+ resolution: {integrity: sha512-0a1F4l73/ZFZOakJnQ3FvkJ2+gSTQWz/r2KE5OdDY0TxPm5h4GkqkWWfM47T7HsbnOtcJVEF4epCVy6u7Q3K+g==}
+
+ resolve-from@4.0.0:
+ resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==}
+ engines: {node: '>=4'}
+
+ resolve@1.22.11:
+ resolution: {integrity: sha512-RfqAvLnMl313r7c9oclB1HhUEAezcpLjz95wFH4LVuhk9JF/r22qmVP9AMmOU4vMX7Q8pN8jwNg/CSpdFnMjTQ==}
+ engines: {node: '>= 0.4'}
hasBin: true
- roughjs@4.6.6:
- resolution: {integrity: sha512-ZUz/69+SYpFN/g/lUlo2FXcIjRkSu3nDarreVdGGndHEBJ6cXPdKguS8JGxwj5HA5xIbVKSmLgr5b3AWxtRfvQ==}
+ responselike@3.0.0:
+ resolution: {integrity: sha512-40yHxbNcl2+rzXvZuVkrYohathsSJlMTXKryG5y8uciHv1+xDLHQpgjG64JUO9nrEq2jGLH6IZ8BcZyw3wrweg==}
+ engines: {node: '>=14.16'}
- rw@1.3.3:
- resolution: {integrity: sha512-PdhdWy89SiZogBLaw42zdeqtRJ//zFd2PgQavcICDUgJT5oW10QCRKbJ6bg4r0/UY2M6BWd5tkxuGFRvCkgfHQ==}
+ restore-cursor@4.0.0:
+ resolution: {integrity: sha512-I9fPXU9geO9bHOt9pHHOhOkYerIMsmVaWB0rA2AI9ERh/+x/i7MV5HKBNrg+ljO5eoPVgCcnFuRjJ9uH6I/3eg==}
+ engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
+
+ retext-latin@4.0.0:
+ resolution: {integrity: sha512-hv9woG7Fy0M9IlRQloq/N6atV82NxLGveq+3H2WOi79dtIYWN8OaxogDm77f8YnVXJL2VD3bbqowu5E3EMhBYA==}
+
+ retext-smartypants@6.2.0:
+ resolution: {integrity: sha512-kk0jOU7+zGv//kfjXEBjdIryL1Acl4i9XNkHxtM7Tm5lFiCog576fjNC9hjoR7LTKQ0DsPWy09JummSsH1uqfQ==}
+
+ retext-stringify@4.0.0:
+ resolution: {integrity: sha512-rtfN/0o8kL1e+78+uxPTqu1Klt0yPzKuQ2BfWwwfgIUSayyzxpM1PJzkKt4V8803uB9qSy32MvI7Xep9khTpiA==}
+
+ retext@9.0.0:
+ resolution: {integrity: sha512-sbMDcpHCNjvlheSgMfEcVrZko3cDzdbe1x/e7G66dFp0Ff7Mldvi2uv6JkJQzdRcvLYE8CA8Oe8siQx8ZOgTcA==}
+
+ reusify@1.1.0:
+ resolution: {integrity: sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==}
+ engines: {iojs: '>=1.0.0', node: '>=0.10.0'}
+
+ run-async@3.0.0:
+ resolution: {integrity: sha512-540WwVDOMxA6dN6We19EcT9sc3hkXPw5mzRNGM3FkdN/vtE9NFvj5lFAPNwUDmJjXidm3v7TC1cTE7t17Ulm1Q==}
+ engines: {node: '>=0.12.0'}
+
+ run-parallel@1.2.0:
+ resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==}
+
+ rxjs@7.8.2:
+ resolution: {integrity: sha512-dhKf903U/PQZY6boNNtAGdWbG85WAbjT/1xYoZIC7FAY0yWapOBQVsVrDl58W86//e1VpMNBtRV4MaXfdMySFA==}
+
+ safe-array-concat@1.1.3:
+ resolution: {integrity: sha512-AURm5f0jYEOydBj7VQlVvDrjeFgthDdEF5H1dP+6mNpoXOMo1quQqJ4wvJDyRZ9+pO3kGWoOdmV08cSv2aJV6Q==}
+ engines: {node: '>=0.4'}
+
+ safe-buffer@5.2.1:
+ resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==}
+
+ safe-push-apply@1.0.0:
+ resolution: {integrity: sha512-iKE9w/Z7xCzUMIZqdBsp6pEQvwuEebH4vdpjcDWnyzaI6yl6O9FHvVpmGelvEHNsoY6wGblkxR6Zty/h00WiSA==}
+ engines: {node: '>= 0.4'}
+
+ safe-regex-test@1.1.0:
+ resolution: {integrity: sha512-x/+Cz4YrimQxQccJf5mKEbIa1NzeCRNI5Ecl/ekmlYaampdNLPalVyIcCZNNH3MvmqBugV5TMYZXv0ljslUlaw==}
+ engines: {node: '>= 0.4'}
+
+ safe-stable-stringify@1.1.1:
+ resolution: {integrity: sha512-ERq4hUjKDbJfE4+XtZLFPCDi8Vb1JqaxAPTxWFLBx8XcAlf9Bda/ZJdVezs/NAfsMQScyIlUMx+Yeu7P7rx5jw==}
safer-buffer@2.1.2:
resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==}
- search-insights@2.17.3:
- resolution: {integrity: sha512-RQPdCYTa8A68uM2jwxoY842xDhvx3E5LFL1LxvxCNMev4o5mLuokczhzjAgGwUZBAmOKZknArSxLKmXtIi2AxQ==}
+ sax@1.4.4:
+ resolution: {integrity: sha512-1n3r/tGXO6b6VXMdFT54SHzT9ytu9yr7TaELowdYpMqY/Ao7EnlQGmAQ1+RatX7Tkkdm6hONI2owqNx2aZj5Sw==}
+ engines: {node: '>=11.0.0'}
- shiki@2.5.0:
- resolution: {integrity: sha512-mI//trrsaiCIPsja5CNfsyNOqgAZUb6VpJA+340toL42UpzQlXpwRV9nch69X6gaUxrr9kaOOa6e3y3uAkGFxQ==}
+ scheduler@0.23.2:
+ resolution: {integrity: sha512-UOShsPwz7NrMUqhR6t0hWjFduvOzbtv7toDH1/hIrfRNIDBnnBWd0CwJTGvTpngVlmwGCdP9/Zl/tVrDqcuYzQ==}
+
+ scheduler@0.26.0:
+ resolution: {integrity: sha512-NlHwttCI/l5gCPR3D1nNXtWABUmBwvZpEQiD4IXSbIDq8BzLIK/7Ir5gTFSGZDUu37K5cMNp0hFtzO38sC7gWA==}
+
+ semver@7.7.2:
+ resolution: {integrity: sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==}
+ engines: {node: '>=10'}
+ hasBin: true
+
+ send@0.18.0:
+ resolution: {integrity: sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==}
+ engines: {node: '>= 0.8.0'}
+
+ serialize-error@13.0.1:
+ resolution: {integrity: sha512-bBZaRwLH9PN5HbLCjPId4dP5bNGEtumcErgOX952IsvOhVPrm3/AeK1y0UHA/QaPG701eg0yEnOKsCOC6X/kaA==}
+ engines: {node: '>=20'}
+
+ serve-static@1.15.0:
+ resolution: {integrity: sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==}
+ engines: {node: '>= 0.8.0'}
+
+ set-function-length@1.2.2:
+ resolution: {integrity: sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==}
+ engines: {node: '>= 0.4'}
+
+ set-function-name@2.0.2:
+ resolution: {integrity: sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ==}
+ engines: {node: '>= 0.4'}
+
+ set-proto@1.0.0:
+ resolution: {integrity: sha512-RJRdvCo6IAnPdsvP/7m6bsQqNnn1FCBX5ZNtFL98MmFF/4xAIJTIg1YbHW5DC2W5SKZanrC6i4HsJqlajw/dZw==}
+ engines: {node: '>= 0.4'}
+
+ setprototypeof@1.2.0:
+ resolution: {integrity: sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==}
+
+ sharp-ico@0.1.5:
+ resolution: {integrity: sha512-a3jODQl82NPp1d5OYb0wY+oFaPk7AvyxipIowCHk7pBsZCWgbe0yAkU2OOXdoH0ENyANhyOQbs9xkAiRHcF02Q==}
+
+ sharp@0.33.5:
+ resolution: {integrity: sha512-haPVm1EkS9pgvHrQ/F3Xy+hgcuMV0Wm9vfIBSiwZ05k+xgb0PkBQpGsAA/oWdDobNaZTH5ppvHtzCFbnSEwHVw==}
+ engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0}
+
+ shiki@3.22.0:
+ resolution: {integrity: sha512-LBnhsoYEe0Eou4e1VgJACes+O6S6QC0w71fCSp5Oya79inkwkm15gQ1UF6VtQ8j/taMDh79hAB49WUk8ALQW3g==}
+
+ side-channel-list@1.0.0:
+ resolution: {integrity: sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==}
+ engines: {node: '>= 0.4'}
+
+ side-channel-map@1.0.1:
+ resolution: {integrity: sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==}
+ engines: {node: '>= 0.4'}
+
+ side-channel-weakmap@1.0.2:
+ resolution: {integrity: sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==}
+ engines: {node: '>= 0.4'}
+
+ side-channel@1.1.0:
+ resolution: {integrity: sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==}
+ engines: {node: '>= 0.4'}
+
+ signal-exit@3.0.7:
+ resolution: {integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==}
+
+ signal-exit@4.1.0:
+ resolution: {integrity: sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==}
+ engines: {node: '>=14'}
+
+ simple-eval@1.0.1:
+ resolution: {integrity: sha512-LH7FpTAkeD+y5xQC4fzS+tFtaNlvt3Ib1zKzvhjv/Y+cioV4zIuw4IZr2yhRLu67CWL7FR9/6KXKnjRoZTvGGQ==}
+ engines: {node: '>=12'}
+
+ simple-swizzle@0.2.4:
+ resolution: {integrity: sha512-nAu1WFPQSMNr2Zn9PGSZK9AGn4t/y97lEm+MXTtUDwfP0ksAIX4nO+6ruD9Jwut4C49SB1Ws+fbXsm/yScWOHw==}
+
+ slice-ansi@5.0.0:
+ resolution: {integrity: sha512-FC+lgizVPfie0kkhqUScwRu1O/lF6NOgJmlCgK+/LYxDCTk8sGelYaHDhFcDN+Sn3Cv+3VSa4Byeo+IMCzpMgQ==}
+ engines: {node: '>=12'}
+
+ slice-ansi@7.1.2:
+ resolution: {integrity: sha512-iOBWFgUX7caIZiuutICxVgX1SdxwAVFFKwt1EvMYYec/NWO5meOJ6K5uQxhrYBdQJne4KxiqZc+KptFOWFSI9w==}
+ engines: {node: '>=18'}
+
+ smart-buffer@4.2.0:
+ resolution: {integrity: sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==}
+ engines: {node: '>= 6.0.0', npm: '>= 3.0.0'}
+
+ socket.io-adapter@2.5.6:
+ resolution: {integrity: sha512-DkkO/dz7MGln0dHn5bmN3pPy+JmywNICWrJqVWiVOyvXjWQFIv9c2h24JrQLLFJ2aQVQf/Cvl1vblnd4r2apLQ==}
+
+ socket.io-parser@4.2.5:
+ resolution: {integrity: sha512-bPMmpy/5WWKHea5Y/jYAP6k74A+hvmRCQaJuJB6I/ML5JZq/KfNieUVo/3Mh7SAqn7TyFdIo6wqYHInG1MU1bQ==}
+ engines: {node: '>=10.0.0'}
+
+ socket.io@4.7.2:
+ resolution: {integrity: sha512-bvKVS29/I5fl2FGLNHuXlQaUH/BlzX1IN6S+NKLNZpBsPZIDH+90eQmCs2Railn4YUiww4SzUedJ6+uzwFnKLw==}
+ engines: {node: '>=10.2.0'}
+
+ socks-proxy-agent@8.0.5:
+ resolution: {integrity: sha512-HehCEsotFqbPW9sJ8WVYB6UbmIMv7kUUORIF2Nncq4VQvBfNBLibW9YZR5dlYCSUhwcD628pRllm7n+E+YTzJw==}
+ engines: {node: '>= 14'}
+
+ socks@2.8.7:
+ resolution: {integrity: sha512-HLpt+uLy/pxB+bum/9DzAgiKS8CX1EvbWxI4zlmgGCExImLdiad2iCwXT5Z4c9c3Eq8rP2318mPW2c+QbtjK8A==}
+ engines: {node: '>= 10.0.0', npm: '>= 3.0.0'}
source-map-js@1.2.1:
resolution: {integrity: sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==}
engines: {node: '>=0.10.0'}
+ source-map@0.6.1:
+ resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==}
+ engines: {node: '>=0.10.0'}
+
+ source-map@0.7.6:
+ resolution: {integrity: sha512-i5uvt8C3ikiWeNZSVZNWcfZPItFQOsYTUAOkcUPGd8DqDy1uOUikjt5dG+uRlwyvR108Fb9DOd4GvXfT0N2/uQ==}
+ engines: {node: '>= 12'}
+
space-separated-tokens@2.0.2:
resolution: {integrity: sha512-PEGlAwrG8yXGXRjW32fGbg66JAlOAwbObuqVoJpv/mRgoWDQfgH1wDPvtzWyUSNAXBGSk8h755YDbbcEy3SH2Q==}
- speakingurl@14.0.1:
- resolution: {integrity: sha512-1POYv7uv2gXoyGFpBCmpDVSNV74IfsWlDW216UPjbWufNf+bSU6GdbDsxdcxtfwb4xlI3yxzOTKClUosxARYrQ==}
- engines: {node: '>=0.10.0'}
+ sprintf-js@1.0.3:
+ resolution: {integrity: sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==}
+
+ stack-utils@2.0.6:
+ resolution: {integrity: sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ==}
+ engines: {node: '>=10'}
+
+ statuses@2.0.1:
+ resolution: {integrity: sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==}
+ engines: {node: '>= 0.8'}
+
+ stop-iteration-iterator@1.1.0:
+ resolution: {integrity: sha512-eLoXW/DHyl62zxY4SCaIgnRhuMr6ri4juEYARS8E6sCEqzKpOiE521Ucofdx+KnDZl5xmvGYaaKCk5FEOxJCoQ==}
+ engines: {node: '>= 0.4'}
+
+ streamx@2.23.0:
+ resolution: {integrity: sha512-kn+e44esVfn2Fa/O0CPFcex27fjIL6MkVae0Mm6q+E6f0hWv578YCERbv+4m02cjxvDsPKLnmxral/rR6lBMAg==}
+
+ string-width@4.2.3:
+ resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==}
+ engines: {node: '>=8'}
+
+ string-width@7.2.0:
+ resolution: {integrity: sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==}
+ engines: {node: '>=18'}
+
+ string.prototype.trim@1.2.10:
+ resolution: {integrity: sha512-Rs66F0P/1kedk5lyYyH9uBzuiI/kNRmwJAR9quK6VOtIpZ2G+hMZd+HQbbv25MgCA6gEffoMZYxlTod4WcdrKA==}
+ engines: {node: '>= 0.4'}
+
+ string.prototype.trimend@1.0.9:
+ resolution: {integrity: sha512-G7Ok5C6E/j4SGfyLCloXTrngQIQU3PWtXGst3yM7Bea9FRURf1S42ZHlZZtsNque2FN2PoUhfZXYLNWwEr4dLQ==}
+ engines: {node: '>= 0.4'}
+
+ string.prototype.trimstart@1.0.8:
+ resolution: {integrity: sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg==}
+ engines: {node: '>= 0.4'}
stringify-entities@4.0.4:
resolution: {integrity: sha512-IwfBptatlO+QCJUo19AqvrPNqlVMpW9YEL2LIVY+Rpv2qsjCGxaDLNRgeGsQWJhfItebuJhsGSLjaBbNSQ+ieg==}
- stylis@4.3.6:
- resolution: {integrity: sha512-yQ3rwFWRfwNUY7H5vpU0wfdkNSnvnJinhF9830Swlaxl03zsOjCfmX0ugac+3LtK0lYSgwL/KXc8oYL3mG4YFQ==}
+ strip-ansi@6.0.1:
+ resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==}
+ engines: {node: '>=8'}
- superjson@2.2.5:
- resolution: {integrity: sha512-zWPTX96LVsA/eVYnqOM2+ofcdPqdS1dAF1LN4TS2/MWuUpfitd9ctTa87wt4xrYnZnkLtS69xpBdSxVBP5Rm6w==}
- engines: {node: '>=16'}
+ strip-ansi@7.1.2:
+ resolution: {integrity: sha512-gmBGslpoQJtgnMAvOVqGZpEz9dyoKTCzy2nfz/n8aIFhN/jCE/rCmcxabB6jOOHV+0WNnylOxaxBQPSvcWklhA==}
+ engines: {node: '>=12'}
- tabbable@6.3.0:
- resolution: {integrity: sha512-EIHvdY5bPLuWForiR/AN2Bxngzpuwn1is4asboytXtpTgsArc+WmSJKVLlhdh71u7jFcryDqB2A8lQvj78MkyQ==}
+ style-to-js@1.1.21:
+ resolution: {integrity: sha512-RjQetxJrrUJLQPHbLku6U/ocGtzyjbJMP9lCNK7Ag0CNh690nSH8woqWH9u16nMjYBAok+i7JO1NP2pOy8IsPQ==}
- tinyexec@1.0.2:
- resolution: {integrity: sha512-W/KYk+NFhkmsYpuHq5JykngiOCnxeVL8v8dFnqxSD8qEEdRfXk1SDM6JzNqcERbcGYj9tMrDQBYV9cjgnunFIg==}
- engines: {node: '>=18'}
+ style-to-object@1.0.14:
+ resolution: {integrity: sha512-LIN7rULI0jBscWQYaSswptyderlarFkjQ+t79nzty8tcIAceVomEVlLzH5VP4Cmsv6MtKhs7qaAiwlcp+Mgaxw==}
+
+ sucrase@3.35.1:
+ resolution: {integrity: sha512-DhuTmvZWux4H1UOnWMB3sk0sbaCVOoQZjv8u1rDoTV0HTdGem9hkAZtl4JZy8P2z4Bg0nT+YMeOFyVr4zcG5Tw==}
+ engines: {node: '>=16 || 14 >=14.17'}
+ hasBin: true
+
+ supports-preserve-symlinks-flag@1.0.0:
+ resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==}
+ engines: {node: '>= 0.4'}
+
+ tagged-tag@1.0.0:
+ resolution: {integrity: sha512-yEFYrVhod+hdNyx7g5Bnkkb0G6si8HJurOoOEgC8B/O0uXLHlaey/65KRv6cuWBNhBgHKAROVpc7QyYqE5gFng==}
+ engines: {node: '>=20'}
+
+ tailwindcss@3.4.4:
+ resolution: {integrity: sha512-ZoyXOdJjISB7/BcLTR6SEsLgKtDStYyYZVLsUtWChO4Ps20CBad7lfJKVDiejocV4ME1hLmyY0WJE3hSDcmQ2A==}
+ engines: {node: '>=14.0.0'}
+ hasBin: true
+
+ tar-fs@3.1.1:
+ resolution: {integrity: sha512-LZA0oaPOc2fVo82Txf3gw+AkEd38szODlptMYejQUhndHMLQ9M059uXR+AfS7DNo0NpINvSqDsvyaCrBVkptWg==}
+
+ tar-stream@3.1.7:
+ resolution: {integrity: sha512-qJj60CXt7IU1Ffyc3NJMjh6EkuCFej46zUqJ4J7pqYlThyd9bO0XBTmcOIhSzZJVWfsLks0+nle/j538YAW9RQ==}
+
+ tar@6.1.15:
+ resolution: {integrity: sha512-/zKt9UyngnxIT/EAGYuxaMYgOIJiP81ab9ZfkILq4oNLPFX50qyYmu7jRj9qeXoxmJHjGlbH0+cm2uy1WCs10A==}
+ engines: {node: '>=10'}
+ deprecated: Old versions of tar are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me
+
+ teex@1.0.1:
+ resolution: {integrity: sha512-eYE6iEI62Ni1H8oIa7KlDU6uQBtqr4Eajni3wX7rpfXD8ysFx8z0+dri+KWEPWpBsxXfxu58x/0jvTVT1ekOSg==}
+
+ text-decoder@1.2.7:
+ resolution: {integrity: sha512-vlLytXkeP4xvEq2otHeJfSQIRyWxo/oZGEbXrtEEF9Hnmrdly59sUbzZ/QgyWuLYHctCHxFF4tRQZNQ9k60ExQ==}
+
+ thenify-all@1.6.0:
+ resolution: {integrity: sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==}
+ engines: {node: '>=0.8'}
+
+ thenify@3.3.1:
+ resolution: {integrity: sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==}
+
+ through@2.3.8:
+ resolution: {integrity: sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==}
+
+ tinyglobby@0.2.15:
+ resolution: {integrity: sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ==}
+ engines: {node: '>=12.0.0'}
+
+ to-data-view@1.1.0:
+ resolution: {integrity: sha512-1eAdufMg6mwgmlojAx3QeMnzB/BTVp7Tbndi3U7ftcT2zCZadjxkkmLmd97zmaxWi+sgGcgWrokmpEoy0Dn0vQ==}
+
+ to-regex-range@5.0.1:
+ resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==}
+ engines: {node: '>=8.0'}
+
+ toidentifier@1.0.1:
+ resolution: {integrity: sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==}
+ engines: {node: '>=0.6'}
+
+ tr46@0.0.3:
+ resolution: {integrity: sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==}
trim-lines@3.0.1:
resolution: {integrity: sha512-kRj8B+YHZCc9kQYdWfJB2/oUl9rA99qbowYYBtr4ui4mZyAQ2JpvVBd/6U2YloATfqBhBTSMhTpgBHtU0Mf3Rg==}
- ts-dedent@2.2.0:
- resolution: {integrity: sha512-q5W7tVM71e2xjHZTlgfTDoPF/SmqKG5hddq9SzR49CH2hayqRKJtQ4mtRlSxKaJlR/+9rEM+mnBHf7I2/BQcpQ==}
- engines: {node: '>=6.10'}
+ trim-trailing-lines@2.1.0:
+ resolution: {integrity: sha512-5UR5Biq4VlVOtzqkm2AZlgvSlDJtME46uV0br0gENbwN4l5+mMKT4b9gJKqWtuL2zAIqajGJGuvbCbcAJUZqBg==}
+
+ trough@2.2.0:
+ resolution: {integrity: sha512-tmMpK00BjZiUyVyvrBK7knerNgmgvcV/KLVyuma/SC+TQN167GrMRciANTz09+k3zW8L8t60jWO1GpfkZdjTaw==}
+
+ ts-interface-checker@0.1.13:
+ resolution: {integrity: sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==}
+
+ tslib@1.14.1:
+ resolution: {integrity: sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==}
tslib@2.8.1:
resolution: {integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==}
- ufo@1.6.1:
- resolution: {integrity: sha512-9a4/uxlTWJ4+a5i0ooc1rU7C7YOw3wT+UGqdeNNHWnOF9qcMBgLRS+4IYUqbczewFx4mLEig6gawh7X6mFlEkA==}
+ twoslash-protocol@0.3.6:
+ resolution: {integrity: sha512-FHGsJ9Q+EsNr5bEbgG3hnbkvEBdW5STgPU824AHUjB4kw0Dn4p8tABT7Ncg1Ie6V0+mDg3Qpy41VafZXcQhWMA==}
+
+ twoslash@0.3.6:
+ resolution: {integrity: sha512-VuI5OKl+MaUO9UIW3rXKoPgHI3X40ZgB/j12VY6h98Ae1mCBihjPvhOPeJWlxCYcmSbmeZt5ZKkK0dsVtp+6pA==}
+ peerDependencies:
+ typescript: ^5.5.0
+
+ type-fest@0.21.3:
+ resolution: {integrity: sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==}
+ engines: {node: '>=10'}
+
+ type-fest@4.41.0:
+ resolution: {integrity: sha512-TeTSQ6H5YHvpqVwBRcnLDCBnDOHWYu7IvGbHT6N8AOymcr9PJGjc1GTtiWZTYg0NCgYwvnYWEkVChQAr9bjfwA==}
+ engines: {node: '>=16'}
+
+ type-fest@5.4.4:
+ resolution: {integrity: sha512-JnTrzGu+zPV3aXIUhnyWJj4z/wigMsdYajGLIYakqyOW1nPllzXEJee0QQbHj+CTIQtXGlAjuK0UY+2xTyjVAw==}
+ engines: {node: '>=20'}
+
+ type-is@1.6.18:
+ resolution: {integrity: sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==}
+ engines: {node: '>= 0.6'}
+
+ typed-array-buffer@1.0.3:
+ resolution: {integrity: sha512-nAYYwfY3qnzX30IkA6AQZjVbtK6duGontcQm1WSG1MD94YLqK0515GNApXkoxKOWMusVssAHWLh9SeaoefYFGw==}
+ engines: {node: '>= 0.4'}
+
+ typed-array-byte-length@1.0.3:
+ resolution: {integrity: sha512-BaXgOuIxz8n8pIq3e7Atg/7s+DpiYrxn4vdot3w9KbnBhcRQq6o3xemQdIfynqSeXeDrF32x+WvfzmOjPiY9lg==}
+ engines: {node: '>= 0.4'}
+
+ typed-array-byte-offset@1.0.4:
+ resolution: {integrity: sha512-bTlAFB/FBYMcuX81gbL4OcpH5PmlFHqlCCpAl8AlEzMz5k53oNDvN8p1PNOWLEmI2x4orp3raOFB51tv9X+MFQ==}
+ engines: {node: '>= 0.4'}
+
+ typed-array-length@1.0.7:
+ resolution: {integrity: sha512-3KS2b+kL7fsuk/eJZ7EQdnEmQoaho/r6KUef7hxvltNA5DR8NAUM+8wJMbJyZ4G9/7i3v5zPBIMN5aybAh2/Jg==}
+ engines: {node: '>= 0.4'}
+
+ typescript@5.9.3:
+ resolution: {integrity: sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==}
+ engines: {node: '>=14.17'}
+ hasBin: true
+
+ unbox-primitive@1.1.0:
+ resolution: {integrity: sha512-nWJ91DjeOkej/TA8pXQ3myruKpKEYgqvpw9lz4OPHj/NWFNluYrjbz9j01CJ8yKQd2g4jFoOkINCTW2I5LEEyw==}
+ engines: {node: '>= 0.4'}
+
+ unbzip2-stream@1.4.3:
+ resolution: {integrity: sha512-mlExGW4w71ebDJviH16lQLtZS32VKqsSfk80GCfUlwT/4/hNRFsoscrF/c++9xinkMzECL1uL9DDwXqFWkruPg==}
+
+ undici-types@7.18.2:
+ resolution: {integrity: sha512-AsuCzffGHJybSaRrmr5eHr81mwJU3kjw6M+uprWvCXiNeN9SOGwQ3Jn8jb8m3Z6izVgknn1R0FTCEAP2QrLY/w==}
+
+ unified@11.0.5:
+ resolution: {integrity: sha512-xKvGhPWw3k84Qjh8bI3ZeJjqnyadK+GEFtazSfZv/rKeTkTjOJho6mFqh2SM96iIcZokxiOpg78GazTSg8+KHA==}
+
+ unist-builder@4.0.0:
+ resolution: {integrity: sha512-wmRFnH+BLpZnTKpc5L7O67Kac89s9HMrtELpnNaE6TAobq5DTZZs5YaTQfAZBA9bFPECx2uVAPO31c+GVug8mg==}
+
+ unist-util-find-after@5.0.0:
+ resolution: {integrity: sha512-amQa0Ep2m6hE2g72AugUItjbuM8X8cGQnFoHk0pGfrFeT9GZhzN5SW8nRsiGKK7Aif4CrACPENkA6P/Lw6fHGQ==}
+
+ unist-util-is@5.2.1:
+ resolution: {integrity: sha512-u9njyyfEh43npf1M+yGKDGVPbY/JWEemg5nH05ncKPfi+kBbKBJoTdsogMu33uhytuLlv9y0O7GH7fEdwLdLQw==}
unist-util-is@6.0.1:
resolution: {integrity: sha512-LsiILbtBETkDz8I9p1dQ0uyRUWuaQzd/cuEeS1hoRSyW5E5XGmTzlwY1OrNzzakGowI9Dr/I8HVaw4hTtnxy8g==}
+ unist-util-map@4.0.0:
+ resolution: {integrity: sha512-HJs1tpkSmRJUzj6fskQrS5oYhBYlmtcvy4SepdDEEsL04FjBrgF0Mgggvxc1/qGBGgW7hRh9+UBK1aqTEnBpIA==}
+
+ unist-util-modify-children@4.0.0:
+ resolution: {integrity: sha512-+tdN5fGNddvsQdIzUF3Xx82CU9sMM+fA0dLgR9vOmT0oPT2jH+P1nd5lSqfCfXAw+93NhcXNY2qqvTUtE4cQkw==}
+
+ unist-util-position-from-estree@2.0.0:
+ resolution: {integrity: sha512-KaFVRjoqLyF6YXCbVLNad/eS4+OfPQQn2yOd7zF/h5T/CSL2v8NpN6a5TPvtbXthAGw5nG+PuTtq+DdIZr+cRQ==}
+
unist-util-position@5.0.0:
resolution: {integrity: sha512-fucsC7HjXvkB5R3kTCO7kUjRdrS0BJt3M/FPxmHMBOm8JQi2BsHAHFsy27E0EolP8rp0NzXsJ+jNPyDWvOJZPA==}
+ unist-util-remove-position@5.0.0:
+ resolution: {integrity: sha512-Hp5Kh3wLxv0PHj9m2yZhhLt58KzPtEYKQQ4yxfYFEO7EvHwzyDYnduhHnY1mDxoqr7VUwVuHXk9RXKIiYS1N8Q==}
+
+ unist-util-remove@4.0.0:
+ resolution: {integrity: sha512-b4gokeGId57UVRX/eVKej5gXqGlc9+trkORhFJpu9raqZkZhU0zm8Doi05+HaiBsMEIJowL+2WtQ5ItjsngPXg==}
+
unist-util-stringify-position@4.0.0:
resolution: {integrity: sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==}
+ unist-util-visit-children@3.0.0:
+ resolution: {integrity: sha512-RgmdTfSBOg04sdPcpTSD1jzoNBjt9a80/ZCzp5cI9n1qPzLZWF9YdvWGN2zmTumP1HWhXKdUWexjy/Wy/lJ7tA==}
+
+ unist-util-visit-parents@5.1.3:
+ resolution: {integrity: sha512-x6+y8g7wWMyQhL1iZfhIPhDAs7Xwbn9nRosDXl7qoPTSCy0yNxnKc+hWokFifWQIDGi154rdUqKvbCa4+1kLhg==}
+
+ unist-util-visit-parents@6.0.1:
+ resolution: {integrity: sha512-L/PqWzfTP9lzzEa6CKs0k2nARxTdZduw3zyh8d2NVBnsyvHjSX4TWse388YrrQKbvI8w20fGjGlhgT96WwKykw==}
+
unist-util-visit-parents@6.0.2:
resolution: {integrity: sha512-goh1s1TBrqSqukSc8wrjwWhL0hiJxgA8m4kFxGlQ+8FYQ3C/m11FcTs4YYem7V664AhHVvgoQLk890Ssdsr2IQ==}
+ unist-util-visit@4.1.2:
+ resolution: {integrity: sha512-MSd8OUGISqHdVvfY9TPhyK2VdUrPgxkUtWSuMHF6XAAFuL4LokseigBnZtPnJMu+FbynTkFNnFlyjxpVKujMRg==}
+
unist-util-visit@5.0.0:
resolution: {integrity: sha512-MR04uvD+07cwl/yhVuVWAtw+3GOR/knlL55Nd/wAdblk27GCVt3lqpTivy/tkJcZoNPzTwS1Y+KMojlLDhoTzg==}
+ universalify@2.0.1:
+ resolution: {integrity: sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==}
+ engines: {node: '>= 10.0.0'}
+
+ unpipe@1.0.0:
+ resolution: {integrity: sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==}
+ engines: {node: '>= 0.8'}
+
+ urijs@1.19.11:
+ resolution: {integrity: sha512-HXgFDgDommxn5/bIv0cnQZsPhHDA90NPHD6+c/v21U5+Sx5hoP8+dP9IZXBU1gIfvdRfhG8cel9QNPeionfcCQ==}
+
+ urlpattern-polyfill@10.0.0:
+ resolution: {integrity: sha512-H/A06tKD7sS1O1X2SshBVeA5FLycRpjqiBeqGKmBwBDBy28EnRjORxTNe269KSSr5un5qyWi1iL61wLxpd+ZOg==}
+
+ use-callback-ref@1.3.3:
+ resolution: {integrity: sha512-jQL3lRnocaFtu3V00JToYz/4QkNWswxijDaCVNZRiRTO3HQDLsdu1ZtmIUvV4yPp+rvWm5j0y0TG/S61cuijTg==}
+ engines: {node: '>=10'}
+ peerDependencies:
+ '@types/react': '*'
+ react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc
+ peerDependenciesMeta:
+ '@types/react':
+ optional: true
+
+ use-sidecar@1.1.3:
+ resolution: {integrity: sha512-Fedw0aZvkhynoPYlA5WXrMCAMm+nSWdZt6lzJQ7Ok8S6Q+VsHmHpRWndVRJ8Be0ZbkfPc5LRYH+5XrzXcEeLRQ==}
+ engines: {node: '>=10'}
+ peerDependencies:
+ '@types/react': '*'
+ react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc
+ peerDependenciesMeta:
+ '@types/react':
+ optional: true
+
+ util-deprecate@1.0.2:
+ resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==}
+
+ utility-types@3.11.0:
+ resolution: {integrity: sha512-6Z7Ma2aVEWisaL6TvBCy7P8rm2LQoPv6dJ7ecIaIixHcwfbJ0x7mWdbcwlIM5IGQxPZSFYeqRCqlOOeKoJYMkw==}
+ engines: {node: '>= 4'}
+
+ utils-merge@1.0.1:
+ resolution: {integrity: sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==}
+ engines: {node: '>= 0.4.0'}
+
uuid@11.1.0:
resolution: {integrity: sha512-0/A9rDy9P7cJ+8w1c9WD9V//9Wj15Ce2MPz8Ri6032usz+NfePxx5AcN3bN+r6ZL6jEo066/yNYB3tn4pQEx+A==}
hasBin: true
+ vary@1.1.2:
+ resolution: {integrity: sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==}
+ engines: {node: '>= 0.8'}
+
+ vfile-location@5.0.3:
+ resolution: {integrity: sha512-5yXvWDEgqeiYiBe1lbxYF7UMAIm/IcopxMHrMQDq3nvKcjPKIhZklUKL+AE7J7uApI4kwe2snsK+eI6UTj9EHg==}
+
+ vfile-matter@5.0.1:
+ resolution: {integrity: sha512-o6roP82AiX0XfkyTHyRCMXgHfltUNlXSEqCIS80f+mbAyiQBE2fxtDVMtseyytGx75sihiJFo/zR6r/4LTs2Cw==}
+
vfile-message@4.0.3:
resolution: {integrity: sha512-QTHzsGd1EhbZs4AsQ20JX1rC3cOlt/IWJruk893DfLRr57lcnOeMaWG4K0JrRta4mIJZKth2Au3mM3u03/JWKw==}
vfile@6.0.3:
resolution: {integrity: sha512-KzIbH/9tXat2u30jf+smMwFCsno4wHVdNmzFyL+T/L3UGqqk6JKfVqOFOZEpZSHADH1k40ab6NUIXZq422ov3Q==}
- vite@5.4.21:
- resolution: {integrity: sha512-o5a9xKjbtuhY6Bi5S3+HvbRERmouabWbyUcpXXUA1u+GNUKoROi9byOJ8M0nHbHYHkYICiMlqxkg1KkYmm25Sw==}
- engines: {node: ^18.0.0 || >=20.0.0}
- hasBin: true
+ web-namespaces@2.0.1:
+ resolution: {integrity: sha512-bKr1DkiNa2krS7qxNtdrtHAmzuYGFQLiQ13TsorsdT6ULTkPLKuu5+GsFpDlg6JFjUTwX2DyhMPG2be8uPrqsQ==}
+
+ webidl-conversions@3.0.1:
+ resolution: {integrity: sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==}
+
+ whatwg-url@5.0.0:
+ resolution: {integrity: sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==}
+
+ which-boxed-primitive@1.1.1:
+ resolution: {integrity: sha512-TbX3mj8n0odCBFVlY8AxkqcHASw3L60jIuF8jFP78az3C2YhmGvqbHBpAjTRH2/xqYunrJ9g1jSyjCjpoWzIAA==}
+ engines: {node: '>= 0.4'}
+
+ which-builtin-type@1.2.1:
+ resolution: {integrity: sha512-6iBczoX+kDQ7a3+YJBnh3T+KZRxM/iYNPXicqk66/Qfm1b93iu+yOImkg0zHbj5LNOcNv1TEADiZ0xa34B4q6Q==}
+ engines: {node: '>= 0.4'}
+
+ which-collection@1.0.2:
+ resolution: {integrity: sha512-K4jVyjnBdgvc86Y6BkaLZEN933SwYOuBFkdmBu9ZfkcAbdVbpITnDmjvZ/aQjRXQrv5EPkTnD1s39GiiqbngCw==}
+ engines: {node: '>= 0.4'}
+
+ which-typed-array@1.1.20:
+ resolution: {integrity: sha512-LYfpUkmqwl0h9A2HL09Mms427Q1RZWuOHsukfVcKRq9q95iQxdw0ix1JQrqbcDR9PH1QDwf5Qo8OZb5lksZ8Xg==}
+ engines: {node: '>= 0.4'}
+
+ widest-line@5.0.0:
+ resolution: {integrity: sha512-c9bZp7b5YtRj2wOe6dlj32MK+Bx/M/d+9VB2SHM1OtsUHR0aV0tdP6DWh/iMt0kWi1t5g1Iudu6hQRNd1A4PVA==}
+ engines: {node: '>=18'}
+
+ wrap-ansi@6.2.0:
+ resolution: {integrity: sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==}
+ engines: {node: '>=8'}
+
+ wrap-ansi@7.0.0:
+ resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==}
+ engines: {node: '>=10'}
+
+ wrap-ansi@9.0.2:
+ resolution: {integrity: sha512-42AtmgqjV+X1VpdOfyTGOYRi0/zsoLqtXQckTmqTeybT+BDIbM/Guxo7x3pE2vtpr1ok6xRqM9OpBe+Jyoqyww==}
+ engines: {node: '>=18'}
+
+ wrappy@1.0.2:
+ resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==}
+
+ ws@8.17.1:
+ resolution: {integrity: sha512-6XQFvXTkbfUOZOKKILFG1PDK2NDQs4azKQl26T0YS5CxqWLgXajbPZ+h4gZekJyRqFU8pvnbAbbs/3TgRPy+GQ==}
+ engines: {node: '>=10.0.0'}
peerDependencies:
- '@types/node': ^18.0.0 || >=20.0.0
- less: '*'
- lightningcss: ^1.21.0
- sass: '*'
- sass-embedded: '*'
- stylus: '*'
- sugarss: '*'
- terser: ^5.4.0
+ bufferutil: ^4.0.1
+ utf-8-validate: '>=5.0.2'
peerDependenciesMeta:
- '@types/node':
+ bufferutil:
optional: true
- less:
- optional: true
- lightningcss:
- optional: true
- sass:
- optional: true
- sass-embedded:
- optional: true
- stylus:
- optional: true
- sugarss:
- optional: true
- terser:
+ utf-8-validate:
optional: true
- vitepress-openapi@0.1.10:
- resolution: {integrity: sha512-Pu7h2EFM0yvrjSgDsoBhWaRKTTl+5Z21lmkjh1aFtZk7f3CXD0pTXrUOh/3juBUmLv+zoS3t4vSGKtll2Cd6mw==}
+ ws@8.18.3:
+ resolution: {integrity: sha512-PEIGCY5tSlUt50cqyMXfCzX+oOPqN0vuGqWzbcJ2xvnkzkq46oOpz7dQaTDBdfICb4N14+GARUDw2XV2N4tvzg==}
+ engines: {node: '>=10.0.0'}
peerDependencies:
- vitepress: '>=1.0.0'
- vue: ^3.0.0
-
- vitepress@1.6.4:
- resolution: {integrity: sha512-+2ym1/+0VVrbhNyRoFFesVvBvHAVMZMK0rw60E3X/5349M1GuVdKeazuksqopEdvkKwKGs21Q729jX81/bkBJg==}
- hasBin: true
- peerDependencies:
- markdown-it-mathjax3: ^4
- postcss: ^8
+ bufferutil: ^4.0.1
+ utf-8-validate: '>=5.0.2'
peerDependenciesMeta:
- markdown-it-mathjax3:
+ bufferutil:
optional: true
- postcss:
+ utf-8-validate:
optional: true
- vscode-jsonrpc@8.2.0:
- resolution: {integrity: sha512-C+r0eKJUIfiDIfwJhria30+TYWPtuHJXHtI7J0YlOmKAo7ogxP20T0zxB7HZQIFhIyvoBPwWskjxrvAtfjyZfA==}
- engines: {node: '>=14.0.0'}
+ ws@8.19.0:
+ resolution: {integrity: sha512-blAT2mjOEIi0ZzruJfIhb3nps74PRWTCz1IjglWEEpQl5XS/UNama6u2/rjFkDDouqr4L67ry+1aGIALViWjDg==}
+ engines: {node: '>=10.0.0'}
+ peerDependencies:
+ bufferutil: ^4.0.1
+ utf-8-validate: '>=5.0.2'
+ peerDependenciesMeta:
+ bufferutil:
+ optional: true
+ utf-8-validate:
+ optional: true
- vscode-languageserver-protocol@3.17.5:
- resolution: {integrity: sha512-mb1bvRJN8SVznADSGWM9u/b07H7Ecg0I3OgXDuLdn307rl/J3A9YD6/eYOssqhecL27hK1IPZAsaqh00i/Jljg==}
+ xml2js@0.6.2:
+ resolution: {integrity: sha512-T4rieHaC1EXcES0Kxxj4JWgaUQHDk+qwHcYOCFHfiwKz7tOVPLq7Hjq9dM1WCMhylqMEfP7hMcOIChvotiZegA==}
+ engines: {node: '>=4.0.0'}
- vscode-languageserver-textdocument@1.0.12:
- resolution: {integrity: sha512-cxWNPesCnQCcMPeenjKKsOCKQZ/L6Tv19DTRIGuLWe32lyzWhihGVJ/rcckZXJxfdKCFvRLS3fpBIsV/ZGX4zA==}
+ xmlbuilder@11.0.1:
+ resolution: {integrity: sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA==}
+ engines: {node: '>=4.0'}
- vscode-languageserver-types@3.17.5:
- resolution: {integrity: sha512-Ld1VelNuX9pdF39h2Hgaeb5hEZM2Z3jUrrMgWQAu82jMtZp7p3vJT3BzToKtZI7NgQssZje5o0zryOrhQvzQAg==}
+ y18n@5.0.8:
+ resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==}
+ engines: {node: '>=10'}
- vscode-languageserver@9.0.1:
- resolution: {integrity: sha512-woByF3PDpkHFUreUa7Hos7+pUWdeWMXRd26+ZX2A8cFx6v/JPTtd4/uN0/jB6XQHYaOlHbio03NTHCqrgG5n7g==}
+ yallist@4.0.0:
+ resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==}
+
+ yaml@2.8.2:
+ resolution: {integrity: sha512-mplynKqc1C2hTVYxd0PU2xQAc22TI1vShAYGksCCfxbn/dFwnHTNi1bvYsBTkhdUNtGIf5xNOg938rrSSYvS9A==}
+ engines: {node: '>= 14.6'}
hasBin: true
- vscode-uri@3.0.8:
- resolution: {integrity: sha512-AyFQ0EVmsOZOlAnxoFOGOq1SQDWAB7C6aqMGS23svWAllfOaxbuFvcT8D1i8z3Gyn8fraVeZNNmN6e9bxxXkKw==}
-
- vue-demi@0.14.10:
- resolution: {integrity: sha512-nMZBOwuzabUO0nLgIcc6rycZEebF6eeUfaiQx9+WSk8e29IbLvPU9feI6tqW4kTo3hvoYAJkMh8n8D0fuISphg==}
+ yargs-parser@21.1.1:
+ resolution: {integrity: sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==}
engines: {node: '>=12'}
- hasBin: true
- peerDependencies:
- '@vue/composition-api': ^1.0.0-rc.1
- vue: ^3.0.0-0 || ^2.6.0
- peerDependenciesMeta:
- '@vue/composition-api':
- optional: true
- vue@3.5.22:
- resolution: {integrity: sha512-toaZjQ3a/G/mYaLSbV+QsQhIdMo9x5rrqIpYRObsJ6T/J+RyCSFwN2LHNVH9v8uIcljDNa3QzPVdv3Y6b9hAJQ==}
+ yargs@17.7.1:
+ resolution: {integrity: sha512-cwiTb08Xuv5fqF4AovYacTFNxk62th7LKJ6BL9IGUpTJrWoU7/7WdQGTP2SjKf1dUNBGzDd28p/Yfs/GI6JrLw==}
+ engines: {node: '>=12'}
+
+ yargs@17.7.2:
+ resolution: {integrity: sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==}
+ engines: {node: '>=12'}
+
+ yauzl@2.10.0:
+ resolution: {integrity: sha512-p4a9I6X6nu6IhoGmBqAcbJy1mlC4j27vEPZX9F4L4/vZT3Lyq1VkFHw/V/PUcB9Buo+DG3iHkT0x3Qya58zc3g==}
+
+ yoctocolors-cjs@2.1.3:
+ resolution: {integrity: sha512-U/PBtDf35ff0D8X8D0jfdzHYEPFxAI7jJlxZXwCSez5M3190m+QobIfh+sWDWSHMCWWJN2AWamkegn6vr6YBTw==}
+ engines: {node: '>=18'}
+
+ yoga-layout@3.2.1:
+ resolution: {integrity: sha512-0LPOt3AxKqMdFBZA3HBAt/t/8vIKq7VaQYbuA8WxCgung+p9TVyKRYdpvCb80HcdTN2NkbIKbhNwKUfm3tQywQ==}
+
+ zod-to-json-schema@3.20.4:
+ resolution: {integrity: sha512-Un9+kInJ2Zt63n6Z7mLqBifzzPcOyX+b+Exuzf7L1+xqck9Q2EPByyTRduV3kmSPaXaRer1JCsucubpgL1fipg==}
peerDependencies:
- typescript: '*'
- peerDependenciesMeta:
- typescript:
- optional: true
+ zod: ^3.20.0
+
+ zod@3.21.4:
+ resolution: {integrity: sha512-m46AKbrzKVzOzs/DZgVnG5H55N1sv1M8qZU3A8RIKbs3mrACDNeIOeilDymVb2HdmP8uwshOCF4uJ8uM9rCqJw==}
+
+ zod@3.23.8:
+ resolution: {integrity: sha512-XBx9AXhXktjUqnepgTiE5flcKIYWi/rme0Eaj+5Y0lftuGBq+jyRu/md4WnuxqgP1ubdpNCsYEYPxrzVHD8d6g==}
+
+ zod@3.24.0:
+ resolution: {integrity: sha512-Hz+wiY8yD0VLA2k/+nsg2Abez674dDGTai33SwNvMPuf9uIrBC9eFgIMQxBBbHFxVXi8W+5nX9DcAh9YNSQm/w==}
zwitch@2.0.4:
resolution: {integrity: sha512-bXE4cR/kVZhKZX/RjPEflHaKVhUVl85noU3v6b8apfQEc1x4A+zBxjZ4lN8LqGd6WZ3dl98pY4o717VFmoPp+A==}
snapshots:
- '@algolia/abtesting@1.8.0':
+ '@alcalzone/ansi-tokenize@0.2.5':
dependencies:
- '@algolia/client-common': 5.42.0
- '@algolia/requester-browser-xhr': 5.42.0
- '@algolia/requester-fetch': 5.42.0
- '@algolia/requester-node-http': 5.42.0
+ ansi-styles: 6.2.3
+ is-fullwidth-code-point: 5.1.0
- '@algolia/autocomplete-core@1.17.7(@algolia/client-search@5.42.0)(algoliasearch@5.42.0)(search-insights@2.17.3)':
+ '@alloc/quick-lru@5.2.0': {}
+
+ '@ark/schema@0.55.0':
dependencies:
- '@algolia/autocomplete-plugin-algolia-insights': 1.17.7(@algolia/client-search@5.42.0)(algoliasearch@5.42.0)(search-insights@2.17.3)
- '@algolia/autocomplete-shared': 1.17.7(@algolia/client-search@5.42.0)(algoliasearch@5.42.0)
+ '@ark/util': 0.55.0
+
+ '@ark/schema@0.56.0':
+ dependencies:
+ '@ark/util': 0.56.0
+
+ '@ark/util@0.55.0': {}
+
+ '@ark/util@0.56.0': {}
+
+ '@asyncapi/parser@3.4.0':
+ dependencies:
+ '@asyncapi/specs': 6.8.1
+ '@openapi-contrib/openapi-schema-to-json-schema': 3.2.0
+ '@stoplight/json': 3.21.0
+ '@stoplight/json-ref-readers': 1.2.2
+ '@stoplight/json-ref-resolver': 3.1.6
+ '@stoplight/spectral-core': 1.21.0
+ '@stoplight/spectral-functions': 1.10.1
+ '@stoplight/spectral-parsers': 1.0.5
+ '@stoplight/spectral-ref-resolver': 1.0.5
+ '@stoplight/types': 13.20.0
+ '@types/json-schema': 7.0.15
+ '@types/urijs': 1.19.26
+ ajv: 8.18.0
+ ajv-errors: 3.0.0(ajv@8.18.0)
+ ajv-formats: 2.1.1(ajv@8.18.0)
+ avsc: 5.7.9
+ js-yaml: 4.1.0
+ jsonpath-plus: 10.4.0
+ node-fetch: 2.6.7
transitivePeerDependencies:
- - '@algolia/client-search'
- - algoliasearch
- - search-insights
+ - encoding
- '@algolia/autocomplete-plugin-algolia-insights@1.17.7(@algolia/client-search@5.42.0)(algoliasearch@5.42.0)(search-insights@2.17.3)':
+ '@asyncapi/specs@6.8.1':
dependencies:
- '@algolia/autocomplete-shared': 1.17.7(@algolia/client-search@5.42.0)(algoliasearch@5.42.0)
- search-insights: 2.17.3
- transitivePeerDependencies:
- - '@algolia/client-search'
- - algoliasearch
+ '@types/json-schema': 7.0.15
- '@algolia/autocomplete-preset-algolia@1.17.7(@algolia/client-search@5.42.0)(algoliasearch@5.42.0)':
+ '@babel/code-frame@7.29.0':
dependencies:
- '@algolia/autocomplete-shared': 1.17.7(@algolia/client-search@5.42.0)(algoliasearch@5.42.0)
- '@algolia/client-search': 5.42.0
- algoliasearch: 5.42.0
-
- '@algolia/autocomplete-shared@1.17.7(@algolia/client-search@5.42.0)(algoliasearch@5.42.0)':
- dependencies:
- '@algolia/client-search': 5.42.0
- algoliasearch: 5.42.0
-
- '@algolia/client-abtesting@5.42.0':
- dependencies:
- '@algolia/client-common': 5.42.0
- '@algolia/requester-browser-xhr': 5.42.0
- '@algolia/requester-fetch': 5.42.0
- '@algolia/requester-node-http': 5.42.0
-
- '@algolia/client-analytics@5.42.0':
- dependencies:
- '@algolia/client-common': 5.42.0
- '@algolia/requester-browser-xhr': 5.42.0
- '@algolia/requester-fetch': 5.42.0
- '@algolia/requester-node-http': 5.42.0
-
- '@algolia/client-common@5.42.0': {}
-
- '@algolia/client-insights@5.42.0':
- dependencies:
- '@algolia/client-common': 5.42.0
- '@algolia/requester-browser-xhr': 5.42.0
- '@algolia/requester-fetch': 5.42.0
- '@algolia/requester-node-http': 5.42.0
-
- '@algolia/client-personalization@5.42.0':
- dependencies:
- '@algolia/client-common': 5.42.0
- '@algolia/requester-browser-xhr': 5.42.0
- '@algolia/requester-fetch': 5.42.0
- '@algolia/requester-node-http': 5.42.0
-
- '@algolia/client-query-suggestions@5.42.0':
- dependencies:
- '@algolia/client-common': 5.42.0
- '@algolia/requester-browser-xhr': 5.42.0
- '@algolia/requester-fetch': 5.42.0
- '@algolia/requester-node-http': 5.42.0
-
- '@algolia/client-search@5.42.0':
- dependencies:
- '@algolia/client-common': 5.42.0
- '@algolia/requester-browser-xhr': 5.42.0
- '@algolia/requester-fetch': 5.42.0
- '@algolia/requester-node-http': 5.42.0
-
- '@algolia/ingestion@1.42.0':
- dependencies:
- '@algolia/client-common': 5.42.0
- '@algolia/requester-browser-xhr': 5.42.0
- '@algolia/requester-fetch': 5.42.0
- '@algolia/requester-node-http': 5.42.0
-
- '@algolia/monitoring@1.42.0':
- dependencies:
- '@algolia/client-common': 5.42.0
- '@algolia/requester-browser-xhr': 5.42.0
- '@algolia/requester-fetch': 5.42.0
- '@algolia/requester-node-http': 5.42.0
-
- '@algolia/recommend@5.42.0':
- dependencies:
- '@algolia/client-common': 5.42.0
- '@algolia/requester-browser-xhr': 5.42.0
- '@algolia/requester-fetch': 5.42.0
- '@algolia/requester-node-http': 5.42.0
-
- '@algolia/requester-browser-xhr@5.42.0':
- dependencies:
- '@algolia/client-common': 5.42.0
-
- '@algolia/requester-fetch@5.42.0':
- dependencies:
- '@algolia/client-common': 5.42.0
-
- '@algolia/requester-node-http@5.42.0':
- dependencies:
- '@algolia/client-common': 5.42.0
-
- '@antfu/install-pkg@1.1.0':
- dependencies:
- package-manager-detector: 1.5.0
- tinyexec: 1.0.2
-
- '@antfu/utils@9.3.0': {}
-
- '@babel/helper-string-parser@7.27.1': {}
+ '@babel/helper-validator-identifier': 7.28.5
+ js-tokens: 4.0.0
+ picocolors: 1.1.1
'@babel/helper-validator-identifier@7.28.5': {}
- '@babel/parser@7.28.5':
+ '@canvas/image-data@1.1.0': {}
+
+ '@emnapi/runtime@1.8.1':
dependencies:
- '@babel/types': 7.28.5
-
- '@babel/types@7.28.5':
- dependencies:
- '@babel/helper-string-parser': 7.27.1
- '@babel/helper-validator-identifier': 7.28.5
-
- '@braintree/sanitize-url@7.1.1': {}
-
- '@chevrotain/cst-dts-gen@11.0.3':
- dependencies:
- '@chevrotain/gast': 11.0.3
- '@chevrotain/types': 11.0.3
- lodash-es: 4.17.21
-
- '@chevrotain/gast@11.0.3':
- dependencies:
- '@chevrotain/types': 11.0.3
- lodash-es: 4.17.21
-
- '@chevrotain/regexp-to-ast@11.0.3': {}
-
- '@chevrotain/types@11.0.3': {}
-
- '@chevrotain/utils@11.0.3': {}
-
- '@docsearch/css@3.8.2': {}
-
- '@docsearch/js@3.8.2(@algolia/client-search@5.42.0)(search-insights@2.17.3)':
- dependencies:
- '@docsearch/react': 3.8.2(@algolia/client-search@5.42.0)(search-insights@2.17.3)
- preact: 10.27.2
- transitivePeerDependencies:
- - '@algolia/client-search'
- - '@types/react'
- - react
- - react-dom
- - search-insights
-
- '@docsearch/react@3.8.2(@algolia/client-search@5.42.0)(search-insights@2.17.3)':
- dependencies:
- '@algolia/autocomplete-core': 1.17.7(@algolia/client-search@5.42.0)(algoliasearch@5.42.0)(search-insights@2.17.3)
- '@algolia/autocomplete-preset-algolia': 1.17.7(@algolia/client-search@5.42.0)(algoliasearch@5.42.0)
- '@docsearch/css': 3.8.2
- algoliasearch: 5.42.0
- optionalDependencies:
- search-insights: 2.17.3
- transitivePeerDependencies:
- - '@algolia/client-search'
-
- '@esbuild/aix-ppc64@0.21.5':
+ tslib: 2.8.1
optional: true
- '@esbuild/android-arm64@0.21.5':
- optional: true
-
- '@esbuild/android-arm@0.21.5':
- optional: true
-
- '@esbuild/android-x64@0.21.5':
- optional: true
-
- '@esbuild/darwin-arm64@0.21.5':
- optional: true
-
- '@esbuild/darwin-x64@0.21.5':
- optional: true
-
- '@esbuild/freebsd-arm64@0.21.5':
- optional: true
-
- '@esbuild/freebsd-x64@0.21.5':
- optional: true
-
- '@esbuild/linux-arm64@0.21.5':
- optional: true
-
- '@esbuild/linux-arm@0.21.5':
- optional: true
-
- '@esbuild/linux-ia32@0.21.5':
- optional: true
-
- '@esbuild/linux-loong64@0.21.5':
- optional: true
-
- '@esbuild/linux-mips64el@0.21.5':
- optional: true
-
- '@esbuild/linux-ppc64@0.21.5':
- optional: true
-
- '@esbuild/linux-riscv64@0.21.5':
- optional: true
-
- '@esbuild/linux-s390x@0.21.5':
- optional: true
-
- '@esbuild/linux-x64@0.21.5':
- optional: true
-
- '@esbuild/netbsd-x64@0.21.5':
- optional: true
-
- '@esbuild/openbsd-x64@0.21.5':
- optional: true
-
- '@esbuild/sunos-x64@0.21.5':
- optional: true
-
- '@esbuild/win32-arm64@0.21.5':
- optional: true
-
- '@esbuild/win32-ia32@0.21.5':
- optional: true
-
- '@esbuild/win32-x64@0.21.5':
- optional: true
-
- '@floating-ui/core@1.7.3':
+ '@floating-ui/core@1.7.4':
dependencies:
'@floating-ui/utils': 0.2.10
- '@floating-ui/dom@1.7.4':
+ '@floating-ui/dom@1.7.5':
dependencies:
- '@floating-ui/core': 1.7.3
+ '@floating-ui/core': 1.7.4
'@floating-ui/utils': 0.2.10
+ '@floating-ui/react-dom@2.1.7(react-dom@18.3.1(react@19.2.3))(react@19.2.3)':
+ dependencies:
+ '@floating-ui/dom': 1.7.5
+ react: 19.2.3
+ react-dom: 18.3.1(react@19.2.3)
+
'@floating-ui/utils@0.2.10': {}
- '@floating-ui/vue@1.1.9(vue@3.5.22)':
- dependencies:
- '@floating-ui/dom': 1.7.4
- '@floating-ui/utils': 0.2.10
- vue-demi: 0.14.10(vue@3.5.22)
- transitivePeerDependencies:
- - '@vue/composition-api'
- - vue
+ '@img/sharp-darwin-arm64@0.33.5':
+ optionalDependencies:
+ '@img/sharp-libvips-darwin-arm64': 1.0.4
+ optional: true
- '@iconify-json/simple-icons@1.2.57':
- dependencies:
- '@iconify/types': 2.0.0
+ '@img/sharp-darwin-x64@0.33.5':
+ optionalDependencies:
+ '@img/sharp-libvips-darwin-x64': 1.0.4
+ optional: true
- '@iconify/types@2.0.0': {}
+ '@img/sharp-libvips-darwin-arm64@1.0.4':
+ optional: true
- '@iconify/utils@3.0.2':
- dependencies:
- '@antfu/install-pkg': 1.1.0
- '@antfu/utils': 9.3.0
- '@iconify/types': 2.0.0
- debug: 4.4.3
- globals: 15.15.0
- kolorist: 1.8.0
- local-pkg: 1.1.2
- mlly: 1.8.0
- transitivePeerDependencies:
- - supports-color
+ '@img/sharp-libvips-darwin-x64@1.0.4':
+ optional: true
- '@internationalized/date@3.10.0':
- dependencies:
- '@swc/helpers': 0.5.17
+ '@img/sharp-libvips-linux-arm64@1.0.4':
+ optional: true
- '@internationalized/number@3.6.5':
+ '@img/sharp-libvips-linux-arm@1.0.5':
+ optional: true
+
+ '@img/sharp-libvips-linux-s390x@1.0.4':
+ optional: true
+
+ '@img/sharp-libvips-linux-x64@1.0.4':
+ optional: true
+
+ '@img/sharp-libvips-linuxmusl-arm64@1.0.4':
+ optional: true
+
+ '@img/sharp-libvips-linuxmusl-x64@1.0.4':
+ optional: true
+
+ '@img/sharp-linux-arm64@0.33.5':
+ optionalDependencies:
+ '@img/sharp-libvips-linux-arm64': 1.0.4
+ optional: true
+
+ '@img/sharp-linux-arm@0.33.5':
+ optionalDependencies:
+ '@img/sharp-libvips-linux-arm': 1.0.5
+ optional: true
+
+ '@img/sharp-linux-s390x@0.33.5':
+ optionalDependencies:
+ '@img/sharp-libvips-linux-s390x': 1.0.4
+ optional: true
+
+ '@img/sharp-linux-x64@0.33.5':
+ optionalDependencies:
+ '@img/sharp-libvips-linux-x64': 1.0.4
+ optional: true
+
+ '@img/sharp-linuxmusl-arm64@0.33.5':
+ optionalDependencies:
+ '@img/sharp-libvips-linuxmusl-arm64': 1.0.4
+ optional: true
+
+ '@img/sharp-linuxmusl-x64@0.33.5':
+ optionalDependencies:
+ '@img/sharp-libvips-linuxmusl-x64': 1.0.4
+ optional: true
+
+ '@img/sharp-wasm32@0.33.5':
dependencies:
- '@swc/helpers': 0.5.17
+ '@emnapi/runtime': 1.8.1
+ optional: true
+
+ '@img/sharp-win32-ia32@0.33.5':
+ optional: true
+
+ '@img/sharp-win32-x64@0.33.5':
+ optional: true
+
+ '@inquirer/ansi@1.0.2': {}
+
+ '@inquirer/checkbox@4.3.2(@types/node@25.3.0)':
+ dependencies:
+ '@inquirer/ansi': 1.0.2
+ '@inquirer/core': 10.3.2(@types/node@25.3.0)
+ '@inquirer/figures': 1.0.15
+ '@inquirer/type': 3.0.10(@types/node@25.3.0)
+ yoctocolors-cjs: 2.1.3
+ optionalDependencies:
+ '@types/node': 25.3.0
+
+ '@inquirer/confirm@5.1.21(@types/node@25.3.0)':
+ dependencies:
+ '@inquirer/core': 10.3.2(@types/node@25.3.0)
+ '@inquirer/type': 3.0.10(@types/node@25.3.0)
+ optionalDependencies:
+ '@types/node': 25.3.0
+
+ '@inquirer/core@10.3.2(@types/node@25.3.0)':
+ dependencies:
+ '@inquirer/ansi': 1.0.2
+ '@inquirer/figures': 1.0.15
+ '@inquirer/type': 3.0.10(@types/node@25.3.0)
+ cli-width: 4.1.0
+ mute-stream: 2.0.0
+ signal-exit: 4.1.0
+ wrap-ansi: 6.2.0
+ yoctocolors-cjs: 2.1.3
+ optionalDependencies:
+ '@types/node': 25.3.0
+
+ '@inquirer/editor@4.2.23(@types/node@25.3.0)':
+ dependencies:
+ '@inquirer/core': 10.3.2(@types/node@25.3.0)
+ '@inquirer/external-editor': 1.0.3(@types/node@25.3.0)
+ '@inquirer/type': 3.0.10(@types/node@25.3.0)
+ optionalDependencies:
+ '@types/node': 25.3.0
+
+ '@inquirer/expand@4.0.23(@types/node@25.3.0)':
+ dependencies:
+ '@inquirer/core': 10.3.2(@types/node@25.3.0)
+ '@inquirer/type': 3.0.10(@types/node@25.3.0)
+ yoctocolors-cjs: 2.1.3
+ optionalDependencies:
+ '@types/node': 25.3.0
+
+ '@inquirer/external-editor@1.0.3(@types/node@25.3.0)':
+ dependencies:
+ chardet: 2.1.1
+ iconv-lite: 0.7.2
+ optionalDependencies:
+ '@types/node': 25.3.0
+
+ '@inquirer/figures@1.0.15': {}
+
+ '@inquirer/input@4.3.1(@types/node@25.3.0)':
+ dependencies:
+ '@inquirer/core': 10.3.2(@types/node@25.3.0)
+ '@inquirer/type': 3.0.10(@types/node@25.3.0)
+ optionalDependencies:
+ '@types/node': 25.3.0
+
+ '@inquirer/number@3.0.23(@types/node@25.3.0)':
+ dependencies:
+ '@inquirer/core': 10.3.2(@types/node@25.3.0)
+ '@inquirer/type': 3.0.10(@types/node@25.3.0)
+ optionalDependencies:
+ '@types/node': 25.3.0
+
+ '@inquirer/password@4.0.23(@types/node@25.3.0)':
+ dependencies:
+ '@inquirer/ansi': 1.0.2
+ '@inquirer/core': 10.3.2(@types/node@25.3.0)
+ '@inquirer/type': 3.0.10(@types/node@25.3.0)
+ optionalDependencies:
+ '@types/node': 25.3.0
+
+ '@inquirer/prompts@7.9.0(@types/node@25.3.0)':
+ dependencies:
+ '@inquirer/checkbox': 4.3.2(@types/node@25.3.0)
+ '@inquirer/confirm': 5.1.21(@types/node@25.3.0)
+ '@inquirer/editor': 4.2.23(@types/node@25.3.0)
+ '@inquirer/expand': 4.0.23(@types/node@25.3.0)
+ '@inquirer/input': 4.3.1(@types/node@25.3.0)
+ '@inquirer/number': 3.0.23(@types/node@25.3.0)
+ '@inquirer/password': 4.0.23(@types/node@25.3.0)
+ '@inquirer/rawlist': 4.1.11(@types/node@25.3.0)
+ '@inquirer/search': 3.2.2(@types/node@25.3.0)
+ '@inquirer/select': 4.4.2(@types/node@25.3.0)
+ optionalDependencies:
+ '@types/node': 25.3.0
+
+ '@inquirer/rawlist@4.1.11(@types/node@25.3.0)':
+ dependencies:
+ '@inquirer/core': 10.3.2(@types/node@25.3.0)
+ '@inquirer/type': 3.0.10(@types/node@25.3.0)
+ yoctocolors-cjs: 2.1.3
+ optionalDependencies:
+ '@types/node': 25.3.0
+
+ '@inquirer/search@3.2.2(@types/node@25.3.0)':
+ dependencies:
+ '@inquirer/core': 10.3.2(@types/node@25.3.0)
+ '@inquirer/figures': 1.0.15
+ '@inquirer/type': 3.0.10(@types/node@25.3.0)
+ yoctocolors-cjs: 2.1.3
+ optionalDependencies:
+ '@types/node': 25.3.0
+
+ '@inquirer/select@4.4.2(@types/node@25.3.0)':
+ dependencies:
+ '@inquirer/ansi': 1.0.2
+ '@inquirer/core': 10.3.2(@types/node@25.3.0)
+ '@inquirer/figures': 1.0.15
+ '@inquirer/type': 3.0.10(@types/node@25.3.0)
+ yoctocolors-cjs: 2.1.3
+ optionalDependencies:
+ '@types/node': 25.3.0
+
+ '@inquirer/type@3.0.10(@types/node@25.3.0)':
+ optionalDependencies:
+ '@types/node': 25.3.0
+
+ '@jridgewell/gen-mapping@0.3.13':
+ dependencies:
+ '@jridgewell/sourcemap-codec': 1.5.5
+ '@jridgewell/trace-mapping': 0.3.31
+
+ '@jridgewell/resolve-uri@3.1.2': {}
'@jridgewell/sourcemap-codec@1.5.5': {}
- '@mermaid-js/parser@0.6.3':
+ '@jridgewell/trace-mapping@0.3.31':
dependencies:
- langium: 3.3.1
+ '@jridgewell/resolve-uri': 3.1.2
+ '@jridgewell/sourcemap-codec': 1.5.5
- '@rollup/rollup-android-arm-eabi@4.52.5':
- optional: true
-
- '@rollup/rollup-android-arm64@4.52.5':
- optional: true
-
- '@rollup/rollup-darwin-arm64@4.52.5':
- optional: true
-
- '@rollup/rollup-darwin-x64@4.52.5':
- optional: true
-
- '@rollup/rollup-freebsd-arm64@4.52.5':
- optional: true
-
- '@rollup/rollup-freebsd-x64@4.52.5':
- optional: true
-
- '@rollup/rollup-linux-arm-gnueabihf@4.52.5':
- optional: true
-
- '@rollup/rollup-linux-arm-musleabihf@4.52.5':
- optional: true
-
- '@rollup/rollup-linux-arm64-gnu@4.52.5':
- optional: true
-
- '@rollup/rollup-linux-arm64-musl@4.52.5':
- optional: true
-
- '@rollup/rollup-linux-loong64-gnu@4.52.5':
- optional: true
-
- '@rollup/rollup-linux-ppc64-gnu@4.52.5':
- optional: true
-
- '@rollup/rollup-linux-riscv64-gnu@4.52.5':
- optional: true
-
- '@rollup/rollup-linux-riscv64-musl@4.52.5':
- optional: true
-
- '@rollup/rollup-linux-s390x-gnu@4.52.5':
- optional: true
-
- '@rollup/rollup-linux-x64-gnu@4.52.5':
- optional: true
-
- '@rollup/rollup-linux-x64-musl@4.52.5':
- optional: true
-
- '@rollup/rollup-openharmony-arm64@4.52.5':
- optional: true
-
- '@rollup/rollup-win32-arm64-msvc@4.52.5':
- optional: true
-
- '@rollup/rollup-win32-ia32-msvc@4.52.5':
- optional: true
-
- '@rollup/rollup-win32-x64-gnu@4.52.5':
- optional: true
-
- '@rollup/rollup-win32-x64-msvc@4.52.5':
- optional: true
-
- '@shikijs/core@2.5.0':
+ '@jsep-plugin/assignment@1.3.0(jsep@1.4.0)':
dependencies:
- '@shikijs/engine-javascript': 2.5.0
- '@shikijs/engine-oniguruma': 2.5.0
- '@shikijs/types': 2.5.0
+ jsep: 1.4.0
+
+ '@jsep-plugin/regex@1.0.4(jsep@1.4.0)':
+ dependencies:
+ jsep: 1.4.0
+
+ '@jsep-plugin/ternary@1.1.4(jsep@1.4.0)':
+ dependencies:
+ jsep: 1.4.0
+
+ '@leichtgewicht/ip-codec@2.0.5': {}
+
+ '@mdx-js/mdx@3.1.1':
+ dependencies:
+ '@types/estree': 1.0.8
+ '@types/estree-jsx': 1.0.5
+ '@types/hast': 3.0.4
+ '@types/mdx': 2.0.13
+ acorn: 8.11.2
+ collapse-white-space: 2.1.0
+ devlop: 1.1.0
+ estree-util-is-identifier-name: 3.0.0
+ estree-util-scope: 1.0.0
+ estree-walker: 3.0.3
+ hast-util-to-jsx-runtime: 2.3.6
+ markdown-extensions: 2.0.0
+ recma-build-jsx: 1.0.0
+ recma-jsx: 1.0.1(acorn@8.11.2)
+ recma-stringify: 1.0.0
+ rehype-recma: 1.0.0
+ remark-mdx: 3.1.0
+ remark-parse: 11.0.0
+ remark-rehype: 11.1.1
+ source-map: 0.7.6
+ unified: 11.0.5
+ unist-util-position-from-estree: 2.0.0
+ unist-util-stringify-position: 4.0.0
+ unist-util-visit: 5.0.0
+ vfile: 6.0.3
+ transitivePeerDependencies:
+ - supports-color
+
+ '@mdx-js/react@3.1.1(@types/react@19.2.14)(react@19.2.3)':
+ dependencies:
+ '@types/mdx': 2.0.13
+ '@types/react': 19.2.14
+ react: 19.2.3
+
+ '@mintlify/cli@4.0.978(@radix-ui/react-popover@1.1.15(@types/react@19.2.14)(react-dom@18.3.1(react@19.2.3))(react@19.2.3))(@types/node@25.3.0)(@types/react@19.2.14)(react-dom@18.3.1(react@19.2.3))(typescript@5.9.3)':
+ dependencies:
+ '@inquirer/prompts': 7.9.0(@types/node@25.3.0)
+ '@mintlify/common': 1.0.749(@radix-ui/react-popover@1.1.15(@types/react@19.2.14)(react-dom@18.3.1(react@19.2.3))(react@19.2.3))(@types/react@19.2.14)(react-dom@18.3.1(react@19.2.3))(react@19.2.3)(typescript@5.9.3)
+ '@mintlify/link-rot': 3.0.913(@radix-ui/react-popover@1.1.15(@types/react@19.2.14)(react-dom@18.3.1(react@19.2.3))(react@19.2.3))(@types/react@19.2.14)(react-dom@18.3.1(react@19.2.3))(react@19.2.3)(typescript@5.9.3)
+ '@mintlify/models': 0.0.274
+ '@mintlify/prebuild': 1.0.886(@radix-ui/react-popover@1.1.15(@types/react@19.2.14)(react-dom@18.3.1(react@19.2.3))(react@19.2.3))(@types/react@19.2.14)(react-dom@18.3.1(react@19.2.3))(react@19.2.3)(typescript@5.9.3)
+ '@mintlify/previewing': 4.0.943(@radix-ui/react-popover@1.1.15(@types/react@19.2.14)(react-dom@18.3.1(react@19.2.3))(react@19.2.3))(@types/react@19.2.14)(react-dom@18.3.1(react@19.2.3))(typescript@5.9.3)
+ '@mintlify/scraping': 4.0.611(@radix-ui/react-popover@1.1.15(@types/react@19.2.14)(react-dom@18.3.1(react@19.2.3))(react@19.2.3))(@types/react@19.2.14)(react-dom@18.3.1(react@19.2.3))(react@19.2.3)(typescript@5.9.3)
+ '@mintlify/validation': 0.1.605(@radix-ui/react-popover@1.1.15(@types/react@19.2.14)(react-dom@18.3.1(react@19.2.3))(react@19.2.3))(@types/react@19.2.14)(react-dom@18.3.1(react@19.2.3))(react@19.2.3)(typescript@5.9.3)
+ adm-zip: 0.5.16
+ chalk: 5.2.0
+ color: 4.2.3
+ detect-port: 1.5.1
+ front-matter: 4.0.2
+ fs-extra: 11.2.0
+ ink: 6.3.0(@types/react@19.2.14)(react@19.2.3)
+ inquirer: 12.3.0(@types/node@25.3.0)
+ js-yaml: 4.1.0
+ mdast-util-mdx-jsx: 3.2.0
+ react: 19.2.3
+ semver: 7.7.2
+ unist-util-visit: 5.0.0
+ yargs: 17.7.1
+ transitivePeerDependencies:
+ - '@radix-ui/react-popover'
+ - '@types/node'
+ - '@types/react'
+ - bare-abort-controller
+ - bare-buffer
+ - bufferutil
+ - debug
+ - encoding
+ - react-devtools-core
+ - react-dom
+ - react-native-b4a
+ - supports-color
+ - ts-node
+ - typescript
+ - utf-8-validate
+
+ '@mintlify/common@1.0.661(@radix-ui/react-popover@1.1.15(@types/react@19.2.14)(react-dom@18.3.1(react@19.2.3))(react@19.2.3))(@types/react@19.2.14)(react-dom@18.3.1(react@19.2.3))(react@19.2.3)(typescript@5.9.3)':
+ dependencies:
+ '@asyncapi/parser': 3.4.0
+ '@mintlify/mdx': 3.0.4(@radix-ui/react-popover@1.1.15(@types/react@19.2.14)(react-dom@18.3.1(react@19.2.3))(react@19.2.3))(@types/react@19.2.14)(react-dom@18.3.1(react@19.2.3))(react@19.2.3)(typescript@5.9.3)
+ '@mintlify/models': 0.0.255
+ '@mintlify/openapi-parser': 0.0.8
+ '@mintlify/validation': 0.1.555(@radix-ui/react-popover@1.1.15(@types/react@19.2.14)(react-dom@18.3.1(react@19.2.3))(react@19.2.3))(@types/react@19.2.14)(react-dom@18.3.1(react@19.2.3))(react@19.2.3)(typescript@5.9.3)
+ '@sindresorhus/slugify': 2.2.0
+ '@types/mdast': 4.0.4
+ acorn: 8.11.2
+ acorn-jsx: 5.3.2(acorn@8.11.2)
+ color-blend: 4.0.0
+ estree-util-to-js: 2.0.0
+ estree-walker: 3.0.3
+ front-matter: 4.0.2
+ hast-util-from-html: 2.0.3
+ hast-util-to-html: 9.0.4
+ hast-util-to-text: 4.0.2
+ hex-rgb: 5.0.0
+ ignore: 7.0.5
+ js-yaml: 4.1.0
+ lodash: 4.17.21
+ mdast-util-from-markdown: 2.0.2
+ mdast-util-gfm: 3.0.0
+ mdast-util-mdx: 3.0.0
+ mdast-util-mdx-jsx: 3.1.3
+ micromark-extension-gfm: 3.0.0
+ micromark-extension-mdx-jsx: 3.0.1
+ micromark-extension-mdxjs: 3.0.0
+ openapi-types: 12.1.3
+ postcss: 8.5.6
+ rehype-stringify: 10.0.1
+ remark: 15.0.1
+ remark-frontmatter: 5.0.0
+ remark-gfm: 4.0.0
+ remark-math: 6.0.0
+ remark-mdx: 3.1.0
+ remark-parse: 11.0.0
+ remark-rehype: 11.1.1
+ remark-stringify: 11.0.0
+ tailwindcss: 3.4.4
+ unified: 11.0.5
+ unist-builder: 4.0.0
+ unist-util-map: 4.0.0
+ unist-util-remove: 4.0.0
+ unist-util-remove-position: 5.0.0
+ unist-util-visit: 5.0.0
+ unist-util-visit-parents: 6.0.1
+ vfile: 6.0.3
+ transitivePeerDependencies:
+ - '@radix-ui/react-popover'
+ - '@types/react'
+ - debug
+ - encoding
+ - react
+ - react-dom
+ - supports-color
+ - ts-node
+ - typescript
+
+ '@mintlify/common@1.0.749(@radix-ui/react-popover@1.1.15(@types/react@19.2.14)(react-dom@18.3.1(react@19.2.3))(react@19.2.3))(@types/react@19.2.14)(react-dom@18.3.1(react@19.2.3))(react@19.2.3)(typescript@5.9.3)':
+ dependencies:
+ '@asyncapi/parser': 3.4.0
+ '@asyncapi/specs': 6.8.1
+ '@mintlify/mdx': 3.0.4(@radix-ui/react-popover@1.1.15(@types/react@19.2.14)(react-dom@18.3.1(react@19.2.3))(react@19.2.3))(@types/react@19.2.14)(react-dom@18.3.1(react@19.2.3))(react@19.2.3)(typescript@5.9.3)
+ '@mintlify/models': 0.0.274
+ '@mintlify/openapi-parser': 0.0.8
+ '@mintlify/validation': 0.1.605(@radix-ui/react-popover@1.1.15(@types/react@19.2.14)(react-dom@18.3.1(react@19.2.3))(react@19.2.3))(@types/react@19.2.14)(react-dom@18.3.1(react@19.2.3))(react@19.2.3)(typescript@5.9.3)
+ '@sindresorhus/slugify': 2.2.0
+ '@types/mdast': 4.0.4
+ acorn: 8.11.2
+ acorn-jsx: 5.3.2(acorn@8.11.2)
+ color-blend: 4.0.0
+ estree-util-to-js: 2.0.0
+ estree-walker: 3.0.3
+ front-matter: 4.0.2
+ hast-util-from-html: 2.0.3
+ hast-util-to-html: 9.0.4
+ hast-util-to-text: 4.0.2
+ hex-rgb: 5.0.0
+ ignore: 7.0.5
+ js-yaml: 4.1.0
+ lodash: 4.17.21
+ mdast-util-from-markdown: 2.0.2
+ mdast-util-gfm: 3.0.0
+ mdast-util-mdx: 3.0.0
+ mdast-util-mdx-jsx: 3.1.3
+ micromark-extension-gfm: 3.0.0
+ micromark-extension-mdx-jsx: 3.0.1
+ micromark-extension-mdxjs: 3.0.0
+ openapi-types: 12.1.3
+ postcss: 8.5.6
+ rehype-stringify: 10.0.1
+ remark: 15.0.1
+ remark-frontmatter: 5.0.0
+ remark-gfm: 4.0.0
+ remark-math: 6.0.0
+ remark-mdx: 3.1.0
+ remark-parse: 11.0.0
+ remark-rehype: 11.1.1
+ remark-stringify: 11.0.0
+ tailwindcss: 3.4.4
+ unified: 11.0.5
+ unist-builder: 4.0.0
+ unist-util-map: 4.0.0
+ unist-util-remove: 4.0.0
+ unist-util-remove-position: 5.0.0
+ unist-util-visit: 5.0.0
+ unist-util-visit-parents: 6.0.1
+ vfile: 6.0.3
+ transitivePeerDependencies:
+ - '@radix-ui/react-popover'
+ - '@types/react'
+ - debug
+ - encoding
+ - react
+ - react-dom
+ - supports-color
+ - ts-node
+ - typescript
+
+ '@mintlify/link-rot@3.0.913(@radix-ui/react-popover@1.1.15(@types/react@19.2.14)(react-dom@18.3.1(react@19.2.3))(react@19.2.3))(@types/react@19.2.14)(react-dom@18.3.1(react@19.2.3))(react@19.2.3)(typescript@5.9.3)':
+ dependencies:
+ '@mintlify/common': 1.0.749(@radix-ui/react-popover@1.1.15(@types/react@19.2.14)(react-dom@18.3.1(react@19.2.3))(react@19.2.3))(@types/react@19.2.14)(react-dom@18.3.1(react@19.2.3))(react@19.2.3)(typescript@5.9.3)
+ '@mintlify/prebuild': 1.0.886(@radix-ui/react-popover@1.1.15(@types/react@19.2.14)(react-dom@18.3.1(react@19.2.3))(react@19.2.3))(@types/react@19.2.14)(react-dom@18.3.1(react@19.2.3))(react@19.2.3)(typescript@5.9.3)
+ '@mintlify/previewing': 4.0.943(@radix-ui/react-popover@1.1.15(@types/react@19.2.14)(react-dom@18.3.1(react@19.2.3))(react@19.2.3))(@types/react@19.2.14)(react-dom@18.3.1(react@19.2.3))(typescript@5.9.3)
+ '@mintlify/scraping': 4.0.522(@radix-ui/react-popover@1.1.15(@types/react@19.2.14)(react-dom@18.3.1(react@19.2.3))(react@19.2.3))(@types/react@19.2.14)(react-dom@18.3.1(react@19.2.3))(react@19.2.3)(typescript@5.9.3)
+ '@mintlify/validation': 0.1.605(@radix-ui/react-popover@1.1.15(@types/react@19.2.14)(react-dom@18.3.1(react@19.2.3))(react@19.2.3))(@types/react@19.2.14)(react-dom@18.3.1(react@19.2.3))(react@19.2.3)(typescript@5.9.3)
+ fs-extra: 11.1.0
+ unist-util-visit: 4.1.2
+ transitivePeerDependencies:
+ - '@radix-ui/react-popover'
+ - '@types/react'
+ - bare-abort-controller
+ - bare-buffer
+ - bufferutil
+ - debug
+ - encoding
+ - react
+ - react-devtools-core
+ - react-dom
+ - react-native-b4a
+ - supports-color
+ - ts-node
+ - typescript
+ - utf-8-validate
+
+ '@mintlify/mdx@3.0.4(@radix-ui/react-popover@1.1.15(@types/react@19.2.14)(react-dom@18.3.1(react@19.2.3))(react@19.2.3))(@types/react@19.2.14)(react-dom@18.3.1(react@19.2.3))(react@19.2.3)(typescript@5.9.3)':
+ dependencies:
+ '@radix-ui/react-popover': 1.1.15(@types/react@19.2.14)(react-dom@18.3.1(react@19.2.3))(react@19.2.3)
+ '@shikijs/transformers': 3.22.0
+ '@shikijs/twoslash': 3.22.0(typescript@5.9.3)
+ arktype: 2.1.29
+ hast-util-to-string: 3.0.1
+ mdast-util-from-markdown: 2.0.2
+ mdast-util-gfm: 3.1.0
+ mdast-util-mdx-jsx: 3.2.0
+ mdast-util-to-hast: 13.2.1
+ next-mdx-remote-client: 1.1.6(@types/react@19.2.14)(react-dom@18.3.1(react@19.2.3))(react@19.2.3)(unified@11.0.5)
+ react: 19.2.3
+ react-dom: 18.3.1(react@19.2.3)
+ rehype-katex: 7.0.1
+ remark-gfm: 4.0.0
+ remark-math: 6.0.0
+ remark-smartypants: 3.0.2
+ shiki: 3.22.0
+ unified: 11.0.5
+ unist-util-visit: 5.0.0
+ transitivePeerDependencies:
+ - '@types/react'
+ - supports-color
+ - typescript
+
+ '@mintlify/models@0.0.255':
+ dependencies:
+ axios: 1.10.0
+ openapi-types: 12.1.3
+ transitivePeerDependencies:
+ - debug
+
+ '@mintlify/models@0.0.274':
+ dependencies:
+ axios: 1.13.2
+ openapi-types: 12.1.3
+ transitivePeerDependencies:
+ - debug
+
+ '@mintlify/openapi-parser@0.0.8':
+ dependencies:
+ ajv: 8.18.0
+ ajv-draft-04: 1.0.0(ajv@8.18.0)
+ ajv-formats: 3.0.1(ajv@8.18.0)
+ jsonpointer: 5.0.1
+ leven: 4.1.0
+ yaml: 2.8.2
+
+ '@mintlify/prebuild@1.0.886(@radix-ui/react-popover@1.1.15(@types/react@19.2.14)(react-dom@18.3.1(react@19.2.3))(react@19.2.3))(@types/react@19.2.14)(react-dom@18.3.1(react@19.2.3))(react@19.2.3)(typescript@5.9.3)':
+ dependencies:
+ '@mintlify/common': 1.0.749(@radix-ui/react-popover@1.1.15(@types/react@19.2.14)(react-dom@18.3.1(react@19.2.3))(react@19.2.3))(@types/react@19.2.14)(react-dom@18.3.1(react@19.2.3))(react@19.2.3)(typescript@5.9.3)
+ '@mintlify/openapi-parser': 0.0.8
+ '@mintlify/scraping': 4.0.611(@radix-ui/react-popover@1.1.15(@types/react@19.2.14)(react-dom@18.3.1(react@19.2.3))(react@19.2.3))(@types/react@19.2.14)(react-dom@18.3.1(react@19.2.3))(react@19.2.3)(typescript@5.9.3)
+ '@mintlify/validation': 0.1.605(@radix-ui/react-popover@1.1.15(@types/react@19.2.14)(react-dom@18.3.1(react@19.2.3))(react@19.2.3))(@types/react@19.2.14)(react-dom@18.3.1(react@19.2.3))(react@19.2.3)(typescript@5.9.3)
+ chalk: 5.3.0
+ favicons: 7.2.0
+ front-matter: 4.0.2
+ fs-extra: 11.1.0
+ js-yaml: 4.1.0
+ openapi-types: 12.1.3
+ sharp: 0.33.5
+ sharp-ico: 0.1.5
+ unist-util-visit: 4.1.2
+ uuid: 11.1.0
+ transitivePeerDependencies:
+ - '@radix-ui/react-popover'
+ - '@types/react'
+ - bare-abort-controller
+ - bare-buffer
+ - bufferutil
+ - debug
+ - encoding
+ - react
+ - react-dom
+ - react-native-b4a
+ - supports-color
+ - ts-node
+ - typescript
+ - utf-8-validate
+
+ '@mintlify/previewing@4.0.943(@radix-ui/react-popover@1.1.15(@types/react@19.2.14)(react-dom@18.3.1(react@19.2.3))(react@19.2.3))(@types/react@19.2.14)(react-dom@18.3.1(react@19.2.3))(typescript@5.9.3)':
+ dependencies:
+ '@mintlify/common': 1.0.749(@radix-ui/react-popover@1.1.15(@types/react@19.2.14)(react-dom@18.3.1(react@19.2.3))(react@19.2.3))(@types/react@19.2.14)(react-dom@18.3.1(react@19.2.3))(react@19.2.3)(typescript@5.9.3)
+ '@mintlify/prebuild': 1.0.886(@radix-ui/react-popover@1.1.15(@types/react@19.2.14)(react-dom@18.3.1(react@19.2.3))(react@19.2.3))(@types/react@19.2.14)(react-dom@18.3.1(react@19.2.3))(react@19.2.3)(typescript@5.9.3)
+ '@mintlify/validation': 0.1.605(@radix-ui/react-popover@1.1.15(@types/react@19.2.14)(react-dom@18.3.1(react@19.2.3))(react@19.2.3))(@types/react@19.2.14)(react-dom@18.3.1(react@19.2.3))(react@19.2.3)(typescript@5.9.3)
+ better-opn: 3.0.2
+ chalk: 5.2.0
+ chokidar: 3.5.3
+ express: 4.18.2
+ front-matter: 4.0.2
+ fs-extra: 11.1.0
+ got: 13.0.0
+ ink: 6.3.0(@types/react@19.2.14)(react@19.2.3)
+ ink-spinner: 5.0.0(ink@6.3.0(@types/react@19.2.14)(react@19.2.3))(react@19.2.3)
+ is-online: 10.0.0
+ js-yaml: 4.1.0
+ openapi-types: 12.1.3
+ react: 19.2.3
+ socket.io: 4.7.2
+ tar: 6.1.15
+ unist-util-visit: 4.1.2
+ yargs: 17.7.1
+ transitivePeerDependencies:
+ - '@radix-ui/react-popover'
+ - '@types/react'
+ - bare-abort-controller
+ - bare-buffer
+ - bufferutil
+ - debug
+ - encoding
+ - react-devtools-core
+ - react-dom
+ - react-native-b4a
+ - supports-color
+ - ts-node
+ - typescript
+ - utf-8-validate
+
+ '@mintlify/scraping@4.0.522(@radix-ui/react-popover@1.1.15(@types/react@19.2.14)(react-dom@18.3.1(react@19.2.3))(react@19.2.3))(@types/react@19.2.14)(react-dom@18.3.1(react@19.2.3))(react@19.2.3)(typescript@5.9.3)':
+ dependencies:
+ '@mintlify/common': 1.0.661(@radix-ui/react-popover@1.1.15(@types/react@19.2.14)(react-dom@18.3.1(react@19.2.3))(react@19.2.3))(@types/react@19.2.14)(react-dom@18.3.1(react@19.2.3))(react@19.2.3)(typescript@5.9.3)
+ '@mintlify/openapi-parser': 0.0.8
+ fs-extra: 11.1.1
+ hast-util-to-mdast: 10.1.0
+ js-yaml: 4.1.0
+ mdast-util-mdx-jsx: 3.1.3
+ neotraverse: 0.6.18
+ puppeteer: 22.14.0(typescript@5.9.3)
+ rehype-parse: 9.0.1
+ remark-gfm: 4.0.0
+ remark-mdx: 3.0.1
+ remark-parse: 11.0.0
+ remark-stringify: 11.0.0
+ unified: 11.0.5
+ unist-util-visit: 5.0.0
+ yargs: 17.7.1
+ zod: 3.21.4
+ transitivePeerDependencies:
+ - '@radix-ui/react-popover'
+ - '@types/react'
+ - bare-abort-controller
+ - bare-buffer
+ - bufferutil
+ - debug
+ - encoding
+ - react
+ - react-dom
+ - react-native-b4a
+ - supports-color
+ - ts-node
+ - typescript
+ - utf-8-validate
+
+ '@mintlify/scraping@4.0.611(@radix-ui/react-popover@1.1.15(@types/react@19.2.14)(react-dom@18.3.1(react@19.2.3))(react@19.2.3))(@types/react@19.2.14)(react-dom@18.3.1(react@19.2.3))(react@19.2.3)(typescript@5.9.3)':
+ dependencies:
+ '@mintlify/common': 1.0.749(@radix-ui/react-popover@1.1.15(@types/react@19.2.14)(react-dom@18.3.1(react@19.2.3))(react@19.2.3))(@types/react@19.2.14)(react-dom@18.3.1(react@19.2.3))(react@19.2.3)(typescript@5.9.3)
+ '@mintlify/openapi-parser': 0.0.8
+ fs-extra: 11.1.1
+ hast-util-to-mdast: 10.1.0
+ js-yaml: 4.1.0
+ mdast-util-mdx-jsx: 3.1.3
+ neotraverse: 0.6.18
+ puppeteer: 22.14.0(typescript@5.9.3)
+ rehype-parse: 9.0.1
+ remark-gfm: 4.0.0
+ remark-mdx: 3.0.1
+ remark-parse: 11.0.0
+ remark-stringify: 11.0.0
+ unified: 11.0.5
+ unist-util-visit: 5.0.0
+ yargs: 17.7.1
+ zod: 3.24.0
+ transitivePeerDependencies:
+ - '@radix-ui/react-popover'
+ - '@types/react'
+ - bare-abort-controller
+ - bare-buffer
+ - bufferutil
+ - debug
+ - encoding
+ - react
+ - react-dom
+ - react-native-b4a
+ - supports-color
+ - ts-node
+ - typescript
+ - utf-8-validate
+
+ '@mintlify/validation@0.1.555(@radix-ui/react-popover@1.1.15(@types/react@19.2.14)(react-dom@18.3.1(react@19.2.3))(react@19.2.3))(@types/react@19.2.14)(react-dom@18.3.1(react@19.2.3))(react@19.2.3)(typescript@5.9.3)':
+ dependencies:
+ '@mintlify/mdx': 3.0.4(@radix-ui/react-popover@1.1.15(@types/react@19.2.14)(react-dom@18.3.1(react@19.2.3))(react@19.2.3))(@types/react@19.2.14)(react-dom@18.3.1(react@19.2.3))(react@19.2.3)(typescript@5.9.3)
+ '@mintlify/models': 0.0.255
+ arktype: 2.1.27
+ js-yaml: 4.1.0
+ lcm: 0.0.3
+ lodash: 4.17.21
+ object-hash: 3.0.0
+ openapi-types: 12.1.3
+ uuid: 11.1.0
+ zod: 3.21.4
+ zod-to-json-schema: 3.20.4(zod@3.21.4)
+ transitivePeerDependencies:
+ - '@radix-ui/react-popover'
+ - '@types/react'
+ - debug
+ - react
+ - react-dom
+ - supports-color
+ - typescript
+
+ '@mintlify/validation@0.1.605(@radix-ui/react-popover@1.1.15(@types/react@19.2.14)(react-dom@18.3.1(react@19.2.3))(react@19.2.3))(@types/react@19.2.14)(react-dom@18.3.1(react@19.2.3))(react@19.2.3)(typescript@5.9.3)':
+ dependencies:
+ '@mintlify/mdx': 3.0.4(@radix-ui/react-popover@1.1.15(@types/react@19.2.14)(react-dom@18.3.1(react@19.2.3))(react@19.2.3))(@types/react@19.2.14)(react-dom@18.3.1(react@19.2.3))(react@19.2.3)(typescript@5.9.3)
+ '@mintlify/models': 0.0.274
+ arktype: 2.1.27
+ js-yaml: 4.1.0
+ lcm: 0.0.3
+ lodash: 4.17.21
+ object-hash: 3.0.0
+ openapi-types: 12.1.3
+ uuid: 11.1.0
+ zod: 3.24.0
+ zod-to-json-schema: 3.20.4(zod@3.24.0)
+ transitivePeerDependencies:
+ - '@radix-ui/react-popover'
+ - '@types/react'
+ - debug
+ - react
+ - react-dom
+ - supports-color
+ - typescript
+
+ '@nodelib/fs.scandir@2.1.5':
+ dependencies:
+ '@nodelib/fs.stat': 2.0.5
+ run-parallel: 1.2.0
+
+ '@nodelib/fs.stat@2.0.5': {}
+
+ '@nodelib/fs.walk@1.2.8':
+ dependencies:
+ '@nodelib/fs.scandir': 2.1.5
+ fastq: 1.20.1
+
+ '@openapi-contrib/openapi-schema-to-json-schema@3.2.0':
+ dependencies:
+ fast-deep-equal: 3.1.3
+
+ '@puppeteer/browsers@2.3.0':
+ dependencies:
+ debug: 4.4.3
+ extract-zip: 2.0.1
+ progress: 2.0.3
+ proxy-agent: 6.5.0
+ semver: 7.7.2
+ tar-fs: 3.1.1
+ unbzip2-stream: 1.4.3
+ yargs: 17.7.2
+ transitivePeerDependencies:
+ - bare-abort-controller
+ - bare-buffer
+ - react-native-b4a
+ - supports-color
+
+ '@radix-ui/primitive@1.1.3': {}
+
+ '@radix-ui/react-arrow@1.1.7(@types/react@19.2.14)(react-dom@18.3.1(react@19.2.3))(react@19.2.3)':
+ dependencies:
+ '@radix-ui/react-primitive': 2.1.3(@types/react@19.2.14)(react-dom@18.3.1(react@19.2.3))(react@19.2.3)
+ react: 19.2.3
+ react-dom: 18.3.1(react@19.2.3)
+ optionalDependencies:
+ '@types/react': 19.2.14
+
+ '@radix-ui/react-compose-refs@1.1.2(@types/react@19.2.14)(react@19.2.3)':
+ dependencies:
+ react: 19.2.3
+ optionalDependencies:
+ '@types/react': 19.2.14
+
+ '@radix-ui/react-context@1.1.2(@types/react@19.2.14)(react@19.2.3)':
+ dependencies:
+ react: 19.2.3
+ optionalDependencies:
+ '@types/react': 19.2.14
+
+ '@radix-ui/react-dismissable-layer@1.1.11(@types/react@19.2.14)(react-dom@18.3.1(react@19.2.3))(react@19.2.3)':
+ dependencies:
+ '@radix-ui/primitive': 1.1.3
+ '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.14)(react@19.2.3)
+ '@radix-ui/react-primitive': 2.1.3(@types/react@19.2.14)(react-dom@18.3.1(react@19.2.3))(react@19.2.3)
+ '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.2.14)(react@19.2.3)
+ '@radix-ui/react-use-escape-keydown': 1.1.1(@types/react@19.2.14)(react@19.2.3)
+ react: 19.2.3
+ react-dom: 18.3.1(react@19.2.3)
+ optionalDependencies:
+ '@types/react': 19.2.14
+
+ '@radix-ui/react-focus-guards@1.1.3(@types/react@19.2.14)(react@19.2.3)':
+ dependencies:
+ react: 19.2.3
+ optionalDependencies:
+ '@types/react': 19.2.14
+
+ '@radix-ui/react-focus-scope@1.1.7(@types/react@19.2.14)(react-dom@18.3.1(react@19.2.3))(react@19.2.3)':
+ dependencies:
+ '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.14)(react@19.2.3)
+ '@radix-ui/react-primitive': 2.1.3(@types/react@19.2.14)(react-dom@18.3.1(react@19.2.3))(react@19.2.3)
+ '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.2.14)(react@19.2.3)
+ react: 19.2.3
+ react-dom: 18.3.1(react@19.2.3)
+ optionalDependencies:
+ '@types/react': 19.2.14
+
+ '@radix-ui/react-id@1.1.1(@types/react@19.2.14)(react@19.2.3)':
+ dependencies:
+ '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.14)(react@19.2.3)
+ react: 19.2.3
+ optionalDependencies:
+ '@types/react': 19.2.14
+
+ '@radix-ui/react-popover@1.1.15(@types/react@19.2.14)(react-dom@18.3.1(react@19.2.3))(react@19.2.3)':
+ dependencies:
+ '@radix-ui/primitive': 1.1.3
+ '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.14)(react@19.2.3)
+ '@radix-ui/react-context': 1.1.2(@types/react@19.2.14)(react@19.2.3)
+ '@radix-ui/react-dismissable-layer': 1.1.11(@types/react@19.2.14)(react-dom@18.3.1(react@19.2.3))(react@19.2.3)
+ '@radix-ui/react-focus-guards': 1.1.3(@types/react@19.2.14)(react@19.2.3)
+ '@radix-ui/react-focus-scope': 1.1.7(@types/react@19.2.14)(react-dom@18.3.1(react@19.2.3))(react@19.2.3)
+ '@radix-ui/react-id': 1.1.1(@types/react@19.2.14)(react@19.2.3)
+ '@radix-ui/react-popper': 1.2.8(@types/react@19.2.14)(react-dom@18.3.1(react@19.2.3))(react@19.2.3)
+ '@radix-ui/react-portal': 1.1.9(@types/react@19.2.14)(react-dom@18.3.1(react@19.2.3))(react@19.2.3)
+ '@radix-ui/react-presence': 1.1.5(@types/react@19.2.14)(react-dom@18.3.1(react@19.2.3))(react@19.2.3)
+ '@radix-ui/react-primitive': 2.1.3(@types/react@19.2.14)(react-dom@18.3.1(react@19.2.3))(react@19.2.3)
+ '@radix-ui/react-slot': 1.2.3(@types/react@19.2.14)(react@19.2.3)
+ '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.2.14)(react@19.2.3)
+ aria-hidden: 1.2.6
+ react: 19.2.3
+ react-dom: 18.3.1(react@19.2.3)
+ react-remove-scroll: 2.7.2(@types/react@19.2.14)(react@19.2.3)
+ optionalDependencies:
+ '@types/react': 19.2.14
+
+ '@radix-ui/react-popper@1.2.8(@types/react@19.2.14)(react-dom@18.3.1(react@19.2.3))(react@19.2.3)':
+ dependencies:
+ '@floating-ui/react-dom': 2.1.7(react-dom@18.3.1(react@19.2.3))(react@19.2.3)
+ '@radix-ui/react-arrow': 1.1.7(@types/react@19.2.14)(react-dom@18.3.1(react@19.2.3))(react@19.2.3)
+ '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.14)(react@19.2.3)
+ '@radix-ui/react-context': 1.1.2(@types/react@19.2.14)(react@19.2.3)
+ '@radix-ui/react-primitive': 2.1.3(@types/react@19.2.14)(react-dom@18.3.1(react@19.2.3))(react@19.2.3)
+ '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.2.14)(react@19.2.3)
+ '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.14)(react@19.2.3)
+ '@radix-ui/react-use-rect': 1.1.1(@types/react@19.2.14)(react@19.2.3)
+ '@radix-ui/react-use-size': 1.1.1(@types/react@19.2.14)(react@19.2.3)
+ '@radix-ui/rect': 1.1.1
+ react: 19.2.3
+ react-dom: 18.3.1(react@19.2.3)
+ optionalDependencies:
+ '@types/react': 19.2.14
+
+ '@radix-ui/react-portal@1.1.9(@types/react@19.2.14)(react-dom@18.3.1(react@19.2.3))(react@19.2.3)':
+ dependencies:
+ '@radix-ui/react-primitive': 2.1.3(@types/react@19.2.14)(react-dom@18.3.1(react@19.2.3))(react@19.2.3)
+ '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.14)(react@19.2.3)
+ react: 19.2.3
+ react-dom: 18.3.1(react@19.2.3)
+ optionalDependencies:
+ '@types/react': 19.2.14
+
+ '@radix-ui/react-presence@1.1.5(@types/react@19.2.14)(react-dom@18.3.1(react@19.2.3))(react@19.2.3)':
+ dependencies:
+ '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.14)(react@19.2.3)
+ '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.14)(react@19.2.3)
+ react: 19.2.3
+ react-dom: 18.3.1(react@19.2.3)
+ optionalDependencies:
+ '@types/react': 19.2.14
+
+ '@radix-ui/react-primitive@2.1.3(@types/react@19.2.14)(react-dom@18.3.1(react@19.2.3))(react@19.2.3)':
+ dependencies:
+ '@radix-ui/react-slot': 1.2.3(@types/react@19.2.14)(react@19.2.3)
+ react: 19.2.3
+ react-dom: 18.3.1(react@19.2.3)
+ optionalDependencies:
+ '@types/react': 19.2.14
+
+ '@radix-ui/react-slot@1.2.3(@types/react@19.2.14)(react@19.2.3)':
+ dependencies:
+ '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.14)(react@19.2.3)
+ react: 19.2.3
+ optionalDependencies:
+ '@types/react': 19.2.14
+
+ '@radix-ui/react-use-callback-ref@1.1.1(@types/react@19.2.14)(react@19.2.3)':
+ dependencies:
+ react: 19.2.3
+ optionalDependencies:
+ '@types/react': 19.2.14
+
+ '@radix-ui/react-use-controllable-state@1.2.2(@types/react@19.2.14)(react@19.2.3)':
+ dependencies:
+ '@radix-ui/react-use-effect-event': 0.0.2(@types/react@19.2.14)(react@19.2.3)
+ '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.14)(react@19.2.3)
+ react: 19.2.3
+ optionalDependencies:
+ '@types/react': 19.2.14
+
+ '@radix-ui/react-use-effect-event@0.0.2(@types/react@19.2.14)(react@19.2.3)':
+ dependencies:
+ '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.14)(react@19.2.3)
+ react: 19.2.3
+ optionalDependencies:
+ '@types/react': 19.2.14
+
+ '@radix-ui/react-use-escape-keydown@1.1.1(@types/react@19.2.14)(react@19.2.3)':
+ dependencies:
+ '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.2.14)(react@19.2.3)
+ react: 19.2.3
+ optionalDependencies:
+ '@types/react': 19.2.14
+
+ '@radix-ui/react-use-layout-effect@1.1.1(@types/react@19.2.14)(react@19.2.3)':
+ dependencies:
+ react: 19.2.3
+ optionalDependencies:
+ '@types/react': 19.2.14
+
+ '@radix-ui/react-use-rect@1.1.1(@types/react@19.2.14)(react@19.2.3)':
+ dependencies:
+ '@radix-ui/rect': 1.1.1
+ react: 19.2.3
+ optionalDependencies:
+ '@types/react': 19.2.14
+
+ '@radix-ui/react-use-size@1.1.1(@types/react@19.2.14)(react@19.2.3)':
+ dependencies:
+ '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.14)(react@19.2.3)
+ react: 19.2.3
+ optionalDependencies:
+ '@types/react': 19.2.14
+
+ '@radix-ui/rect@1.1.1': {}
+
+ '@shikijs/core@3.22.0':
+ dependencies:
+ '@shikijs/types': 3.22.0
'@shikijs/vscode-textmate': 10.0.2
'@types/hast': 3.0.4
hast-util-to-html: 9.0.5
- '@shikijs/engine-javascript@2.5.0':
+ '@shikijs/engine-javascript@3.22.0':
dependencies:
- '@shikijs/types': 2.5.0
+ '@shikijs/types': 3.22.0
'@shikijs/vscode-textmate': 10.0.2
- oniguruma-to-es: 3.1.1
+ oniguruma-to-es: 4.3.4
- '@shikijs/engine-oniguruma@2.5.0':
+ '@shikijs/engine-oniguruma@3.22.0':
dependencies:
- '@shikijs/types': 2.5.0
+ '@shikijs/types': 3.22.0
'@shikijs/vscode-textmate': 10.0.2
- '@shikijs/langs@2.5.0':
+ '@shikijs/langs@3.22.0':
dependencies:
- '@shikijs/types': 2.5.0
+ '@shikijs/types': 3.22.0
- '@shikijs/themes@2.5.0':
+ '@shikijs/themes@3.22.0':
dependencies:
- '@shikijs/types': 2.5.0
+ '@shikijs/types': 3.22.0
- '@shikijs/transformers@2.5.0':
+ '@shikijs/transformers@3.22.0':
dependencies:
- '@shikijs/core': 2.5.0
- '@shikijs/types': 2.5.0
+ '@shikijs/core': 3.22.0
+ '@shikijs/types': 3.22.0
- '@shikijs/types@2.5.0':
+ '@shikijs/twoslash@3.22.0(typescript@5.9.3)':
+ dependencies:
+ '@shikijs/core': 3.22.0
+ '@shikijs/types': 3.22.0
+ twoslash: 0.3.6(typescript@5.9.3)
+ typescript: 5.9.3
+ transitivePeerDependencies:
+ - supports-color
+
+ '@shikijs/types@3.22.0':
dependencies:
'@shikijs/vscode-textmate': 10.0.2
'@types/hast': 3.0.4
'@shikijs/vscode-textmate@10.0.2': {}
- '@swc/helpers@0.5.17':
+ '@sindresorhus/is@5.6.0': {}
+
+ '@sindresorhus/slugify@2.2.0':
dependencies:
+ '@sindresorhus/transliterate': 1.6.0
+ escape-string-regexp: 5.0.0
+
+ '@sindresorhus/transliterate@1.6.0':
+ dependencies:
+ escape-string-regexp: 5.0.0
+
+ '@socket.io/component-emitter@3.1.2': {}
+
+ '@stoplight/better-ajv-errors@1.0.3(ajv@8.18.0)':
+ dependencies:
+ ajv: 8.18.0
+ jsonpointer: 5.0.1
+ leven: 3.1.0
+
+ '@stoplight/json-ref-readers@1.2.2':
+ dependencies:
+ node-fetch: 2.6.7
+ tslib: 1.14.1
+ transitivePeerDependencies:
+ - encoding
+
+ '@stoplight/json-ref-resolver@3.1.6':
+ dependencies:
+ '@stoplight/json': 3.21.0
+ '@stoplight/path': 1.3.2
+ '@stoplight/types': 13.20.0
+ '@types/urijs': 1.19.26
+ dependency-graph: 0.11.0
+ fast-memoize: 2.5.2
+ immer: 9.0.21
+ lodash: 4.17.21
+ tslib: 2.8.1
+ urijs: 1.19.11
+
+ '@stoplight/json@3.21.0':
+ dependencies:
+ '@stoplight/ordered-object-literal': 1.0.5
+ '@stoplight/path': 1.3.2
+ '@stoplight/types': 13.20.0
+ jsonc-parser: 2.2.1
+ lodash: 4.17.21
+ safe-stable-stringify: 1.1.1
+
+ '@stoplight/ordered-object-literal@1.0.5': {}
+
+ '@stoplight/path@1.3.2': {}
+
+ '@stoplight/spectral-core@1.21.0':
+ dependencies:
+ '@stoplight/better-ajv-errors': 1.0.3(ajv@8.18.0)
+ '@stoplight/json': 3.21.0
+ '@stoplight/path': 1.3.2
+ '@stoplight/spectral-parsers': 1.0.5
+ '@stoplight/spectral-ref-resolver': 1.0.5
+ '@stoplight/spectral-runtime': 1.1.4
+ '@stoplight/types': 13.6.0
+ '@types/es-aggregate-error': 1.0.6
+ '@types/json-schema': 7.0.15
+ ajv: 8.18.0
+ ajv-errors: 3.0.0(ajv@8.18.0)
+ ajv-formats: 2.1.1(ajv@8.18.0)
+ es-aggregate-error: 1.0.14
+ jsonpath-plus: 10.4.0
+ lodash: 4.17.23
+ lodash.topath: 4.5.2
+ minimatch: 3.1.2
+ nimma: 0.2.3
+ pony-cause: 1.1.1
+ simple-eval: 1.0.1
+ tslib: 2.8.1
+ transitivePeerDependencies:
+ - encoding
+
+ '@stoplight/spectral-formats@1.8.2':
+ dependencies:
+ '@stoplight/json': 3.21.0
+ '@stoplight/spectral-core': 1.21.0
+ '@types/json-schema': 7.0.15
+ tslib: 2.8.1
+ transitivePeerDependencies:
+ - encoding
+
+ '@stoplight/spectral-functions@1.10.1':
+ dependencies:
+ '@stoplight/better-ajv-errors': 1.0.3(ajv@8.18.0)
+ '@stoplight/json': 3.21.0
+ '@stoplight/spectral-core': 1.21.0
+ '@stoplight/spectral-formats': 1.8.2
+ '@stoplight/spectral-runtime': 1.1.4
+ ajv: 8.18.0
+ ajv-draft-04: 1.0.0(ajv@8.18.0)
+ ajv-errors: 3.0.0(ajv@8.18.0)
+ ajv-formats: 2.1.1(ajv@8.18.0)
+ lodash: 4.17.21
+ tslib: 2.8.1
+ transitivePeerDependencies:
+ - encoding
+
+ '@stoplight/spectral-parsers@1.0.5':
+ dependencies:
+ '@stoplight/json': 3.21.0
+ '@stoplight/types': 14.1.1
+ '@stoplight/yaml': 4.3.0
tslib: 2.8.1
- '@tanstack/virtual-core@3.13.12': {}
-
- '@tanstack/vue-virtual@3.13.12(vue@3.5.22)':
+ '@stoplight/spectral-ref-resolver@1.0.5':
dependencies:
- '@tanstack/virtual-core': 3.13.12
- vue: 3.5.22
+ '@stoplight/json-ref-readers': 1.2.2
+ '@stoplight/json-ref-resolver': 3.1.6
+ '@stoplight/spectral-runtime': 1.1.4
+ dependency-graph: 0.11.0
+ tslib: 2.8.1
+ transitivePeerDependencies:
+ - encoding
- '@types/d3-array@3.2.2': {}
-
- '@types/d3-axis@3.0.6':
+ '@stoplight/spectral-runtime@1.1.4':
dependencies:
- '@types/d3-selection': 3.0.11
+ '@stoplight/json': 3.21.0
+ '@stoplight/path': 1.3.2
+ '@stoplight/types': 13.20.0
+ abort-controller: 3.0.0
+ lodash: 4.17.21
+ node-fetch: 2.7.0
+ tslib: 2.8.1
+ transitivePeerDependencies:
+ - encoding
- '@types/d3-brush@3.0.6':
+ '@stoplight/types@13.20.0':
dependencies:
- '@types/d3-selection': 3.0.11
+ '@types/json-schema': 7.0.15
+ utility-types: 3.11.0
- '@types/d3-chord@3.0.6': {}
-
- '@types/d3-color@3.1.3': {}
-
- '@types/d3-contour@3.0.6':
+ '@stoplight/types@13.6.0':
dependencies:
- '@types/d3-array': 3.2.2
- '@types/geojson': 7946.0.16
+ '@types/json-schema': 7.0.15
+ utility-types: 3.11.0
- '@types/d3-delaunay@6.0.4': {}
-
- '@types/d3-dispatch@3.0.7': {}
-
- '@types/d3-drag@3.0.7':
+ '@stoplight/types@14.1.1':
dependencies:
- '@types/d3-selection': 3.0.11
+ '@types/json-schema': 7.0.15
+ utility-types: 3.11.0
- '@types/d3-dsv@3.0.7': {}
+ '@stoplight/yaml-ast-parser@0.0.50': {}
- '@types/d3-ease@3.0.2': {}
-
- '@types/d3-fetch@3.0.7':
+ '@stoplight/yaml@4.3.0':
dependencies:
- '@types/d3-dsv': 3.0.7
+ '@stoplight/ordered-object-literal': 1.0.5
+ '@stoplight/types': 14.1.1
+ '@stoplight/yaml-ast-parser': 0.0.50
+ tslib: 2.8.1
- '@types/d3-force@3.0.10': {}
-
- '@types/d3-format@3.0.4': {}
-
- '@types/d3-geo@3.1.0':
+ '@szmarczak/http-timer@5.0.1':
dependencies:
- '@types/geojson': 7946.0.16
+ defer-to-connect: 2.0.1
- '@types/d3-hierarchy@3.1.7': {}
+ '@tootallnate/quickjs-emscripten@0.23.0': {}
- '@types/d3-interpolate@3.0.4':
+ '@types/acorn@4.0.6':
dependencies:
- '@types/d3-color': 3.1.3
+ '@types/estree': 1.0.8
- '@types/d3-path@3.1.1': {}
+ '@types/cookie@0.4.1': {}
- '@types/d3-polygon@3.0.2': {}
-
- '@types/d3-quadtree@3.0.6': {}
-
- '@types/d3-random@3.0.3': {}
-
- '@types/d3-scale-chromatic@3.1.0': {}
-
- '@types/d3-scale@4.0.9':
+ '@types/cors@2.8.19':
dependencies:
- '@types/d3-time': 3.0.4
+ '@types/node': 25.3.0
- '@types/d3-selection@3.0.11': {}
-
- '@types/d3-shape@3.1.7':
+ '@types/debug@4.1.12':
dependencies:
- '@types/d3-path': 3.1.1
+ '@types/ms': 2.1.0
- '@types/d3-time-format@4.0.3': {}
-
- '@types/d3-time@3.0.4': {}
-
- '@types/d3-timer@3.0.2': {}
-
- '@types/d3-transition@3.0.9':
+ '@types/es-aggregate-error@1.0.6':
dependencies:
- '@types/d3-selection': 3.0.11
+ '@types/node': 25.3.0
- '@types/d3-zoom@3.0.8':
+ '@types/estree-jsx@1.0.5':
dependencies:
- '@types/d3-interpolate': 3.0.4
- '@types/d3-selection': 3.0.11
-
- '@types/d3@7.4.3':
- dependencies:
- '@types/d3-array': 3.2.2
- '@types/d3-axis': 3.0.6
- '@types/d3-brush': 3.0.6
- '@types/d3-chord': 3.0.6
- '@types/d3-color': 3.1.3
- '@types/d3-contour': 3.0.6
- '@types/d3-delaunay': 6.0.4
- '@types/d3-dispatch': 3.0.7
- '@types/d3-drag': 3.0.7
- '@types/d3-dsv': 3.0.7
- '@types/d3-ease': 3.0.2
- '@types/d3-fetch': 3.0.7
- '@types/d3-force': 3.0.10
- '@types/d3-format': 3.0.4
- '@types/d3-geo': 3.1.0
- '@types/d3-hierarchy': 3.1.7
- '@types/d3-interpolate': 3.0.4
- '@types/d3-path': 3.1.1
- '@types/d3-polygon': 3.0.2
- '@types/d3-quadtree': 3.0.6
- '@types/d3-random': 3.0.3
- '@types/d3-scale': 4.0.9
- '@types/d3-scale-chromatic': 3.1.0
- '@types/d3-selection': 3.0.11
- '@types/d3-shape': 3.1.7
- '@types/d3-time': 3.0.4
- '@types/d3-time-format': 4.0.3
- '@types/d3-timer': 3.0.2
- '@types/d3-transition': 3.0.9
- '@types/d3-zoom': 3.0.8
+ '@types/estree': 1.0.8
'@types/estree@1.0.8': {}
- '@types/geojson@7946.0.16': {}
-
'@types/hast@3.0.4':
dependencies:
'@types/unist': 3.0.3
- '@types/linkify-it@5.0.0': {}
+ '@types/http-cache-semantics@4.2.0': {}
- '@types/markdown-it@14.1.2':
- dependencies:
- '@types/linkify-it': 5.0.0
- '@types/mdurl': 2.0.0
+ '@types/json-schema@7.0.15': {}
+
+ '@types/katex@0.16.8': {}
'@types/mdast@4.0.4':
dependencies:
'@types/unist': 3.0.3
- '@types/mdurl@2.0.0': {}
+ '@types/mdx@2.0.13': {}
- '@types/trusted-types@2.0.7':
- optional: true
+ '@types/ms@2.1.0': {}
+
+ '@types/nlcst@2.0.3':
+ dependencies:
+ '@types/unist': 3.0.3
+
+ '@types/node@25.3.0':
+ dependencies:
+ undici-types: 7.18.2
+
+ '@types/react@19.2.14':
+ dependencies:
+ csstype: 3.2.3
+
+ '@types/unist@2.0.11': {}
'@types/unist@3.0.3': {}
- '@types/web-bluetooth@0.0.21': {}
+ '@types/urijs@1.19.26': {}
+
+ '@types/yauzl@2.10.3':
+ dependencies:
+ '@types/node': 25.3.0
+ optional: true
+
+ '@typescript/vfs@1.6.4(typescript@5.9.3)':
+ dependencies:
+ debug: 4.4.3
+ typescript: 5.9.3
+ transitivePeerDependencies:
+ - supports-color
'@ungap/structured-clone@1.3.0': {}
- '@vitejs/plugin-vue@5.2.4(vite@5.4.21)(vue@3.5.22)':
+ abort-controller@3.0.0:
dependencies:
- vite: 5.4.21
- vue: 3.5.22
+ event-target-shim: 5.0.1
- '@vue/compiler-core@3.5.22':
+ accepts@1.3.8:
dependencies:
- '@babel/parser': 7.28.5
- '@vue/shared': 3.5.22
- entities: 4.5.0
- estree-walker: 2.0.2
- source-map-js: 1.2.1
+ mime-types: 2.1.35
+ negotiator: 0.6.3
- '@vue/compiler-dom@3.5.22':
+ acorn-jsx@5.3.2(acorn@8.11.2):
dependencies:
- '@vue/compiler-core': 3.5.22
- '@vue/shared': 3.5.22
+ acorn: 8.11.2
- '@vue/compiler-sfc@3.5.22':
+ acorn@8.11.2: {}
+
+ address@1.2.2: {}
+
+ adm-zip@0.5.16: {}
+
+ agent-base@7.1.4: {}
+
+ aggregate-error@4.0.1:
dependencies:
- '@babel/parser': 7.28.5
- '@vue/compiler-core': 3.5.22
- '@vue/compiler-dom': 3.5.22
- '@vue/compiler-ssr': 3.5.22
- '@vue/shared': 3.5.22
- estree-walker: 2.0.2
- magic-string: 0.30.21
- postcss: 8.5.6
- source-map-js: 1.2.1
+ clean-stack: 4.2.0
+ indent-string: 5.0.0
- '@vue/compiler-ssr@3.5.22':
- dependencies:
- '@vue/compiler-dom': 3.5.22
- '@vue/shared': 3.5.22
-
- '@vue/devtools-api@7.7.7':
- dependencies:
- '@vue/devtools-kit': 7.7.7
-
- '@vue/devtools-kit@7.7.7':
- dependencies:
- '@vue/devtools-shared': 7.7.7
- birpc: 2.7.0
- hookable: 5.5.3
- mitt: 3.0.1
- perfect-debounce: 1.0.0
- speakingurl: 14.0.1
- superjson: 2.2.5
-
- '@vue/devtools-shared@7.7.7':
- dependencies:
- rfdc: 1.4.1
-
- '@vue/reactivity@3.5.22':
- dependencies:
- '@vue/shared': 3.5.22
-
- '@vue/runtime-core@3.5.22':
- dependencies:
- '@vue/reactivity': 3.5.22
- '@vue/shared': 3.5.22
-
- '@vue/runtime-dom@3.5.22':
- dependencies:
- '@vue/reactivity': 3.5.22
- '@vue/runtime-core': 3.5.22
- '@vue/shared': 3.5.22
- csstype: 3.1.3
-
- '@vue/server-renderer@3.5.22(vue@3.5.22)':
- dependencies:
- '@vue/compiler-ssr': 3.5.22
- '@vue/shared': 3.5.22
- vue: 3.5.22
-
- '@vue/shared@3.5.22': {}
-
- '@vueuse/core@12.8.2':
- dependencies:
- '@types/web-bluetooth': 0.0.21
- '@vueuse/metadata': 12.8.2
- '@vueuse/shared': 12.8.2
- vue: 3.5.22
- transitivePeerDependencies:
- - typescript
-
- '@vueuse/core@13.9.0(vue@3.5.22)':
- dependencies:
- '@types/web-bluetooth': 0.0.21
- '@vueuse/metadata': 13.9.0
- '@vueuse/shared': 13.9.0(vue@3.5.22)
- vue: 3.5.22
-
- '@vueuse/integrations@12.8.2(focus-trap@7.6.6)':
- dependencies:
- '@vueuse/core': 12.8.2
- '@vueuse/shared': 12.8.2
- vue: 3.5.22
+ ajv-draft-04@1.0.0(ajv@8.18.0):
optionalDependencies:
- focus-trap: 7.6.6
- transitivePeerDependencies:
- - typescript
+ ajv: 8.18.0
- '@vueuse/metadata@12.8.2': {}
-
- '@vueuse/metadata@13.9.0': {}
-
- '@vueuse/shared@12.8.2':
+ ajv-errors@3.0.0(ajv@8.18.0):
dependencies:
- vue: 3.5.22
- transitivePeerDependencies:
- - typescript
+ ajv: 8.18.0
- '@vueuse/shared@13.9.0(vue@3.5.22)':
+ ajv-formats@2.1.1(ajv@8.18.0):
+ optionalDependencies:
+ ajv: 8.18.0
+
+ ajv-formats@3.0.1(ajv@8.18.0):
+ optionalDependencies:
+ ajv: 8.18.0
+
+ ajv@8.18.0:
dependencies:
- vue: 3.5.22
+ fast-deep-equal: 3.1.3
+ fast-uri: 3.1.0
+ json-schema-traverse: 1.0.0
+ require-from-string: 2.0.2
- acorn@8.15.0: {}
-
- algoliasearch@5.42.0:
+ ansi-escapes@4.3.2:
dependencies:
- '@algolia/abtesting': 1.8.0
- '@algolia/client-abtesting': 5.42.0
- '@algolia/client-analytics': 5.42.0
- '@algolia/client-common': 5.42.0
- '@algolia/client-insights': 5.42.0
- '@algolia/client-personalization': 5.42.0
- '@algolia/client-query-suggestions': 5.42.0
- '@algolia/client-search': 5.42.0
- '@algolia/ingestion': 1.42.0
- '@algolia/monitoring': 1.42.0
- '@algolia/recommend': 5.42.0
- '@algolia/requester-browser-xhr': 5.42.0
- '@algolia/requester-fetch': 5.42.0
- '@algolia/requester-node-http': 5.42.0
+ type-fest: 0.21.3
+
+ ansi-escapes@7.3.0:
+ dependencies:
+ environment: 1.1.0
+
+ ansi-regex@5.0.1: {}
+
+ ansi-regex@6.2.2: {}
+
+ ansi-styles@4.3.0:
+ dependencies:
+ color-convert: 2.0.1
+
+ ansi-styles@6.2.3: {}
+
+ any-promise@1.3.0: {}
+
+ anymatch@3.1.3:
+ dependencies:
+ normalize-path: 3.0.0
+ picomatch: 2.3.1
+
+ arg@5.0.2: {}
+
+ argparse@1.0.10:
+ dependencies:
+ sprintf-js: 1.0.3
+
+ argparse@2.0.1: {}
aria-hidden@1.2.6:
dependencies:
tslib: 2.8.1
- birpc@2.7.0: {}
+ arkregex@0.0.3:
+ dependencies:
+ '@ark/util': 0.55.0
+
+ arkregex@0.0.5:
+ dependencies:
+ '@ark/util': 0.56.0
+
+ arktype@2.1.27:
+ dependencies:
+ '@ark/schema': 0.55.0
+ '@ark/util': 0.55.0
+ arkregex: 0.0.3
+
+ arktype@2.1.29:
+ dependencies:
+ '@ark/schema': 0.56.0
+ '@ark/util': 0.56.0
+ arkregex: 0.0.5
+
+ array-buffer-byte-length@1.0.2:
+ dependencies:
+ call-bound: 1.0.4
+ is-array-buffer: 3.0.5
+
+ array-flatten@1.1.1: {}
+
+ array-iterate@2.0.1: {}
+
+ arraybuffer.prototype.slice@1.0.4:
+ dependencies:
+ array-buffer-byte-length: 1.0.2
+ call-bind: 1.0.8
+ define-properties: 1.2.1
+ es-abstract: 1.24.1
+ es-errors: 1.3.0
+ get-intrinsic: 1.3.0
+ is-array-buffer: 3.0.5
+
+ ast-types@0.13.4:
+ dependencies:
+ tslib: 2.8.1
+
+ astring@1.9.0: {}
+
+ async-function@1.0.0: {}
+
+ asynckit@0.4.0: {}
+
+ auto-bind@5.0.1: {}
+
+ available-typed-arrays@1.0.7:
+ dependencies:
+ possible-typed-array-names: 1.1.0
+
+ avsc@5.7.9: {}
+
+ axios@1.10.0:
+ dependencies:
+ follow-redirects: 1.15.11
+ form-data: 4.0.5
+ proxy-from-env: 1.1.0
+ transitivePeerDependencies:
+ - debug
+
+ axios@1.13.2:
+ dependencies:
+ follow-redirects: 1.15.11
+ form-data: 4.0.5
+ proxy-from-env: 1.1.0
+ transitivePeerDependencies:
+ - debug
+
+ b4a@1.8.0: {}
+
+ bail@2.0.2: {}
+
+ balanced-match@1.0.2: {}
+
+ bare-events@2.8.2: {}
+
+ bare-fs@4.5.4:
+ dependencies:
+ bare-events: 2.8.2
+ bare-path: 3.0.0
+ bare-stream: 2.8.0(bare-events@2.8.2)
+ bare-url: 2.3.2
+ fast-fifo: 1.3.2
+ transitivePeerDependencies:
+ - bare-abort-controller
+ - react-native-b4a
+ optional: true
+
+ bare-os@3.6.2:
+ optional: true
+
+ bare-path@3.0.0:
+ dependencies:
+ bare-os: 3.6.2
+ optional: true
+
+ bare-stream@2.8.0(bare-events@2.8.2):
+ dependencies:
+ streamx: 2.23.0
+ teex: 1.0.1
+ optionalDependencies:
+ bare-events: 2.8.2
+ transitivePeerDependencies:
+ - bare-abort-controller
+ - react-native-b4a
+ optional: true
+
+ bare-url@2.3.2:
+ dependencies:
+ bare-path: 3.0.0
+ optional: true
+
+ base64-js@1.5.1: {}
+
+ base64id@2.0.0: {}
+
+ basic-ftp@5.1.0: {}
+
+ better-opn@3.0.2:
+ dependencies:
+ open: 8.4.2
+
+ binary-extensions@2.3.0: {}
+
+ body-parser@1.20.1:
+ dependencies:
+ bytes: 3.1.2
+ content-type: 1.0.5
+ debug: 2.6.9
+ depd: 2.0.0
+ destroy: 1.2.0
+ http-errors: 2.0.0
+ iconv-lite: 0.4.24
+ on-finished: 2.4.1
+ qs: 6.11.0
+ raw-body: 2.5.1
+ type-is: 1.6.18
+ unpipe: 1.0.0
+ transitivePeerDependencies:
+ - supports-color
+
+ brace-expansion@1.1.12:
+ dependencies:
+ balanced-match: 1.0.2
+ concat-map: 0.0.1
+
+ braces@3.0.3:
+ dependencies:
+ fill-range: 7.1.1
+
+ buffer-crc32@0.2.13: {}
+
+ buffer@5.7.1:
+ dependencies:
+ base64-js: 1.5.1
+ ieee754: 1.2.1
+
+ bytes@3.1.2: {}
+
+ cacheable-lookup@7.0.0: {}
+
+ cacheable-request@10.2.14:
+ dependencies:
+ '@types/http-cache-semantics': 4.2.0
+ get-stream: 6.0.1
+ http-cache-semantics: 4.2.0
+ keyv: 4.5.4
+ mimic-response: 4.0.0
+ normalize-url: 8.1.1
+ responselike: 3.0.0
+
+ call-bind-apply-helpers@1.0.2:
+ dependencies:
+ es-errors: 1.3.0
+ function-bind: 1.1.2
+
+ call-bind@1.0.8:
+ dependencies:
+ call-bind-apply-helpers: 1.0.2
+ es-define-property: 1.0.1
+ get-intrinsic: 1.3.0
+ set-function-length: 1.2.2
+
+ call-bound@1.0.4:
+ dependencies:
+ call-bind-apply-helpers: 1.0.2
+ get-intrinsic: 1.3.0
+
+ callsites@3.1.0: {}
+
+ camelcase-css@2.0.1: {}
ccount@2.0.1: {}
+ chalk@5.2.0: {}
+
+ chalk@5.3.0: {}
+
+ chalk@5.6.2: {}
+
character-entities-html4@2.1.0: {}
character-entities-legacy@3.0.0: {}
- chevrotain-allstar@0.3.1(chevrotain@11.0.3):
- dependencies:
- chevrotain: 11.0.3
- lodash-es: 4.17.21
+ character-entities@2.0.2: {}
- chevrotain@11.0.3:
- dependencies:
- '@chevrotain/cst-dts-gen': 11.0.3
- '@chevrotain/gast': 11.0.3
- '@chevrotain/regexp-to-ast': 11.0.3
- '@chevrotain/types': 11.0.3
- '@chevrotain/utils': 11.0.3
- lodash-es: 4.17.21
+ character-reference-invalid@2.0.1: {}
- class-variance-authority@0.7.1:
- dependencies:
- clsx: 2.1.1
+ chardet@2.1.1: {}
- clsx@2.1.1: {}
+ chokidar@3.5.3:
+ dependencies:
+ anymatch: 3.1.3
+ braces: 3.0.3
+ glob-parent: 5.1.2
+ is-binary-path: 2.1.0
+ is-glob: 4.0.3
+ normalize-path: 3.0.0
+ readdirp: 3.6.0
+ optionalDependencies:
+ fsevents: 2.3.3
+
+ chokidar@3.6.0:
+ dependencies:
+ anymatch: 3.1.3
+ braces: 3.0.3
+ glob-parent: 5.1.2
+ is-binary-path: 2.1.0
+ is-glob: 4.0.3
+ normalize-path: 3.0.0
+ readdirp: 3.6.0
+ optionalDependencies:
+ fsevents: 2.3.3
+
+ chownr@2.0.0: {}
+
+ chromium-bidi@0.6.2(devtools-protocol@0.0.1312386):
+ dependencies:
+ devtools-protocol: 0.0.1312386
+ mitt: 3.0.1
+ urlpattern-polyfill: 10.0.0
+ zod: 3.23.8
+
+ clean-stack@4.2.0:
+ dependencies:
+ escape-string-regexp: 5.0.0
+
+ cli-boxes@3.0.0: {}
+
+ cli-cursor@4.0.0:
+ dependencies:
+ restore-cursor: 4.0.0
+
+ cli-spinners@2.9.2: {}
+
+ cli-truncate@4.0.0:
+ dependencies:
+ slice-ansi: 5.0.0
+ string-width: 7.2.0
+
+ cli-width@4.1.0: {}
+
+ cliui@8.0.1:
+ dependencies:
+ string-width: 4.2.3
+ strip-ansi: 6.0.1
+ wrap-ansi: 7.0.0
+
+ code-excerpt@4.0.0:
+ dependencies:
+ convert-to-spaces: 2.0.1
+
+ collapse-white-space@2.1.0: {}
+
+ color-blend@4.0.0: {}
+
+ color-convert@2.0.1:
+ dependencies:
+ color-name: 1.1.4
+
+ color-name@1.1.4: {}
+
+ color-string@1.9.1:
+ dependencies:
+ color-name: 1.1.4
+ simple-swizzle: 0.2.4
+
+ color@4.2.3:
+ dependencies:
+ color-convert: 2.0.1
+ color-string: 1.9.1
+
+ combined-stream@1.0.8:
+ dependencies:
+ delayed-stream: 1.0.0
comma-separated-tokens@2.0.3: {}
- commander@7.2.0: {}
+ commander@4.1.1: {}
commander@8.3.0: {}
- confbox@0.1.8: {}
+ concat-map@0.0.1: {}
- confbox@0.2.2: {}
-
- copy-anything@4.0.5:
+ content-disposition@0.5.4:
dependencies:
- is-what: 5.5.0
+ safe-buffer: 5.2.1
- cose-base@1.0.3:
+ content-type@1.0.5: {}
+
+ convert-to-spaces@2.0.1: {}
+
+ cookie-signature@1.0.6: {}
+
+ cookie@0.4.2: {}
+
+ cookie@0.5.0: {}
+
+ cors@2.8.6:
dependencies:
- layout-base: 1.0.2
+ object-assign: 4.1.1
+ vary: 1.1.2
- cose-base@2.2.0:
+ cosmiconfig@9.0.0(typescript@5.9.3):
dependencies:
- layout-base: 2.0.1
+ env-paths: 2.2.1
+ import-fresh: 3.3.1
+ js-yaml: 4.1.0
+ parse-json: 5.2.0
+ optionalDependencies:
+ typescript: 5.9.3
- csstype@3.1.3: {}
+ cssesc@3.0.0: {}
- cytoscape-cose-bilkent@4.1.0(cytoscape@3.33.1):
+ csstype@3.2.3: {}
+
+ data-uri-to-buffer@6.0.2: {}
+
+ data-view-buffer@1.0.2:
dependencies:
- cose-base: 1.0.3
- cytoscape: 3.33.1
+ call-bound: 1.0.4
+ es-errors: 1.3.0
+ is-data-view: 1.0.2
- cytoscape-fcose@2.2.0(cytoscape@3.33.1):
+ data-view-byte-length@1.0.2:
dependencies:
- cose-base: 2.2.0
- cytoscape: 3.33.1
+ call-bound: 1.0.4
+ es-errors: 1.3.0
+ is-data-view: 1.0.2
- cytoscape@3.33.1: {}
-
- d3-array@2.12.1:
+ data-view-byte-offset@1.0.1:
dependencies:
- internmap: 1.0.1
+ call-bound: 1.0.4
+ es-errors: 1.3.0
+ is-data-view: 1.0.2
- d3-array@3.2.4:
+ debug@2.6.9:
dependencies:
- internmap: 2.0.3
+ ms: 2.0.0
- d3-axis@3.0.0: {}
-
- d3-brush@3.0.0:
+ debug@4.3.7:
dependencies:
- d3-dispatch: 3.0.1
- d3-drag: 3.0.0
- d3-interpolate: 3.0.1
- d3-selection: 3.0.0
- d3-transition: 3.0.1(d3-selection@3.0.0)
-
- d3-chord@3.0.1:
- dependencies:
- d3-path: 3.1.0
-
- d3-color@3.1.0: {}
-
- d3-contour@4.0.2:
- dependencies:
- d3-array: 3.2.4
-
- d3-delaunay@6.0.4:
- dependencies:
- delaunator: 5.0.1
-
- d3-dispatch@3.0.1: {}
-
- d3-drag@3.0.0:
- dependencies:
- d3-dispatch: 3.0.1
- d3-selection: 3.0.0
-
- d3-dsv@3.0.1:
- dependencies:
- commander: 7.2.0
- iconv-lite: 0.6.3
- rw: 1.3.3
-
- d3-ease@3.0.1: {}
-
- d3-fetch@3.0.1:
- dependencies:
- d3-dsv: 3.0.1
-
- d3-force@3.0.0:
- dependencies:
- d3-dispatch: 3.0.1
- d3-quadtree: 3.0.1
- d3-timer: 3.0.1
-
- d3-format@3.1.0: {}
-
- d3-geo@3.1.1:
- dependencies:
- d3-array: 3.2.4
-
- d3-hierarchy@3.1.2: {}
-
- d3-interpolate@3.0.1:
- dependencies:
- d3-color: 3.1.0
-
- d3-path@1.0.9: {}
-
- d3-path@3.1.0: {}
-
- d3-polygon@3.0.1: {}
-
- d3-quadtree@3.0.1: {}
-
- d3-random@3.0.1: {}
-
- d3-sankey@0.12.3:
- dependencies:
- d3-array: 2.12.1
- d3-shape: 1.3.7
-
- d3-scale-chromatic@3.1.0:
- dependencies:
- d3-color: 3.1.0
- d3-interpolate: 3.0.1
-
- d3-scale@4.0.2:
- dependencies:
- d3-array: 3.2.4
- d3-format: 3.1.0
- d3-interpolate: 3.0.1
- d3-time: 3.1.0
- d3-time-format: 4.1.0
-
- d3-selection@3.0.0: {}
-
- d3-shape@1.3.7:
- dependencies:
- d3-path: 1.0.9
-
- d3-shape@3.2.0:
- dependencies:
- d3-path: 3.1.0
-
- d3-time-format@4.1.0:
- dependencies:
- d3-time: 3.1.0
-
- d3-time@3.1.0:
- dependencies:
- d3-array: 3.2.4
-
- d3-timer@3.0.1: {}
-
- d3-transition@3.0.1(d3-selection@3.0.0):
- dependencies:
- d3-color: 3.1.0
- d3-dispatch: 3.0.1
- d3-ease: 3.0.1
- d3-interpolate: 3.0.1
- d3-selection: 3.0.0
- d3-timer: 3.0.1
-
- d3-zoom@3.0.0:
- dependencies:
- d3-dispatch: 3.0.1
- d3-drag: 3.0.0
- d3-interpolate: 3.0.1
- d3-selection: 3.0.0
- d3-transition: 3.0.1(d3-selection@3.0.0)
-
- d3@7.9.0:
- dependencies:
- d3-array: 3.2.4
- d3-axis: 3.0.0
- d3-brush: 3.0.0
- d3-chord: 3.0.1
- d3-color: 3.1.0
- d3-contour: 4.0.2
- d3-delaunay: 6.0.4
- d3-dispatch: 3.0.1
- d3-drag: 3.0.0
- d3-dsv: 3.0.1
- d3-ease: 3.0.1
- d3-fetch: 3.0.1
- d3-force: 3.0.0
- d3-format: 3.1.0
- d3-geo: 3.1.1
- d3-hierarchy: 3.1.2
- d3-interpolate: 3.0.1
- d3-path: 3.1.0
- d3-polygon: 3.0.1
- d3-quadtree: 3.0.1
- d3-random: 3.0.1
- d3-scale: 4.0.2
- d3-scale-chromatic: 3.1.0
- d3-selection: 3.0.0
- d3-shape: 3.2.0
- d3-time: 3.1.0
- d3-time-format: 4.1.0
- d3-timer: 3.0.1
- d3-transition: 3.0.1(d3-selection@3.0.0)
- d3-zoom: 3.0.0
-
- dagre-d3-es@7.0.13:
- dependencies:
- d3: 7.9.0
- lodash-es: 4.17.21
-
- dayjs@1.11.19: {}
+ ms: 2.1.3
debug@4.4.3:
dependencies:
ms: 2.1.3
- defu@6.1.4: {}
-
- delaunator@5.0.1:
+ decode-bmp@0.2.1:
dependencies:
- robust-predicates: 3.0.2
+ '@canvas/image-data': 1.1.0
+ to-data-view: 1.1.0
+
+ decode-ico@0.4.1:
+ dependencies:
+ '@canvas/image-data': 1.1.0
+ decode-bmp: 0.2.1
+ to-data-view: 1.1.0
+
+ decode-named-character-reference@1.3.0:
+ dependencies:
+ character-entities: 2.0.2
+
+ decompress-response@6.0.0:
+ dependencies:
+ mimic-response: 3.1.0
+
+ defer-to-connect@2.0.1: {}
+
+ define-data-property@1.1.4:
+ dependencies:
+ es-define-property: 1.0.1
+ es-errors: 1.3.0
+ gopd: 1.2.0
+
+ define-lazy-prop@2.0.0: {}
+
+ define-properties@1.2.1:
+ dependencies:
+ define-data-property: 1.1.4
+ has-property-descriptors: 1.0.2
+ object-keys: 1.1.1
+
+ degenerator@5.0.1:
+ dependencies:
+ ast-types: 0.13.4
+ escodegen: 2.1.0
+ esprima: 4.0.1
+
+ delayed-stream@1.0.0: {}
+
+ depd@2.0.0: {}
+
+ dependency-graph@0.11.0: {}
dequal@2.0.3: {}
+ destroy@1.2.0: {}
+
+ detect-libc@2.1.2: {}
+
+ detect-node-es@1.1.0: {}
+
+ detect-port@1.5.1:
+ dependencies:
+ address: 1.2.2
+ debug: 4.4.3
+ transitivePeerDependencies:
+ - supports-color
+
devlop@1.1.0:
dependencies:
dequal: 2.0.3
- dompurify@3.3.0:
- optionalDependencies:
- '@types/trusted-types': 2.0.7
+ devtools-protocol@0.0.1312386: {}
- emoji-regex-xs@1.0.0: {}
+ didyoumean@1.2.2: {}
- entities@4.5.0: {}
+ dlv@1.1.3: {}
- esbuild@0.21.5:
- optionalDependencies:
- '@esbuild/aix-ppc64': 0.21.5
- '@esbuild/android-arm': 0.21.5
- '@esbuild/android-arm64': 0.21.5
- '@esbuild/android-x64': 0.21.5
- '@esbuild/darwin-arm64': 0.21.5
- '@esbuild/darwin-x64': 0.21.5
- '@esbuild/freebsd-arm64': 0.21.5
- '@esbuild/freebsd-x64': 0.21.5
- '@esbuild/linux-arm': 0.21.5
- '@esbuild/linux-arm64': 0.21.5
- '@esbuild/linux-ia32': 0.21.5
- '@esbuild/linux-loong64': 0.21.5
- '@esbuild/linux-mips64el': 0.21.5
- '@esbuild/linux-ppc64': 0.21.5
- '@esbuild/linux-riscv64': 0.21.5
- '@esbuild/linux-s390x': 0.21.5
- '@esbuild/linux-x64': 0.21.5
- '@esbuild/netbsd-x64': 0.21.5
- '@esbuild/openbsd-x64': 0.21.5
- '@esbuild/sunos-x64': 0.21.5
- '@esbuild/win32-arm64': 0.21.5
- '@esbuild/win32-ia32': 0.21.5
- '@esbuild/win32-x64': 0.21.5
-
- estree-walker@2.0.2: {}
-
- exsolve@1.0.7: {}
-
- focus-trap@7.6.6:
+ dns-packet@5.6.1:
dependencies:
- tabbable: 6.3.0
+ '@leichtgewicht/ip-codec': 2.0.5
+
+ dns-socket@4.2.2:
+ dependencies:
+ dns-packet: 5.6.1
+
+ dunder-proto@1.0.1:
+ dependencies:
+ call-bind-apply-helpers: 1.0.2
+ es-errors: 1.3.0
+ gopd: 1.2.0
+
+ ee-first@1.1.1: {}
+
+ emoji-regex@10.6.0: {}
+
+ emoji-regex@8.0.0: {}
+
+ encodeurl@1.0.2: {}
+
+ end-of-stream@1.4.5:
+ dependencies:
+ once: 1.4.0
+
+ engine.io-parser@5.2.3: {}
+
+ engine.io@6.5.5:
+ dependencies:
+ '@types/cookie': 0.4.1
+ '@types/cors': 2.8.19
+ '@types/node': 25.3.0
+ accepts: 1.3.8
+ base64id: 2.0.0
+ cookie: 0.4.2
+ cors: 2.8.6
+ debug: 4.3.7
+ engine.io-parser: 5.2.3
+ ws: 8.17.1
+ transitivePeerDependencies:
+ - bufferutil
+ - supports-color
+ - utf-8-validate
+
+ entities@6.0.1: {}
+
+ env-paths@2.2.1: {}
+
+ environment@1.1.0: {}
+
+ error-ex@1.3.4:
+ dependencies:
+ is-arrayish: 0.2.1
+
+ es-abstract@1.24.1:
+ dependencies:
+ array-buffer-byte-length: 1.0.2
+ arraybuffer.prototype.slice: 1.0.4
+ available-typed-arrays: 1.0.7
+ call-bind: 1.0.8
+ call-bound: 1.0.4
+ data-view-buffer: 1.0.2
+ data-view-byte-length: 1.0.2
+ data-view-byte-offset: 1.0.1
+ es-define-property: 1.0.1
+ es-errors: 1.3.0
+ es-object-atoms: 1.1.1
+ es-set-tostringtag: 2.1.0
+ es-to-primitive: 1.3.0
+ function.prototype.name: 1.1.8
+ get-intrinsic: 1.3.0
+ get-proto: 1.0.1
+ get-symbol-description: 1.1.0
+ globalthis: 1.0.4
+ gopd: 1.2.0
+ has-property-descriptors: 1.0.2
+ has-proto: 1.2.0
+ has-symbols: 1.1.0
+ hasown: 2.0.2
+ internal-slot: 1.1.0
+ is-array-buffer: 3.0.5
+ is-callable: 1.2.7
+ is-data-view: 1.0.2
+ is-negative-zero: 2.0.3
+ is-regex: 1.2.1
+ is-set: 2.0.3
+ is-shared-array-buffer: 1.0.4
+ is-string: 1.1.1
+ is-typed-array: 1.1.15
+ is-weakref: 1.1.1
+ math-intrinsics: 1.1.0
+ object-inspect: 1.13.4
+ object-keys: 1.1.1
+ object.assign: 4.1.7
+ own-keys: 1.0.1
+ regexp.prototype.flags: 1.5.4
+ safe-array-concat: 1.1.3
+ safe-push-apply: 1.0.0
+ safe-regex-test: 1.1.0
+ set-proto: 1.0.0
+ stop-iteration-iterator: 1.1.0
+ string.prototype.trim: 1.2.10
+ string.prototype.trimend: 1.0.9
+ string.prototype.trimstart: 1.0.8
+ typed-array-buffer: 1.0.3
+ typed-array-byte-length: 1.0.3
+ typed-array-byte-offset: 1.0.4
+ typed-array-length: 1.0.7
+ unbox-primitive: 1.1.0
+ which-typed-array: 1.1.20
+
+ es-aggregate-error@1.0.14:
+ dependencies:
+ define-data-property: 1.1.4
+ define-properties: 1.2.1
+ es-abstract: 1.24.1
+ es-errors: 1.3.0
+ function-bind: 1.1.2
+ globalthis: 1.0.4
+ has-property-descriptors: 1.0.2
+ set-function-name: 2.0.2
+
+ es-define-property@1.0.1: {}
+
+ es-errors@1.3.0: {}
+
+ es-object-atoms@1.1.1:
+ dependencies:
+ es-errors: 1.3.0
+
+ es-set-tostringtag@2.1.0:
+ dependencies:
+ es-errors: 1.3.0
+ get-intrinsic: 1.3.0
+ has-tostringtag: 1.0.2
+ hasown: 2.0.2
+
+ es-to-primitive@1.3.0:
+ dependencies:
+ is-callable: 1.2.7
+ is-date-object: 1.1.0
+ is-symbol: 1.1.1
+
+ es-toolkit@1.44.0: {}
+
+ esast-util-from-estree@2.0.0:
+ dependencies:
+ '@types/estree-jsx': 1.0.5
+ devlop: 1.1.0
+ estree-util-visit: 2.0.0
+ unist-util-position-from-estree: 2.0.0
+
+ esast-util-from-js@2.0.1:
+ dependencies:
+ '@types/estree-jsx': 1.0.5
+ acorn: 8.11.2
+ esast-util-from-estree: 2.0.0
+ vfile-message: 4.0.3
+
+ escalade@3.2.0: {}
+
+ escape-html@1.0.3: {}
+
+ escape-string-regexp@2.0.0: {}
+
+ escape-string-regexp@5.0.0: {}
+
+ escodegen@2.1.0:
+ dependencies:
+ esprima: 4.0.1
+ estraverse: 5.3.0
+ esutils: 2.0.3
+ optionalDependencies:
+ source-map: 0.6.1
+
+ esprima@4.0.1: {}
+
+ estraverse@5.3.0: {}
+
+ estree-util-attach-comments@3.0.0:
+ dependencies:
+ '@types/estree': 1.0.8
+
+ estree-util-build-jsx@3.0.1:
+ dependencies:
+ '@types/estree-jsx': 1.0.5
+ devlop: 1.1.0
+ estree-util-is-identifier-name: 3.0.0
+ estree-walker: 3.0.3
+
+ estree-util-is-identifier-name@3.0.0: {}
+
+ estree-util-scope@1.0.0:
+ dependencies:
+ '@types/estree': 1.0.8
+ devlop: 1.1.0
+
+ estree-util-to-js@2.0.0:
+ dependencies:
+ '@types/estree-jsx': 1.0.5
+ astring: 1.9.0
+ source-map: 0.7.6
+
+ estree-util-visit@2.0.0:
+ dependencies:
+ '@types/estree-jsx': 1.0.5
+ '@types/unist': 3.0.3
+
+ estree-walker@3.0.3:
+ dependencies:
+ '@types/estree': 1.0.8
+
+ esutils@2.0.3: {}
+
+ etag@1.8.1: {}
+
+ event-target-shim@5.0.1: {}
+
+ events-universal@1.0.1:
+ dependencies:
+ bare-events: 2.8.2
+ transitivePeerDependencies:
+ - bare-abort-controller
+
+ express@4.18.2:
+ dependencies:
+ accepts: 1.3.8
+ array-flatten: 1.1.1
+ body-parser: 1.20.1
+ content-disposition: 0.5.4
+ content-type: 1.0.5
+ cookie: 0.5.0
+ cookie-signature: 1.0.6
+ debug: 2.6.9
+ depd: 2.0.0
+ encodeurl: 1.0.2
+ escape-html: 1.0.3
+ etag: 1.8.1
+ finalhandler: 1.2.0
+ fresh: 0.5.2
+ http-errors: 2.0.0
+ merge-descriptors: 1.0.1
+ methods: 1.1.2
+ on-finished: 2.4.1
+ parseurl: 1.3.3
+ path-to-regexp: 0.1.7
+ proxy-addr: 2.0.7
+ qs: 6.11.0
+ range-parser: 1.2.1
+ safe-buffer: 5.2.1
+ send: 0.18.0
+ serve-static: 1.15.0
+ setprototypeof: 1.2.0
+ statuses: 2.0.1
+ type-is: 1.6.18
+ utils-merge: 1.0.1
+ vary: 1.1.2
+ transitivePeerDependencies:
+ - supports-color
+
+ extend@3.0.2: {}
+
+ extract-zip@2.0.1:
+ dependencies:
+ debug: 4.4.3
+ get-stream: 5.2.0
+ yauzl: 2.10.0
+ optionalDependencies:
+ '@types/yauzl': 2.10.3
+ transitivePeerDependencies:
+ - supports-color
+
+ fast-deep-equal@3.1.3: {}
+
+ fast-fifo@1.3.2: {}
+
+ fast-glob@3.3.3:
+ dependencies:
+ '@nodelib/fs.stat': 2.0.5
+ '@nodelib/fs.walk': 1.2.8
+ glob-parent: 5.1.2
+ merge2: 1.4.1
+ micromatch: 4.0.8
+
+ fast-memoize@2.5.2: {}
+
+ fast-uri@3.1.0: {}
+
+ fastq@1.20.1:
+ dependencies:
+ reusify: 1.1.0
+
+ fault@2.0.1:
+ dependencies:
+ format: 0.2.2
+
+ favicons@7.2.0:
+ dependencies:
+ escape-html: 1.0.3
+ sharp: 0.33.5
+ xml2js: 0.6.2
+
+ fd-slicer@1.1.0:
+ dependencies:
+ pend: 1.2.0
+
+ fdir@6.5.0(picomatch@4.0.3):
+ optionalDependencies:
+ picomatch: 4.0.3
+
+ fill-range@7.1.1:
+ dependencies:
+ to-regex-range: 5.0.1
+
+ finalhandler@1.2.0:
+ dependencies:
+ debug: 2.6.9
+ encodeurl: 1.0.2
+ escape-html: 1.0.3
+ on-finished: 2.4.1
+ parseurl: 1.3.3
+ statuses: 2.0.1
+ unpipe: 1.0.0
+ transitivePeerDependencies:
+ - supports-color
+
+ follow-redirects@1.15.11: {}
+
+ for-each@0.3.5:
+ dependencies:
+ is-callable: 1.2.7
+
+ form-data-encoder@2.1.4: {}
+
+ form-data@4.0.5:
+ dependencies:
+ asynckit: 0.4.0
+ combined-stream: 1.0.8
+ es-set-tostringtag: 2.1.0
+ hasown: 2.0.2
+ mime-types: 2.1.35
+
+ format@0.2.2: {}
+
+ forwarded@0.2.0: {}
+
+ fresh@0.5.2: {}
+
+ front-matter@4.0.2:
+ dependencies:
+ js-yaml: 3.14.2
+
+ fs-extra@11.1.0:
+ dependencies:
+ graceful-fs: 4.2.11
+ jsonfile: 6.2.0
+ universalify: 2.0.1
+
+ fs-extra@11.1.1:
+ dependencies:
+ graceful-fs: 4.2.11
+ jsonfile: 6.2.0
+ universalify: 2.0.1
+
+ fs-extra@11.2.0:
+ dependencies:
+ graceful-fs: 4.2.11
+ jsonfile: 6.2.0
+ universalify: 2.0.1
+
+ fs-minipass@2.1.0:
+ dependencies:
+ minipass: 3.3.6
fsevents@2.3.3:
optional: true
- globals@15.15.0: {}
+ function-bind@1.1.2: {}
- hachure-fill@0.5.2: {}
+ function.prototype.name@1.1.8:
+ dependencies:
+ call-bind: 1.0.8
+ call-bound: 1.0.4
+ define-properties: 1.2.1
+ functions-have-names: 1.2.3
+ hasown: 2.0.2
+ is-callable: 1.2.7
+
+ functions-have-names@1.2.3: {}
+
+ gcd@0.0.1: {}
+
+ generator-function@2.0.1: {}
+
+ get-caller-file@2.0.5: {}
+
+ get-east-asian-width@1.5.0: {}
+
+ get-intrinsic@1.3.0:
+ dependencies:
+ call-bind-apply-helpers: 1.0.2
+ es-define-property: 1.0.1
+ es-errors: 1.3.0
+ es-object-atoms: 1.1.1
+ function-bind: 1.1.2
+ get-proto: 1.0.1
+ gopd: 1.2.0
+ has-symbols: 1.1.0
+ hasown: 2.0.2
+ math-intrinsics: 1.1.0
+
+ get-nonce@1.0.1: {}
+
+ get-proto@1.0.1:
+ dependencies:
+ dunder-proto: 1.0.1
+ es-object-atoms: 1.1.1
+
+ get-stream@5.2.0:
+ dependencies:
+ pump: 3.0.3
+
+ get-stream@6.0.1: {}
+
+ get-symbol-description@1.1.0:
+ dependencies:
+ call-bound: 1.0.4
+ es-errors: 1.3.0
+ get-intrinsic: 1.3.0
+
+ get-uri@6.0.5:
+ dependencies:
+ basic-ftp: 5.1.0
+ data-uri-to-buffer: 6.0.2
+ debug: 4.4.3
+ transitivePeerDependencies:
+ - supports-color
+
+ glob-parent@5.1.2:
+ dependencies:
+ is-glob: 4.0.3
+
+ glob-parent@6.0.2:
+ dependencies:
+ is-glob: 4.0.3
+
+ globalthis@1.0.4:
+ dependencies:
+ define-properties: 1.2.1
+ gopd: 1.2.0
+
+ gopd@1.2.0: {}
+
+ got@12.6.1:
+ dependencies:
+ '@sindresorhus/is': 5.6.0
+ '@szmarczak/http-timer': 5.0.1
+ cacheable-lookup: 7.0.0
+ cacheable-request: 10.2.14
+ decompress-response: 6.0.0
+ form-data-encoder: 2.1.4
+ get-stream: 6.0.1
+ http2-wrapper: 2.2.1
+ lowercase-keys: 3.0.0
+ p-cancelable: 3.0.0
+ responselike: 3.0.0
+
+ got@13.0.0:
+ dependencies:
+ '@sindresorhus/is': 5.6.0
+ '@szmarczak/http-timer': 5.0.1
+ cacheable-lookup: 7.0.0
+ cacheable-request: 10.2.14
+ decompress-response: 6.0.0
+ form-data-encoder: 2.1.4
+ get-stream: 6.0.1
+ http2-wrapper: 2.2.1
+ lowercase-keys: 3.0.0
+ p-cancelable: 3.0.0
+ responselike: 3.0.0
+
+ graceful-fs@4.2.11: {}
+
+ has-bigints@1.1.0: {}
+
+ has-property-descriptors@1.0.2:
+ dependencies:
+ es-define-property: 1.0.1
+
+ has-proto@1.2.0:
+ dependencies:
+ dunder-proto: 1.0.1
+
+ has-symbols@1.1.0: {}
+
+ has-tostringtag@1.0.2:
+ dependencies:
+ has-symbols: 1.1.0
+
+ hasown@2.0.2:
+ dependencies:
+ function-bind: 1.1.2
+
+ hast-util-embedded@3.0.0:
+ dependencies:
+ '@types/hast': 3.0.4
+ hast-util-is-element: 3.0.0
+
+ hast-util-from-dom@5.0.1:
+ dependencies:
+ '@types/hast': 3.0.4
+ hastscript: 9.0.1
+ web-namespaces: 2.0.1
+
+ hast-util-from-html-isomorphic@2.0.0:
+ dependencies:
+ '@types/hast': 3.0.4
+ hast-util-from-dom: 5.0.1
+ hast-util-from-html: 2.0.3
+ unist-util-remove-position: 5.0.0
+
+ hast-util-from-html@2.0.3:
+ dependencies:
+ '@types/hast': 3.0.4
+ devlop: 1.1.0
+ hast-util-from-parse5: 8.0.3
+ parse5: 7.3.0
+ vfile: 6.0.3
+ vfile-message: 4.0.3
+
+ hast-util-from-parse5@8.0.3:
+ dependencies:
+ '@types/hast': 3.0.4
+ '@types/unist': 3.0.3
+ devlop: 1.1.0
+ hastscript: 9.0.1
+ property-information: 7.1.0
+ vfile: 6.0.3
+ vfile-location: 5.0.3
+ web-namespaces: 2.0.1
+
+ hast-util-has-property@3.0.0:
+ dependencies:
+ '@types/hast': 3.0.4
+
+ hast-util-is-body-ok-link@3.0.1:
+ dependencies:
+ '@types/hast': 3.0.4
+
+ hast-util-is-element@3.0.0:
+ dependencies:
+ '@types/hast': 3.0.4
+
+ hast-util-minify-whitespace@1.0.1:
+ dependencies:
+ '@types/hast': 3.0.4
+ hast-util-embedded: 3.0.0
+ hast-util-is-element: 3.0.0
+ hast-util-whitespace: 3.0.0
+ unist-util-is: 6.0.1
+
+ hast-util-parse-selector@4.0.0:
+ dependencies:
+ '@types/hast': 3.0.4
+
+ hast-util-phrasing@3.0.1:
+ dependencies:
+ '@types/hast': 3.0.4
+ hast-util-embedded: 3.0.0
+ hast-util-has-property: 3.0.0
+ hast-util-is-body-ok-link: 3.0.1
+ hast-util-is-element: 3.0.0
+
+ hast-util-to-estree@3.1.3:
+ dependencies:
+ '@types/estree': 1.0.8
+ '@types/estree-jsx': 1.0.5
+ '@types/hast': 3.0.4
+ comma-separated-tokens: 2.0.3
+ devlop: 1.1.0
+ estree-util-attach-comments: 3.0.0
+ estree-util-is-identifier-name: 3.0.0
+ hast-util-whitespace: 3.0.0
+ mdast-util-mdx-expression: 2.0.1
+ mdast-util-mdx-jsx: 3.2.0
+ mdast-util-mdxjs-esm: 2.0.1
+ property-information: 7.1.0
+ space-separated-tokens: 2.0.2
+ style-to-js: 1.1.21
+ unist-util-position: 5.0.0
+ zwitch: 2.0.4
+ transitivePeerDependencies:
+ - supports-color
+
+ hast-util-to-html@9.0.4:
+ dependencies:
+ '@types/hast': 3.0.4
+ '@types/unist': 3.0.3
+ ccount: 2.0.1
+ comma-separated-tokens: 2.0.3
+ hast-util-whitespace: 3.0.0
+ html-void-elements: 3.0.0
+ mdast-util-to-hast: 13.2.1
+ property-information: 6.5.0
+ space-separated-tokens: 2.0.2
+ stringify-entities: 4.0.4
+ zwitch: 2.0.4
hast-util-to-html@9.0.5:
dependencies:
@@ -2366,73 +5957,637 @@ snapshots:
comma-separated-tokens: 2.0.3
hast-util-whitespace: 3.0.0
html-void-elements: 3.0.0
- mdast-util-to-hast: 13.2.0
+ mdast-util-to-hast: 13.2.1
property-information: 7.1.0
space-separated-tokens: 2.0.2
stringify-entities: 4.0.4
zwitch: 2.0.4
+ hast-util-to-jsx-runtime@2.3.6:
+ dependencies:
+ '@types/estree': 1.0.8
+ '@types/hast': 3.0.4
+ '@types/unist': 3.0.3
+ comma-separated-tokens: 2.0.3
+ devlop: 1.1.0
+ estree-util-is-identifier-name: 3.0.0
+ hast-util-whitespace: 3.0.0
+ mdast-util-mdx-expression: 2.0.1
+ mdast-util-mdx-jsx: 3.2.0
+ mdast-util-mdxjs-esm: 2.0.1
+ property-information: 7.1.0
+ space-separated-tokens: 2.0.2
+ style-to-js: 1.1.21
+ unist-util-position: 5.0.0
+ vfile-message: 4.0.3
+ transitivePeerDependencies:
+ - supports-color
+
+ hast-util-to-mdast@10.1.0:
+ dependencies:
+ '@types/hast': 3.0.4
+ '@types/mdast': 4.0.4
+ '@ungap/structured-clone': 1.3.0
+ hast-util-phrasing: 3.0.1
+ hast-util-to-html: 9.0.5
+ hast-util-to-text: 4.0.2
+ hast-util-whitespace: 3.0.0
+ mdast-util-phrasing: 4.1.0
+ mdast-util-to-hast: 13.2.1
+ mdast-util-to-string: 4.0.0
+ rehype-minify-whitespace: 6.0.2
+ trim-trailing-lines: 2.1.0
+ unist-util-position: 5.0.0
+ unist-util-visit: 5.0.0
+
+ hast-util-to-string@3.0.1:
+ dependencies:
+ '@types/hast': 3.0.4
+
+ hast-util-to-text@4.0.2:
+ dependencies:
+ '@types/hast': 3.0.4
+ '@types/unist': 3.0.3
+ hast-util-is-element: 3.0.0
+ unist-util-find-after: 5.0.0
+
hast-util-whitespace@3.0.0:
dependencies:
'@types/hast': 3.0.4
- hookable@5.5.3: {}
+ hastscript@9.0.1:
+ dependencies:
+ '@types/hast': 3.0.4
+ comma-separated-tokens: 2.0.3
+ hast-util-parse-selector: 4.0.0
+ property-information: 7.1.0
+ space-separated-tokens: 2.0.2
+
+ hex-rgb@5.0.0: {}
html-void-elements@3.0.0: {}
- iconv-lite@0.6.3:
+ http-cache-semantics@4.2.0: {}
+
+ http-errors@2.0.0:
+ dependencies:
+ depd: 2.0.0
+ inherits: 2.0.4
+ setprototypeof: 1.2.0
+ statuses: 2.0.1
+ toidentifier: 1.0.1
+
+ http-proxy-agent@7.0.2:
+ dependencies:
+ agent-base: 7.1.4
+ debug: 4.4.3
+ transitivePeerDependencies:
+ - supports-color
+
+ http2-wrapper@2.2.1:
+ dependencies:
+ quick-lru: 5.1.1
+ resolve-alpn: 1.2.1
+
+ https-proxy-agent@7.0.6:
+ dependencies:
+ agent-base: 7.1.4
+ debug: 4.4.3
+ transitivePeerDependencies:
+ - supports-color
+
+ ico-endec@0.1.6: {}
+
+ iconv-lite@0.4.24:
dependencies:
safer-buffer: 2.1.2
- internmap@1.0.1: {}
+ iconv-lite@0.7.2:
+ dependencies:
+ safer-buffer: 2.1.2
- internmap@2.0.3: {}
+ ieee754@1.2.1: {}
- is-what@5.5.0: {}
+ ignore@7.0.5: {}
- katex@0.16.25:
+ immer@9.0.21: {}
+
+ import-fresh@3.3.1:
+ dependencies:
+ parent-module: 1.0.1
+ resolve-from: 4.0.0
+
+ indent-string@5.0.0: {}
+
+ inherits@2.0.4: {}
+
+ ink-spinner@5.0.0(ink@6.3.0(@types/react@19.2.14)(react@19.2.3))(react@19.2.3):
+ dependencies:
+ cli-spinners: 2.9.2
+ ink: 6.3.0(@types/react@19.2.14)(react@19.2.3)
+ react: 19.2.3
+
+ ink@6.3.0(@types/react@19.2.14)(react@19.2.3):
+ dependencies:
+ '@alcalzone/ansi-tokenize': 0.2.5
+ ansi-escapes: 7.3.0
+ ansi-styles: 6.2.3
+ auto-bind: 5.0.1
+ chalk: 5.6.2
+ cli-boxes: 3.0.0
+ cli-cursor: 4.0.0
+ cli-truncate: 4.0.0
+ code-excerpt: 4.0.0
+ es-toolkit: 1.44.0
+ indent-string: 5.0.0
+ is-in-ci: 2.0.0
+ patch-console: 2.0.0
+ react: 19.2.3
+ react-reconciler: 0.32.0(react@19.2.3)
+ signal-exit: 3.0.7
+ slice-ansi: 7.1.2
+ stack-utils: 2.0.6
+ string-width: 7.2.0
+ type-fest: 4.41.0
+ widest-line: 5.0.0
+ wrap-ansi: 9.0.2
+ ws: 8.19.0
+ yoga-layout: 3.2.1
+ optionalDependencies:
+ '@types/react': 19.2.14
+ transitivePeerDependencies:
+ - bufferutil
+ - utf-8-validate
+
+ inline-style-parser@0.2.7: {}
+
+ inquirer@12.3.0(@types/node@25.3.0):
+ dependencies:
+ '@inquirer/core': 10.3.2(@types/node@25.3.0)
+ '@inquirer/prompts': 7.9.0(@types/node@25.3.0)
+ '@inquirer/type': 3.0.10(@types/node@25.3.0)
+ '@types/node': 25.3.0
+ ansi-escapes: 4.3.2
+ mute-stream: 2.0.0
+ run-async: 3.0.0
+ rxjs: 7.8.2
+
+ internal-slot@1.1.0:
+ dependencies:
+ es-errors: 1.3.0
+ hasown: 2.0.2
+ side-channel: 1.1.0
+
+ ip-address@10.1.0: {}
+
+ ip-regex@4.3.0: {}
+
+ ipaddr.js@1.9.1: {}
+
+ is-alphabetical@2.0.1: {}
+
+ is-alphanumerical@2.0.1:
+ dependencies:
+ is-alphabetical: 2.0.1
+ is-decimal: 2.0.1
+
+ is-array-buffer@3.0.5:
+ dependencies:
+ call-bind: 1.0.8
+ call-bound: 1.0.4
+ get-intrinsic: 1.3.0
+
+ is-arrayish@0.2.1: {}
+
+ is-arrayish@0.3.4: {}
+
+ is-async-function@2.1.1:
+ dependencies:
+ async-function: 1.0.0
+ call-bound: 1.0.4
+ get-proto: 1.0.1
+ has-tostringtag: 1.0.2
+ safe-regex-test: 1.1.0
+
+ is-bigint@1.1.0:
+ dependencies:
+ has-bigints: 1.1.0
+
+ is-binary-path@2.1.0:
+ dependencies:
+ binary-extensions: 2.3.0
+
+ is-boolean-object@1.2.2:
+ dependencies:
+ call-bound: 1.0.4
+ has-tostringtag: 1.0.2
+
+ is-callable@1.2.7: {}
+
+ is-core-module@2.16.1:
+ dependencies:
+ hasown: 2.0.2
+
+ is-data-view@1.0.2:
+ dependencies:
+ call-bound: 1.0.4
+ get-intrinsic: 1.3.0
+ is-typed-array: 1.1.15
+
+ is-date-object@1.1.0:
+ dependencies:
+ call-bound: 1.0.4
+ has-tostringtag: 1.0.2
+
+ is-decimal@2.0.1: {}
+
+ is-docker@2.2.1: {}
+
+ is-extglob@2.1.1: {}
+
+ is-finalizationregistry@1.1.1:
+ dependencies:
+ call-bound: 1.0.4
+
+ is-fullwidth-code-point@3.0.0: {}
+
+ is-fullwidth-code-point@4.0.0: {}
+
+ is-fullwidth-code-point@5.1.0:
+ dependencies:
+ get-east-asian-width: 1.5.0
+
+ is-generator-function@1.1.2:
+ dependencies:
+ call-bound: 1.0.4
+ generator-function: 2.0.1
+ get-proto: 1.0.1
+ has-tostringtag: 1.0.2
+ safe-regex-test: 1.1.0
+
+ is-glob@4.0.3:
+ dependencies:
+ is-extglob: 2.1.1
+
+ is-hexadecimal@2.0.1: {}
+
+ is-in-ci@2.0.0: {}
+
+ is-ip@3.1.0:
+ dependencies:
+ ip-regex: 4.3.0
+
+ is-map@2.0.3: {}
+
+ is-negative-zero@2.0.3: {}
+
+ is-number-object@1.1.1:
+ dependencies:
+ call-bound: 1.0.4
+ has-tostringtag: 1.0.2
+
+ is-number@7.0.0: {}
+
+ is-online@10.0.0:
+ dependencies:
+ got: 12.6.1
+ p-any: 4.0.0
+ p-timeout: 5.1.0
+ public-ip: 5.0.0
+
+ is-plain-obj@4.1.0: {}
+
+ is-regex@1.2.1:
+ dependencies:
+ call-bound: 1.0.4
+ gopd: 1.2.0
+ has-tostringtag: 1.0.2
+ hasown: 2.0.2
+
+ is-set@2.0.3: {}
+
+ is-shared-array-buffer@1.0.4:
+ dependencies:
+ call-bound: 1.0.4
+
+ is-string@1.1.1:
+ dependencies:
+ call-bound: 1.0.4
+ has-tostringtag: 1.0.2
+
+ is-symbol@1.1.1:
+ dependencies:
+ call-bound: 1.0.4
+ has-symbols: 1.1.0
+ safe-regex-test: 1.1.0
+
+ is-typed-array@1.1.15:
+ dependencies:
+ which-typed-array: 1.1.20
+
+ is-weakmap@2.0.2: {}
+
+ is-weakref@1.1.1:
+ dependencies:
+ call-bound: 1.0.4
+
+ is-weakset@2.0.4:
+ dependencies:
+ call-bound: 1.0.4
+ get-intrinsic: 1.3.0
+
+ is-wsl@2.2.0:
+ dependencies:
+ is-docker: 2.2.1
+
+ isarray@2.0.5: {}
+
+ jiti@1.21.7: {}
+
+ js-tokens@4.0.0: {}
+
+ js-yaml@3.14.2:
+ dependencies:
+ argparse: 1.0.10
+ esprima: 4.0.1
+
+ js-yaml@4.1.0:
+ dependencies:
+ argparse: 2.0.1
+
+ jsep@1.4.0: {}
+
+ json-buffer@3.0.1: {}
+
+ json-parse-even-better-errors@2.3.1: {}
+
+ json-schema-traverse@1.0.0: {}
+
+ jsonc-parser@2.2.1: {}
+
+ jsonfile@6.2.0:
+ dependencies:
+ universalify: 2.0.1
+ optionalDependencies:
+ graceful-fs: 4.2.11
+
+ jsonpath-plus@10.4.0:
+ dependencies:
+ '@jsep-plugin/assignment': 1.3.0(jsep@1.4.0)
+ '@jsep-plugin/regex': 1.0.4(jsep@1.4.0)
+ jsep: 1.4.0
+
+ jsonpointer@5.0.1: {}
+
+ katex@0.16.28:
dependencies:
commander: 8.3.0
- khroma@2.1.0: {}
-
- kolorist@1.8.0: {}
-
- langium@3.3.1:
+ keyv@4.5.4:
dependencies:
- chevrotain: 11.0.3
- chevrotain-allstar: 0.3.1(chevrotain@11.0.3)
- vscode-languageserver: 9.0.1
- vscode-languageserver-textdocument: 1.0.12
- vscode-uri: 3.0.8
+ json-buffer: 3.0.1
- layout-base@1.0.2: {}
-
- layout-base@2.0.1: {}
-
- local-pkg@1.1.2:
+ lcm@0.0.3:
dependencies:
- mlly: 1.8.0
- pkg-types: 2.3.0
- quansync: 0.2.11
+ gcd: 0.0.1
- lodash-es@4.17.21: {}
+ leven@3.1.0: {}
- lucide-vue-next@0.503.0(vue@3.5.22):
+ leven@4.1.0: {}
+
+ lilconfig@2.1.0: {}
+
+ lilconfig@3.1.3: {}
+
+ lines-and-columns@1.2.4: {}
+
+ lodash.topath@4.5.2: {}
+
+ lodash@4.17.21: {}
+
+ lodash@4.17.23: {}
+
+ longest-streak@3.1.0: {}
+
+ loose-envify@1.4.0:
dependencies:
- vue: 3.5.22
+ js-tokens: 4.0.0
- magic-string@0.30.21:
+ lowercase-keys@3.0.0: {}
+
+ lru-cache@7.18.3: {}
+
+ markdown-extensions@2.0.0: {}
+
+ markdown-table@3.0.4: {}
+
+ math-intrinsics@1.1.0: {}
+
+ mdast-util-find-and-replace@3.0.2:
dependencies:
- '@jridgewell/sourcemap-codec': 1.5.5
+ '@types/mdast': 4.0.4
+ escape-string-regexp: 5.0.0
+ unist-util-is: 6.0.1
+ unist-util-visit-parents: 6.0.1
- mark.js@8.11.1: {}
+ mdast-util-from-markdown@2.0.2:
+ dependencies:
+ '@types/mdast': 4.0.4
+ '@types/unist': 3.0.3
+ decode-named-character-reference: 1.3.0
+ devlop: 1.1.0
+ mdast-util-to-string: 4.0.0
+ micromark: 4.0.2
+ micromark-util-decode-numeric-character-reference: 2.0.2
+ micromark-util-decode-string: 2.0.1
+ micromark-util-normalize-identifier: 2.0.1
+ micromark-util-symbol: 2.0.1
+ micromark-util-types: 2.0.2
+ unist-util-stringify-position: 4.0.0
+ transitivePeerDependencies:
+ - supports-color
- markdown-it-link-attributes@4.0.1: {}
+ mdast-util-from-markdown@2.0.3:
+ dependencies:
+ '@types/mdast': 4.0.4
+ '@types/unist': 3.0.3
+ decode-named-character-reference: 1.3.0
+ devlop: 1.1.0
+ mdast-util-to-string: 4.0.0
+ micromark: 4.0.2
+ micromark-util-decode-numeric-character-reference: 2.0.2
+ micromark-util-decode-string: 2.0.1
+ micromark-util-normalize-identifier: 2.0.1
+ micromark-util-symbol: 2.0.1
+ micromark-util-types: 2.0.2
+ unist-util-stringify-position: 4.0.0
+ transitivePeerDependencies:
+ - supports-color
- marked@16.4.1: {}
+ mdast-util-frontmatter@2.0.1:
+ dependencies:
+ '@types/mdast': 4.0.4
+ devlop: 1.1.0
+ escape-string-regexp: 5.0.0
+ mdast-util-from-markdown: 2.0.2
+ mdast-util-to-markdown: 2.1.2
+ micromark-extension-frontmatter: 2.0.0
+ transitivePeerDependencies:
+ - supports-color
- mdast-util-to-hast@13.2.0:
+ mdast-util-gfm-autolink-literal@2.0.1:
+ dependencies:
+ '@types/mdast': 4.0.4
+ ccount: 2.0.1
+ devlop: 1.1.0
+ mdast-util-find-and-replace: 3.0.2
+ micromark-util-character: 2.1.1
+
+ mdast-util-gfm-footnote@2.1.0:
+ dependencies:
+ '@types/mdast': 4.0.4
+ devlop: 1.1.0
+ mdast-util-from-markdown: 2.0.2
+ mdast-util-to-markdown: 2.1.2
+ micromark-util-normalize-identifier: 2.0.1
+ transitivePeerDependencies:
+ - supports-color
+
+ mdast-util-gfm-strikethrough@2.0.0:
+ dependencies:
+ '@types/mdast': 4.0.4
+ mdast-util-from-markdown: 2.0.2
+ mdast-util-to-markdown: 2.1.2
+ transitivePeerDependencies:
+ - supports-color
+
+ mdast-util-gfm-table@2.0.0:
+ dependencies:
+ '@types/mdast': 4.0.4
+ devlop: 1.1.0
+ markdown-table: 3.0.4
+ mdast-util-from-markdown: 2.0.2
+ mdast-util-to-markdown: 2.1.2
+ transitivePeerDependencies:
+ - supports-color
+
+ mdast-util-gfm-task-list-item@2.0.0:
+ dependencies:
+ '@types/mdast': 4.0.4
+ devlop: 1.1.0
+ mdast-util-from-markdown: 2.0.2
+ mdast-util-to-markdown: 2.1.2
+ transitivePeerDependencies:
+ - supports-color
+
+ mdast-util-gfm@3.0.0:
+ dependencies:
+ mdast-util-from-markdown: 2.0.2
+ mdast-util-gfm-autolink-literal: 2.0.1
+ mdast-util-gfm-footnote: 2.1.0
+ mdast-util-gfm-strikethrough: 2.0.0
+ mdast-util-gfm-table: 2.0.0
+ mdast-util-gfm-task-list-item: 2.0.0
+ mdast-util-to-markdown: 2.1.2
+ transitivePeerDependencies:
+ - supports-color
+
+ mdast-util-gfm@3.1.0:
+ dependencies:
+ mdast-util-from-markdown: 2.0.2
+ mdast-util-gfm-autolink-literal: 2.0.1
+ mdast-util-gfm-footnote: 2.1.0
+ mdast-util-gfm-strikethrough: 2.0.0
+ mdast-util-gfm-table: 2.0.0
+ mdast-util-gfm-task-list-item: 2.0.0
+ mdast-util-to-markdown: 2.1.2
+ transitivePeerDependencies:
+ - supports-color
+
+ mdast-util-math@3.0.0:
+ dependencies:
+ '@types/hast': 3.0.4
+ '@types/mdast': 4.0.4
+ devlop: 1.1.0
+ longest-streak: 3.1.0
+ mdast-util-from-markdown: 2.0.2
+ mdast-util-to-markdown: 2.1.2
+ unist-util-remove-position: 5.0.0
+ transitivePeerDependencies:
+ - supports-color
+
+ mdast-util-mdx-expression@2.0.1:
+ dependencies:
+ '@types/estree-jsx': 1.0.5
+ '@types/hast': 3.0.4
+ '@types/mdast': 4.0.4
+ devlop: 1.1.0
+ mdast-util-from-markdown: 2.0.2
+ mdast-util-to-markdown: 2.1.2
+ transitivePeerDependencies:
+ - supports-color
+
+ mdast-util-mdx-jsx@3.1.3:
+ dependencies:
+ '@types/estree-jsx': 1.0.5
+ '@types/hast': 3.0.4
+ '@types/mdast': 4.0.4
+ '@types/unist': 3.0.3
+ ccount: 2.0.1
+ devlop: 1.1.0
+ mdast-util-from-markdown: 2.0.2
+ mdast-util-to-markdown: 2.1.2
+ parse-entities: 4.0.2
+ stringify-entities: 4.0.4
+ unist-util-stringify-position: 4.0.0
+ vfile-message: 4.0.3
+ transitivePeerDependencies:
+ - supports-color
+
+ mdast-util-mdx-jsx@3.2.0:
+ dependencies:
+ '@types/estree-jsx': 1.0.5
+ '@types/hast': 3.0.4
+ '@types/mdast': 4.0.4
+ '@types/unist': 3.0.3
+ ccount: 2.0.1
+ devlop: 1.1.0
+ mdast-util-from-markdown: 2.0.3
+ mdast-util-to-markdown: 2.1.2
+ parse-entities: 4.0.2
+ stringify-entities: 4.0.4
+ unist-util-stringify-position: 4.0.0
+ vfile-message: 4.0.3
+ transitivePeerDependencies:
+ - supports-color
+
+ mdast-util-mdx@3.0.0:
+ dependencies:
+ mdast-util-from-markdown: 2.0.2
+ mdast-util-mdx-expression: 2.0.1
+ mdast-util-mdx-jsx: 3.2.0
+ mdast-util-mdxjs-esm: 2.0.1
+ mdast-util-to-markdown: 2.1.2
+ transitivePeerDependencies:
+ - supports-color
+
+ mdast-util-mdxjs-esm@2.0.1:
+ dependencies:
+ '@types/estree-jsx': 1.0.5
+ '@types/hast': 3.0.4
+ '@types/mdast': 4.0.4
+ devlop: 1.1.0
+ mdast-util-from-markdown: 2.0.2
+ mdast-util-to-markdown: 2.1.2
+ transitivePeerDependencies:
+ - supports-color
+
+ mdast-util-phrasing@4.1.0:
+ dependencies:
+ '@types/mdast': 4.0.4
+ unist-util-is: 6.0.1
+
+ mdast-util-to-hast@13.2.1:
dependencies:
'@types/hast': 3.0.4
'@types/mdast': 4.0.4
@@ -2444,99 +6599,605 @@ snapshots:
unist-util-visit: 5.0.0
vfile: 6.0.3
- mermaid@11.12.1:
+ mdast-util-to-markdown@2.1.2:
dependencies:
- '@braintree/sanitize-url': 7.1.1
- '@iconify/utils': 3.0.2
- '@mermaid-js/parser': 0.6.3
- '@types/d3': 7.4.3
- cytoscape: 3.33.1
- cytoscape-cose-bilkent: 4.1.0(cytoscape@3.33.1)
- cytoscape-fcose: 2.2.0(cytoscape@3.33.1)
- d3: 7.9.0
- d3-sankey: 0.12.3
- dagre-d3-es: 7.0.13
- dayjs: 1.11.19
- dompurify: 3.3.0
- katex: 0.16.25
- khroma: 2.1.0
- lodash-es: 4.17.21
- marked: 16.4.1
- roughjs: 4.6.6
- stylis: 4.3.6
- ts-dedent: 2.2.0
- uuid: 11.1.0
- transitivePeerDependencies:
- - supports-color
+ '@types/mdast': 4.0.4
+ '@types/unist': 3.0.3
+ longest-streak: 3.1.0
+ mdast-util-phrasing: 4.1.0
+ mdast-util-to-string: 4.0.0
+ micromark-util-classify-character: 2.0.1
+ micromark-util-decode-string: 2.0.1
+ unist-util-visit: 5.0.0
+ zwitch: 2.0.4
+
+ mdast-util-to-string@4.0.0:
+ dependencies:
+ '@types/mdast': 4.0.4
+
+ media-typer@0.3.0: {}
+
+ merge-descriptors@1.0.1: {}
+
+ merge2@1.4.1: {}
+
+ methods@1.1.2: {}
+
+ micromark-core-commonmark@2.0.3:
+ dependencies:
+ decode-named-character-reference: 1.3.0
+ devlop: 1.1.0
+ micromark-factory-destination: 2.0.1
+ micromark-factory-label: 2.0.1
+ micromark-factory-space: 2.0.1
+ micromark-factory-title: 2.0.1
+ micromark-factory-whitespace: 2.0.1
+ micromark-util-character: 2.1.1
+ micromark-util-chunked: 2.0.1
+ micromark-util-classify-character: 2.0.1
+ micromark-util-html-tag-name: 2.0.1
+ micromark-util-normalize-identifier: 2.0.1
+ micromark-util-resolve-all: 2.0.1
+ micromark-util-subtokenize: 2.1.0
+ micromark-util-symbol: 2.0.1
+ micromark-util-types: 2.0.2
+
+ micromark-extension-frontmatter@2.0.0:
+ dependencies:
+ fault: 2.0.1
+ micromark-util-character: 2.1.1
+ micromark-util-symbol: 2.0.1
+ micromark-util-types: 2.0.2
+
+ micromark-extension-gfm-autolink-literal@2.1.0:
+ dependencies:
+ micromark-util-character: 2.1.1
+ micromark-util-sanitize-uri: 2.0.1
+ micromark-util-symbol: 2.0.1
+ micromark-util-types: 2.0.2
+
+ micromark-extension-gfm-footnote@2.1.0:
+ dependencies:
+ devlop: 1.1.0
+ micromark-core-commonmark: 2.0.3
+ micromark-factory-space: 2.0.1
+ micromark-util-character: 2.1.1
+ micromark-util-normalize-identifier: 2.0.1
+ micromark-util-sanitize-uri: 2.0.1
+ micromark-util-symbol: 2.0.1
+ micromark-util-types: 2.0.2
+
+ micromark-extension-gfm-strikethrough@2.1.0:
+ dependencies:
+ devlop: 1.1.0
+ micromark-util-chunked: 2.0.1
+ micromark-util-classify-character: 2.0.1
+ micromark-util-resolve-all: 2.0.1
+ micromark-util-symbol: 2.0.1
+ micromark-util-types: 2.0.2
+
+ micromark-extension-gfm-table@2.1.1:
+ dependencies:
+ devlop: 1.1.0
+ micromark-factory-space: 2.0.1
+ micromark-util-character: 2.1.1
+ micromark-util-symbol: 2.0.1
+ micromark-util-types: 2.0.2
+
+ micromark-extension-gfm-tagfilter@2.0.0:
+ dependencies:
+ micromark-util-types: 2.0.2
+
+ micromark-extension-gfm-task-list-item@2.1.0:
+ dependencies:
+ devlop: 1.1.0
+ micromark-factory-space: 2.0.1
+ micromark-util-character: 2.1.1
+ micromark-util-symbol: 2.0.1
+ micromark-util-types: 2.0.2
+
+ micromark-extension-gfm@3.0.0:
+ dependencies:
+ micromark-extension-gfm-autolink-literal: 2.1.0
+ micromark-extension-gfm-footnote: 2.1.0
+ micromark-extension-gfm-strikethrough: 2.1.0
+ micromark-extension-gfm-table: 2.1.1
+ micromark-extension-gfm-tagfilter: 2.0.0
+ micromark-extension-gfm-task-list-item: 2.1.0
+ micromark-util-combine-extensions: 2.0.1
+ micromark-util-types: 2.0.2
+
+ micromark-extension-math@3.1.0:
+ dependencies:
+ '@types/katex': 0.16.8
+ devlop: 1.1.0
+ katex: 0.16.28
+ micromark-factory-space: 2.0.1
+ micromark-util-character: 2.1.1
+ micromark-util-symbol: 2.0.1
+ micromark-util-types: 2.0.2
+
+ micromark-extension-mdx-expression@3.0.1:
+ dependencies:
+ '@types/estree': 1.0.8
+ devlop: 1.1.0
+ micromark-factory-mdx-expression: 2.0.3
+ micromark-factory-space: 2.0.1
+ micromark-util-character: 2.1.1
+ micromark-util-events-to-acorn: 2.0.3
+ micromark-util-symbol: 2.0.1
+ micromark-util-types: 2.0.2
+
+ micromark-extension-mdx-jsx@3.0.1:
+ dependencies:
+ '@types/acorn': 4.0.6
+ '@types/estree': 1.0.8
+ devlop: 1.1.0
+ estree-util-is-identifier-name: 3.0.0
+ micromark-factory-mdx-expression: 2.0.3
+ micromark-factory-space: 2.0.1
+ micromark-util-character: 2.1.1
+ micromark-util-events-to-acorn: 2.0.3
+ micromark-util-symbol: 2.0.1
+ micromark-util-types: 2.0.2
+ vfile-message: 4.0.3
+
+ micromark-extension-mdx-md@2.0.0:
+ dependencies:
+ micromark-util-types: 2.0.2
+
+ micromark-extension-mdxjs-esm@3.0.0:
+ dependencies:
+ '@types/estree': 1.0.8
+ devlop: 1.1.0
+ micromark-core-commonmark: 2.0.3
+ micromark-util-character: 2.1.1
+ micromark-util-events-to-acorn: 2.0.3
+ micromark-util-symbol: 2.0.1
+ micromark-util-types: 2.0.2
+ unist-util-position-from-estree: 2.0.0
+ vfile-message: 4.0.3
+
+ micromark-extension-mdxjs@3.0.0:
+ dependencies:
+ acorn: 8.11.2
+ acorn-jsx: 5.3.2(acorn@8.11.2)
+ micromark-extension-mdx-expression: 3.0.1
+ micromark-extension-mdx-jsx: 3.0.1
+ micromark-extension-mdx-md: 2.0.0
+ micromark-extension-mdxjs-esm: 3.0.0
+ micromark-util-combine-extensions: 2.0.1
+ micromark-util-types: 2.0.2
+
+ micromark-factory-destination@2.0.1:
+ dependencies:
+ micromark-util-character: 2.1.1
+ micromark-util-symbol: 2.0.1
+ micromark-util-types: 2.0.2
+
+ micromark-factory-label@2.0.1:
+ dependencies:
+ devlop: 1.1.0
+ micromark-util-character: 2.1.1
+ micromark-util-symbol: 2.0.1
+ micromark-util-types: 2.0.2
+
+ micromark-factory-mdx-expression@2.0.3:
+ dependencies:
+ '@types/estree': 1.0.8
+ devlop: 1.1.0
+ micromark-factory-space: 2.0.1
+ micromark-util-character: 2.1.1
+ micromark-util-events-to-acorn: 2.0.3
+ micromark-util-symbol: 2.0.1
+ micromark-util-types: 2.0.2
+ unist-util-position-from-estree: 2.0.0
+ vfile-message: 4.0.3
+
+ micromark-factory-space@2.0.1:
+ dependencies:
+ micromark-util-character: 2.1.1
+ micromark-util-types: 2.0.2
+
+ micromark-factory-title@2.0.1:
+ dependencies:
+ micromark-factory-space: 2.0.1
+ micromark-util-character: 2.1.1
+ micromark-util-symbol: 2.0.1
+ micromark-util-types: 2.0.2
+
+ micromark-factory-whitespace@2.0.1:
+ dependencies:
+ micromark-factory-space: 2.0.1
+ micromark-util-character: 2.1.1
+ micromark-util-symbol: 2.0.1
+ micromark-util-types: 2.0.2
micromark-util-character@2.1.1:
dependencies:
micromark-util-symbol: 2.0.1
micromark-util-types: 2.0.2
+ micromark-util-chunked@2.0.1:
+ dependencies:
+ micromark-util-symbol: 2.0.1
+
+ micromark-util-classify-character@2.0.1:
+ dependencies:
+ micromark-util-character: 2.1.1
+ micromark-util-symbol: 2.0.1
+ micromark-util-types: 2.0.2
+
+ micromark-util-combine-extensions@2.0.1:
+ dependencies:
+ micromark-util-chunked: 2.0.1
+ micromark-util-types: 2.0.2
+
+ micromark-util-decode-numeric-character-reference@2.0.2:
+ dependencies:
+ micromark-util-symbol: 2.0.1
+
+ micromark-util-decode-string@2.0.1:
+ dependencies:
+ decode-named-character-reference: 1.3.0
+ micromark-util-character: 2.1.1
+ micromark-util-decode-numeric-character-reference: 2.0.2
+ micromark-util-symbol: 2.0.1
+
micromark-util-encode@2.0.1: {}
+ micromark-util-events-to-acorn@2.0.3:
+ dependencies:
+ '@types/estree': 1.0.8
+ '@types/unist': 3.0.3
+ devlop: 1.1.0
+ estree-util-visit: 2.0.0
+ micromark-util-symbol: 2.0.1
+ micromark-util-types: 2.0.2
+ vfile-message: 4.0.3
+
+ micromark-util-html-tag-name@2.0.1: {}
+
+ micromark-util-normalize-identifier@2.0.1:
+ dependencies:
+ micromark-util-symbol: 2.0.1
+
+ micromark-util-resolve-all@2.0.1:
+ dependencies:
+ micromark-util-types: 2.0.2
+
micromark-util-sanitize-uri@2.0.1:
dependencies:
micromark-util-character: 2.1.1
micromark-util-encode: 2.0.1
micromark-util-symbol: 2.0.1
+ micromark-util-subtokenize@2.1.0:
+ dependencies:
+ devlop: 1.1.0
+ micromark-util-chunked: 2.0.1
+ micromark-util-symbol: 2.0.1
+ micromark-util-types: 2.0.2
+
micromark-util-symbol@2.0.1: {}
micromark-util-types@2.0.2: {}
- minisearch@7.2.0: {}
+ micromark@4.0.2:
+ dependencies:
+ '@types/debug': 4.1.12
+ debug: 4.4.3
+ decode-named-character-reference: 1.3.0
+ devlop: 1.1.0
+ micromark-core-commonmark: 2.0.3
+ micromark-factory-space: 2.0.1
+ micromark-util-character: 2.1.1
+ micromark-util-chunked: 2.0.1
+ micromark-util-combine-extensions: 2.0.1
+ micromark-util-decode-numeric-character-reference: 2.0.2
+ micromark-util-encode: 2.0.1
+ micromark-util-normalize-identifier: 2.0.1
+ micromark-util-resolve-all: 2.0.1
+ micromark-util-sanitize-uri: 2.0.1
+ micromark-util-subtokenize: 2.1.0
+ micromark-util-symbol: 2.0.1
+ micromark-util-types: 2.0.2
+ transitivePeerDependencies:
+ - supports-color
+
+ micromatch@4.0.8:
+ dependencies:
+ braces: 3.0.3
+ picomatch: 2.3.1
+
+ mime-db@1.52.0: {}
+
+ mime-types@2.1.35:
+ dependencies:
+ mime-db: 1.52.0
+
+ mime@1.6.0: {}
+
+ mimic-fn@2.1.0: {}
+
+ mimic-response@3.1.0: {}
+
+ mimic-response@4.0.0: {}
+
+ minimatch@3.1.2:
+ dependencies:
+ brace-expansion: 1.1.12
+
+ minipass@3.3.6:
+ dependencies:
+ yallist: 4.0.0
+
+ minipass@5.0.0: {}
+
+ minizlib@2.1.2:
+ dependencies:
+ minipass: 3.3.6
+ yallist: 4.0.0
+
+ mintlify@4.2.375(@radix-ui/react-popover@1.1.15(@types/react@19.2.14)(react-dom@18.3.1(react@19.2.3))(react@19.2.3))(@types/node@25.3.0)(@types/react@19.2.14)(react-dom@18.3.1(react@19.2.3))(typescript@5.9.3):
+ dependencies:
+ '@mintlify/cli': 4.0.978(@radix-ui/react-popover@1.1.15(@types/react@19.2.14)(react-dom@18.3.1(react@19.2.3))(react@19.2.3))(@types/node@25.3.0)(@types/react@19.2.14)(react-dom@18.3.1(react@19.2.3))(typescript@5.9.3)
+ transitivePeerDependencies:
+ - '@radix-ui/react-popover'
+ - '@types/node'
+ - '@types/react'
+ - bare-abort-controller
+ - bare-buffer
+ - bufferutil
+ - debug
+ - encoding
+ - react-devtools-core
+ - react-dom
+ - react-native-b4a
+ - supports-color
+ - ts-node
+ - typescript
+ - utf-8-validate
mitt@3.0.1: {}
- mlly@1.8.0:
- dependencies:
- acorn: 8.15.0
- pathe: 2.0.3
- pkg-types: 1.3.1
- ufo: 1.6.1
+ mkdirp@1.0.4: {}
+
+ ms@2.0.0: {}
ms@2.1.3: {}
+ mute-stream@2.0.0: {}
+
+ mz@2.7.0:
+ dependencies:
+ any-promise: 1.3.0
+ object-assign: 4.1.1
+ thenify-all: 1.6.0
+
nanoid@3.3.11: {}
- ohash@2.0.11: {}
+ negotiator@0.6.3: {}
- oniguruma-to-es@3.1.1:
+ neotraverse@0.6.18: {}
+
+ netmask@2.0.2: {}
+
+ next-mdx-remote-client@1.1.6(@types/react@19.2.14)(react-dom@18.3.1(react@19.2.3))(react@19.2.3)(unified@11.0.5):
dependencies:
- emoji-regex-xs: 1.0.0
- regex: 6.0.1
+ '@babel/code-frame': 7.29.0
+ '@mdx-js/mdx': 3.1.1
+ '@mdx-js/react': 3.1.1(@types/react@19.2.14)(react@19.2.3)
+ react: 19.2.3
+ react-dom: 18.3.1(react@19.2.3)
+ remark-mdx-remove-esm: 1.2.3(unified@11.0.5)
+ serialize-error: 13.0.1
+ vfile: 6.0.3
+ vfile-matter: 5.0.1
+ transitivePeerDependencies:
+ - '@types/react'
+ - supports-color
+ - unified
+
+ nimma@0.2.3:
+ dependencies:
+ '@jsep-plugin/regex': 1.0.4(jsep@1.4.0)
+ '@jsep-plugin/ternary': 1.1.4(jsep@1.4.0)
+ astring: 1.9.0
+ jsep: 1.4.0
+ optionalDependencies:
+ jsonpath-plus: 10.4.0
+ lodash.topath: 4.5.2
+
+ nlcst-to-string@4.0.0:
+ dependencies:
+ '@types/nlcst': 2.0.3
+
+ node-fetch@2.6.7:
+ dependencies:
+ whatwg-url: 5.0.0
+
+ node-fetch@2.7.0:
+ dependencies:
+ whatwg-url: 5.0.0
+
+ non-error@0.1.0: {}
+
+ normalize-path@3.0.0: {}
+
+ normalize-url@8.1.1: {}
+
+ object-assign@4.1.1: {}
+
+ object-hash@3.0.0: {}
+
+ object-inspect@1.13.4: {}
+
+ object-keys@1.1.1: {}
+
+ object.assign@4.1.7:
+ dependencies:
+ call-bind: 1.0.8
+ call-bound: 1.0.4
+ define-properties: 1.2.1
+ es-object-atoms: 1.1.1
+ has-symbols: 1.1.0
+ object-keys: 1.1.1
+
+ on-finished@2.4.1:
+ dependencies:
+ ee-first: 1.1.1
+
+ once@1.4.0:
+ dependencies:
+ wrappy: 1.0.2
+
+ onetime@5.1.2:
+ dependencies:
+ mimic-fn: 2.1.0
+
+ oniguruma-parser@0.12.1: {}
+
+ oniguruma-to-es@4.3.4:
+ dependencies:
+ oniguruma-parser: 0.12.1
+ regex: 6.1.0
regex-recursion: 6.0.2
- package-manager-detector@1.5.0: {}
+ open@8.4.2:
+ dependencies:
+ define-lazy-prop: 2.0.0
+ is-docker: 2.2.1
+ is-wsl: 2.2.0
- path-data-parser@0.1.0: {}
+ openapi-types@12.1.3: {}
- pathe@2.0.3: {}
+ own-keys@1.0.1:
+ dependencies:
+ get-intrinsic: 1.3.0
+ object-keys: 1.1.1
+ safe-push-apply: 1.0.0
- perfect-debounce@1.0.0: {}
+ p-any@4.0.0:
+ dependencies:
+ p-cancelable: 3.0.0
+ p-some: 6.0.0
+
+ p-cancelable@3.0.0: {}
+
+ p-some@6.0.0:
+ dependencies:
+ aggregate-error: 4.0.1
+ p-cancelable: 3.0.0
+
+ p-timeout@5.1.0: {}
+
+ pac-proxy-agent@7.2.0:
+ dependencies:
+ '@tootallnate/quickjs-emscripten': 0.23.0
+ agent-base: 7.1.4
+ debug: 4.4.3
+ get-uri: 6.0.5
+ http-proxy-agent: 7.0.2
+ https-proxy-agent: 7.0.6
+ pac-resolver: 7.0.1
+ socks-proxy-agent: 8.0.5
+ transitivePeerDependencies:
+ - supports-color
+
+ pac-resolver@7.0.1:
+ dependencies:
+ degenerator: 5.0.1
+ netmask: 2.0.2
+
+ parent-module@1.0.1:
+ dependencies:
+ callsites: 3.1.0
+
+ parse-entities@4.0.2:
+ dependencies:
+ '@types/unist': 2.0.11
+ character-entities-legacy: 3.0.0
+ character-reference-invalid: 2.0.1
+ decode-named-character-reference: 1.3.0
+ is-alphanumerical: 2.0.1
+ is-decimal: 2.0.1
+ is-hexadecimal: 2.0.1
+
+ parse-json@5.2.0:
+ dependencies:
+ '@babel/code-frame': 7.29.0
+ error-ex: 1.3.4
+ json-parse-even-better-errors: 2.3.1
+ lines-and-columns: 1.2.4
+
+ parse-latin@7.0.0:
+ dependencies:
+ '@types/nlcst': 2.0.3
+ '@types/unist': 3.0.3
+ nlcst-to-string: 4.0.0
+ unist-util-modify-children: 4.0.0
+ unist-util-visit-children: 3.0.0
+ vfile: 6.0.3
+
+ parse5@7.3.0:
+ dependencies:
+ entities: 6.0.1
+
+ parseurl@1.3.3: {}
+
+ patch-console@2.0.0: {}
+
+ path-parse@1.0.7: {}
+
+ path-to-regexp@0.1.7: {}
+
+ pend@1.2.0: {}
picocolors@1.1.1: {}
- pkg-types@1.3.1:
- dependencies:
- confbox: 0.1.8
- mlly: 1.8.0
- pathe: 2.0.3
+ picomatch@2.3.1: {}
- pkg-types@2.3.0:
- dependencies:
- confbox: 0.2.2
- exsolve: 1.0.7
- pathe: 2.0.3
+ picomatch@4.0.3: {}
- points-on-curve@0.2.0: {}
+ pify@2.3.0: {}
- points-on-path@0.2.1:
+ pirates@4.0.7: {}
+
+ pony-cause@1.1.1: {}
+
+ possible-typed-array-names@1.1.0: {}
+
+ postcss-import@15.1.0(postcss@8.5.6):
dependencies:
- path-data-parser: 0.1.0
- points-on-curve: 0.2.0
+ postcss: 8.5.6
+ postcss-value-parser: 4.2.0
+ read-cache: 1.0.0
+ resolve: 1.22.11
+
+ postcss-js@4.1.0(postcss@8.5.6):
+ dependencies:
+ camelcase-css: 2.0.1
+ postcss: 8.5.6
+
+ postcss-load-config@4.0.2(postcss@8.5.6):
+ dependencies:
+ lilconfig: 3.1.3
+ yaml: 2.8.2
+ optionalDependencies:
+ postcss: 8.5.6
+
+ postcss-nested@6.2.0(postcss@8.5.6):
+ dependencies:
+ postcss: 8.5.6
+ postcss-selector-parser: 6.1.2
+
+ postcss-selector-parser@6.1.2:
+ dependencies:
+ cssesc: 3.0.0
+ util-deprecate: 1.0.2
+
+ postcss-value-parser@4.2.0: {}
postcss@8.5.6:
dependencies:
@@ -2544,11 +7205,177 @@ snapshots:
picocolors: 1.1.1
source-map-js: 1.2.1
- preact@10.27.2: {}
+ progress@2.0.3: {}
+
+ property-information@6.5.0: {}
property-information@7.1.0: {}
- quansync@0.2.11: {}
+ proxy-addr@2.0.7:
+ dependencies:
+ forwarded: 0.2.0
+ ipaddr.js: 1.9.1
+
+ proxy-agent@6.5.0:
+ dependencies:
+ agent-base: 7.1.4
+ debug: 4.4.3
+ http-proxy-agent: 7.0.2
+ https-proxy-agent: 7.0.6
+ lru-cache: 7.18.3
+ pac-proxy-agent: 7.2.0
+ proxy-from-env: 1.1.0
+ socks-proxy-agent: 8.0.5
+ transitivePeerDependencies:
+ - supports-color
+
+ proxy-from-env@1.1.0: {}
+
+ public-ip@5.0.0:
+ dependencies:
+ dns-socket: 4.2.2
+ got: 12.6.1
+ is-ip: 3.1.0
+
+ pump@3.0.3:
+ dependencies:
+ end-of-stream: 1.4.5
+ once: 1.4.0
+
+ puppeteer-core@22.14.0:
+ dependencies:
+ '@puppeteer/browsers': 2.3.0
+ chromium-bidi: 0.6.2(devtools-protocol@0.0.1312386)
+ debug: 4.4.3
+ devtools-protocol: 0.0.1312386
+ ws: 8.19.0
+ transitivePeerDependencies:
+ - bare-abort-controller
+ - bare-buffer
+ - bufferutil
+ - react-native-b4a
+ - supports-color
+ - utf-8-validate
+
+ puppeteer@22.14.0(typescript@5.9.3):
+ dependencies:
+ '@puppeteer/browsers': 2.3.0
+ cosmiconfig: 9.0.0(typescript@5.9.3)
+ devtools-protocol: 0.0.1312386
+ puppeteer-core: 22.14.0
+ transitivePeerDependencies:
+ - bare-abort-controller
+ - bare-buffer
+ - bufferutil
+ - react-native-b4a
+ - supports-color
+ - typescript
+ - utf-8-validate
+
+ qs@6.11.0:
+ dependencies:
+ side-channel: 1.1.0
+
+ queue-microtask@1.2.3: {}
+
+ quick-lru@5.1.1: {}
+
+ range-parser@1.2.1: {}
+
+ raw-body@2.5.1:
+ dependencies:
+ bytes: 3.1.2
+ http-errors: 2.0.0
+ iconv-lite: 0.4.24
+ unpipe: 1.0.0
+
+ react-dom@18.3.1(react@19.2.3):
+ dependencies:
+ loose-envify: 1.4.0
+ react: 19.2.3
+ scheduler: 0.23.2
+
+ react-reconciler@0.32.0(react@19.2.3):
+ dependencies:
+ react: 19.2.3
+ scheduler: 0.26.0
+
+ react-remove-scroll-bar@2.3.8(@types/react@19.2.14)(react@19.2.3):
+ dependencies:
+ react: 19.2.3
+ react-style-singleton: 2.2.3(@types/react@19.2.14)(react@19.2.3)
+ tslib: 2.8.1
+ optionalDependencies:
+ '@types/react': 19.2.14
+
+ react-remove-scroll@2.7.2(@types/react@19.2.14)(react@19.2.3):
+ dependencies:
+ react: 19.2.3
+ react-remove-scroll-bar: 2.3.8(@types/react@19.2.14)(react@19.2.3)
+ react-style-singleton: 2.2.3(@types/react@19.2.14)(react@19.2.3)
+ tslib: 2.8.1
+ use-callback-ref: 1.3.3(@types/react@19.2.14)(react@19.2.3)
+ use-sidecar: 1.1.3(@types/react@19.2.14)(react@19.2.3)
+ optionalDependencies:
+ '@types/react': 19.2.14
+
+ react-style-singleton@2.2.3(@types/react@19.2.14)(react@19.2.3):
+ dependencies:
+ get-nonce: 1.0.1
+ react: 19.2.3
+ tslib: 2.8.1
+ optionalDependencies:
+ '@types/react': 19.2.14
+
+ react@19.2.3: {}
+
+ read-cache@1.0.0:
+ dependencies:
+ pify: 2.3.0
+
+ readdirp@3.6.0:
+ dependencies:
+ picomatch: 2.3.1
+
+ recma-build-jsx@1.0.0:
+ dependencies:
+ '@types/estree': 1.0.8
+ estree-util-build-jsx: 3.0.1
+ vfile: 6.0.3
+
+ recma-jsx@1.0.1(acorn@8.11.2):
+ dependencies:
+ acorn: 8.11.2
+ acorn-jsx: 5.3.2(acorn@8.11.2)
+ estree-util-to-js: 2.0.0
+ recma-parse: 1.0.0
+ recma-stringify: 1.0.0
+ unified: 11.0.5
+
+ recma-parse@1.0.0:
+ dependencies:
+ '@types/estree': 1.0.8
+ esast-util-from-js: 2.0.1
+ unified: 11.0.5
+ vfile: 6.0.3
+
+ recma-stringify@1.0.0:
+ dependencies:
+ '@types/estree': 1.0.8
+ estree-util-to-js: 2.0.0
+ unified: 11.0.5
+ vfile: 6.0.3
+
+ reflect.getprototypeof@1.0.10:
+ dependencies:
+ call-bind: 1.0.8
+ define-properties: 1.2.1
+ es-abstract: 1.24.1
+ es-errors: 1.3.0
+ es-object-atoms: 1.1.1
+ get-intrinsic: 1.3.0
+ get-proto: 1.0.1
+ which-builtin-type: 1.2.1
regex-recursion@6.0.2:
dependencies:
@@ -2556,137 +7383,848 @@ snapshots:
regex-utilities@2.3.0: {}
- regex@6.0.1:
+ regex@6.1.0:
dependencies:
regex-utilities: 2.3.0
- reka-ui@2.6.0(vue@3.5.22):
+ regexp.prototype.flags@1.5.4:
dependencies:
- '@floating-ui/dom': 1.7.4
- '@floating-ui/vue': 1.1.9(vue@3.5.22)
- '@internationalized/date': 3.10.0
- '@internationalized/number': 3.6.5
- '@tanstack/vue-virtual': 3.13.12(vue@3.5.22)
- '@vueuse/core': 12.8.2
- '@vueuse/shared': 12.8.2
- aria-hidden: 1.2.6
- defu: 6.1.4
- ohash: 2.0.11
- vue: 3.5.22
- transitivePeerDependencies:
- - '@vue/composition-api'
- - typescript
+ call-bind: 1.0.8
+ define-properties: 1.2.1
+ es-errors: 1.3.0
+ get-proto: 1.0.1
+ gopd: 1.2.0
+ set-function-name: 2.0.2
- rfdc@1.4.1: {}
+ rehype-katex@7.0.1:
+ dependencies:
+ '@types/hast': 3.0.4
+ '@types/katex': 0.16.8
+ hast-util-from-html-isomorphic: 2.0.0
+ hast-util-to-text: 4.0.2
+ katex: 0.16.28
+ unist-util-visit-parents: 6.0.1
+ vfile: 6.0.3
- robust-predicates@3.0.2: {}
+ rehype-minify-whitespace@6.0.2:
+ dependencies:
+ '@types/hast': 3.0.4
+ hast-util-minify-whitespace: 1.0.1
- rollup@4.52.5:
+ rehype-parse@9.0.1:
+ dependencies:
+ '@types/hast': 3.0.4
+ hast-util-from-html: 2.0.3
+ unified: 11.0.5
+
+ rehype-recma@1.0.0:
dependencies:
'@types/estree': 1.0.8
- optionalDependencies:
- '@rollup/rollup-android-arm-eabi': 4.52.5
- '@rollup/rollup-android-arm64': 4.52.5
- '@rollup/rollup-darwin-arm64': 4.52.5
- '@rollup/rollup-darwin-x64': 4.52.5
- '@rollup/rollup-freebsd-arm64': 4.52.5
- '@rollup/rollup-freebsd-x64': 4.52.5
- '@rollup/rollup-linux-arm-gnueabihf': 4.52.5
- '@rollup/rollup-linux-arm-musleabihf': 4.52.5
- '@rollup/rollup-linux-arm64-gnu': 4.52.5
- '@rollup/rollup-linux-arm64-musl': 4.52.5
- '@rollup/rollup-linux-loong64-gnu': 4.52.5
- '@rollup/rollup-linux-ppc64-gnu': 4.52.5
- '@rollup/rollup-linux-riscv64-gnu': 4.52.5
- '@rollup/rollup-linux-riscv64-musl': 4.52.5
- '@rollup/rollup-linux-s390x-gnu': 4.52.5
- '@rollup/rollup-linux-x64-gnu': 4.52.5
- '@rollup/rollup-linux-x64-musl': 4.52.5
- '@rollup/rollup-openharmony-arm64': 4.52.5
- '@rollup/rollup-win32-arm64-msvc': 4.52.5
- '@rollup/rollup-win32-ia32-msvc': 4.52.5
- '@rollup/rollup-win32-x64-gnu': 4.52.5
- '@rollup/rollup-win32-x64-msvc': 4.52.5
- fsevents: 2.3.3
+ '@types/hast': 3.0.4
+ hast-util-to-estree: 3.1.3
+ transitivePeerDependencies:
+ - supports-color
- roughjs@4.6.6:
+ rehype-stringify@10.0.1:
dependencies:
- hachure-fill: 0.5.2
- path-data-parser: 0.1.0
- points-on-curve: 0.2.0
- points-on-path: 0.2.1
+ '@types/hast': 3.0.4
+ hast-util-to-html: 9.0.4
+ unified: 11.0.5
- rw@1.3.3: {}
+ remark-frontmatter@5.0.0:
+ dependencies:
+ '@types/mdast': 4.0.4
+ mdast-util-frontmatter: 2.0.1
+ micromark-extension-frontmatter: 2.0.0
+ unified: 11.0.5
+ transitivePeerDependencies:
+ - supports-color
+
+ remark-gfm@4.0.0:
+ dependencies:
+ '@types/mdast': 4.0.4
+ mdast-util-gfm: 3.0.0
+ micromark-extension-gfm: 3.0.0
+ remark-parse: 11.0.0
+ remark-stringify: 11.0.0
+ unified: 11.0.5
+ transitivePeerDependencies:
+ - supports-color
+
+ remark-math@6.0.0:
+ dependencies:
+ '@types/mdast': 4.0.4
+ mdast-util-math: 3.0.0
+ micromark-extension-math: 3.1.0
+ unified: 11.0.5
+ transitivePeerDependencies:
+ - supports-color
+
+ remark-mdx-remove-esm@1.2.3(unified@11.0.5):
+ dependencies:
+ '@types/mdast': 4.0.4
+ mdast-util-mdxjs-esm: 2.0.1
+ unified: 11.0.5
+ unist-util-remove: 4.0.0
+ transitivePeerDependencies:
+ - supports-color
+
+ remark-mdx@3.0.1:
+ dependencies:
+ mdast-util-mdx: 3.0.0
+ micromark-extension-mdxjs: 3.0.0
+ transitivePeerDependencies:
+ - supports-color
+
+ remark-mdx@3.1.0:
+ dependencies:
+ mdast-util-mdx: 3.0.0
+ micromark-extension-mdxjs: 3.0.0
+ transitivePeerDependencies:
+ - supports-color
+
+ remark-parse@11.0.0:
+ dependencies:
+ '@types/mdast': 4.0.4
+ mdast-util-from-markdown: 2.0.2
+ micromark-util-types: 2.0.2
+ unified: 11.0.5
+ transitivePeerDependencies:
+ - supports-color
+
+ remark-rehype@11.1.1:
+ dependencies:
+ '@types/hast': 3.0.4
+ '@types/mdast': 4.0.4
+ mdast-util-to-hast: 13.2.1
+ unified: 11.0.5
+ vfile: 6.0.3
+
+ remark-smartypants@3.0.2:
+ dependencies:
+ retext: 9.0.0
+ retext-smartypants: 6.2.0
+ unified: 11.0.5
+ unist-util-visit: 5.0.0
+
+ remark-stringify@11.0.0:
+ dependencies:
+ '@types/mdast': 4.0.4
+ mdast-util-to-markdown: 2.1.2
+ unified: 11.0.5
+
+ remark@15.0.1:
+ dependencies:
+ '@types/mdast': 4.0.4
+ remark-parse: 11.0.0
+ remark-stringify: 11.0.0
+ unified: 11.0.5
+ transitivePeerDependencies:
+ - supports-color
+
+ require-directory@2.1.1: {}
+
+ require-from-string@2.0.2: {}
+
+ resolve-alpn@1.2.1: {}
+
+ resolve-from@4.0.0: {}
+
+ resolve@1.22.11:
+ dependencies:
+ is-core-module: 2.16.1
+ path-parse: 1.0.7
+ supports-preserve-symlinks-flag: 1.0.0
+
+ responselike@3.0.0:
+ dependencies:
+ lowercase-keys: 3.0.0
+
+ restore-cursor@4.0.0:
+ dependencies:
+ onetime: 5.1.2
+ signal-exit: 3.0.7
+
+ retext-latin@4.0.0:
+ dependencies:
+ '@types/nlcst': 2.0.3
+ parse-latin: 7.0.0
+ unified: 11.0.5
+
+ retext-smartypants@6.2.0:
+ dependencies:
+ '@types/nlcst': 2.0.3
+ nlcst-to-string: 4.0.0
+ unist-util-visit: 5.0.0
+
+ retext-stringify@4.0.0:
+ dependencies:
+ '@types/nlcst': 2.0.3
+ nlcst-to-string: 4.0.0
+ unified: 11.0.5
+
+ retext@9.0.0:
+ dependencies:
+ '@types/nlcst': 2.0.3
+ retext-latin: 4.0.0
+ retext-stringify: 4.0.0
+ unified: 11.0.5
+
+ reusify@1.1.0: {}
+
+ run-async@3.0.0: {}
+
+ run-parallel@1.2.0:
+ dependencies:
+ queue-microtask: 1.2.3
+
+ rxjs@7.8.2:
+ dependencies:
+ tslib: 2.8.1
+
+ safe-array-concat@1.1.3:
+ dependencies:
+ call-bind: 1.0.8
+ call-bound: 1.0.4
+ get-intrinsic: 1.3.0
+ has-symbols: 1.1.0
+ isarray: 2.0.5
+
+ safe-buffer@5.2.1: {}
+
+ safe-push-apply@1.0.0:
+ dependencies:
+ es-errors: 1.3.0
+ isarray: 2.0.5
+
+ safe-regex-test@1.1.0:
+ dependencies:
+ call-bound: 1.0.4
+ es-errors: 1.3.0
+ is-regex: 1.2.1
+
+ safe-stable-stringify@1.1.1: {}
safer-buffer@2.1.2: {}
- search-insights@2.17.3: {}
+ sax@1.4.4: {}
- shiki@2.5.0:
+ scheduler@0.23.2:
dependencies:
- '@shikijs/core': 2.5.0
- '@shikijs/engine-javascript': 2.5.0
- '@shikijs/engine-oniguruma': 2.5.0
- '@shikijs/langs': 2.5.0
- '@shikijs/themes': 2.5.0
- '@shikijs/types': 2.5.0
+ loose-envify: 1.4.0
+
+ scheduler@0.26.0: {}
+
+ semver@7.7.2: {}
+
+ send@0.18.0:
+ dependencies:
+ debug: 2.6.9
+ depd: 2.0.0
+ destroy: 1.2.0
+ encodeurl: 1.0.2
+ escape-html: 1.0.3
+ etag: 1.8.1
+ fresh: 0.5.2
+ http-errors: 2.0.0
+ mime: 1.6.0
+ ms: 2.1.3
+ on-finished: 2.4.1
+ range-parser: 1.2.1
+ statuses: 2.0.1
+ transitivePeerDependencies:
+ - supports-color
+
+ serialize-error@13.0.1:
+ dependencies:
+ non-error: 0.1.0
+ type-fest: 5.4.4
+
+ serve-static@1.15.0:
+ dependencies:
+ encodeurl: 1.0.2
+ escape-html: 1.0.3
+ parseurl: 1.3.3
+ send: 0.18.0
+ transitivePeerDependencies:
+ - supports-color
+
+ set-function-length@1.2.2:
+ dependencies:
+ define-data-property: 1.1.4
+ es-errors: 1.3.0
+ function-bind: 1.1.2
+ get-intrinsic: 1.3.0
+ gopd: 1.2.0
+ has-property-descriptors: 1.0.2
+
+ set-function-name@2.0.2:
+ dependencies:
+ define-data-property: 1.1.4
+ es-errors: 1.3.0
+ functions-have-names: 1.2.3
+ has-property-descriptors: 1.0.2
+
+ set-proto@1.0.0:
+ dependencies:
+ dunder-proto: 1.0.1
+ es-errors: 1.3.0
+ es-object-atoms: 1.1.1
+
+ setprototypeof@1.2.0: {}
+
+ sharp-ico@0.1.5:
+ dependencies:
+ decode-ico: 0.4.1
+ ico-endec: 0.1.6
+ sharp: 0.33.5
+
+ sharp@0.33.5:
+ dependencies:
+ color: 4.2.3
+ detect-libc: 2.1.2
+ semver: 7.7.2
+ optionalDependencies:
+ '@img/sharp-darwin-arm64': 0.33.5
+ '@img/sharp-darwin-x64': 0.33.5
+ '@img/sharp-libvips-darwin-arm64': 1.0.4
+ '@img/sharp-libvips-darwin-x64': 1.0.4
+ '@img/sharp-libvips-linux-arm': 1.0.5
+ '@img/sharp-libvips-linux-arm64': 1.0.4
+ '@img/sharp-libvips-linux-s390x': 1.0.4
+ '@img/sharp-libvips-linux-x64': 1.0.4
+ '@img/sharp-libvips-linuxmusl-arm64': 1.0.4
+ '@img/sharp-libvips-linuxmusl-x64': 1.0.4
+ '@img/sharp-linux-arm': 0.33.5
+ '@img/sharp-linux-arm64': 0.33.5
+ '@img/sharp-linux-s390x': 0.33.5
+ '@img/sharp-linux-x64': 0.33.5
+ '@img/sharp-linuxmusl-arm64': 0.33.5
+ '@img/sharp-linuxmusl-x64': 0.33.5
+ '@img/sharp-wasm32': 0.33.5
+ '@img/sharp-win32-ia32': 0.33.5
+ '@img/sharp-win32-x64': 0.33.5
+
+ shiki@3.22.0:
+ dependencies:
+ '@shikijs/core': 3.22.0
+ '@shikijs/engine-javascript': 3.22.0
+ '@shikijs/engine-oniguruma': 3.22.0
+ '@shikijs/langs': 3.22.0
+ '@shikijs/themes': 3.22.0
+ '@shikijs/types': 3.22.0
'@shikijs/vscode-textmate': 10.0.2
'@types/hast': 3.0.4
+ side-channel-list@1.0.0:
+ dependencies:
+ es-errors: 1.3.0
+ object-inspect: 1.13.4
+
+ side-channel-map@1.0.1:
+ dependencies:
+ call-bound: 1.0.4
+ es-errors: 1.3.0
+ get-intrinsic: 1.3.0
+ object-inspect: 1.13.4
+
+ side-channel-weakmap@1.0.2:
+ dependencies:
+ call-bound: 1.0.4
+ es-errors: 1.3.0
+ get-intrinsic: 1.3.0
+ object-inspect: 1.13.4
+ side-channel-map: 1.0.1
+
+ side-channel@1.1.0:
+ dependencies:
+ es-errors: 1.3.0
+ object-inspect: 1.13.4
+ side-channel-list: 1.0.0
+ side-channel-map: 1.0.1
+ side-channel-weakmap: 1.0.2
+
+ signal-exit@3.0.7: {}
+
+ signal-exit@4.1.0: {}
+
+ simple-eval@1.0.1:
+ dependencies:
+ jsep: 1.4.0
+
+ simple-swizzle@0.2.4:
+ dependencies:
+ is-arrayish: 0.3.4
+
+ slice-ansi@5.0.0:
+ dependencies:
+ ansi-styles: 6.2.3
+ is-fullwidth-code-point: 4.0.0
+
+ slice-ansi@7.1.2:
+ dependencies:
+ ansi-styles: 6.2.3
+ is-fullwidth-code-point: 5.1.0
+
+ smart-buffer@4.2.0: {}
+
+ socket.io-adapter@2.5.6:
+ dependencies:
+ debug: 4.4.3
+ ws: 8.18.3
+ transitivePeerDependencies:
+ - bufferutil
+ - supports-color
+ - utf-8-validate
+
+ socket.io-parser@4.2.5:
+ dependencies:
+ '@socket.io/component-emitter': 3.1.2
+ debug: 4.4.3
+ transitivePeerDependencies:
+ - supports-color
+
+ socket.io@4.7.2:
+ dependencies:
+ accepts: 1.3.8
+ base64id: 2.0.0
+ cors: 2.8.6
+ debug: 4.3.7
+ engine.io: 6.5.5
+ socket.io-adapter: 2.5.6
+ socket.io-parser: 4.2.5
+ transitivePeerDependencies:
+ - bufferutil
+ - supports-color
+ - utf-8-validate
+
+ socks-proxy-agent@8.0.5:
+ dependencies:
+ agent-base: 7.1.4
+ debug: 4.4.3
+ socks: 2.8.7
+ transitivePeerDependencies:
+ - supports-color
+
+ socks@2.8.7:
+ dependencies:
+ ip-address: 10.1.0
+ smart-buffer: 4.2.0
+
source-map-js@1.2.1: {}
+ source-map@0.6.1:
+ optional: true
+
+ source-map@0.7.6: {}
+
space-separated-tokens@2.0.2: {}
- speakingurl@14.0.1: {}
+ sprintf-js@1.0.3: {}
+
+ stack-utils@2.0.6:
+ dependencies:
+ escape-string-regexp: 2.0.0
+
+ statuses@2.0.1: {}
+
+ stop-iteration-iterator@1.1.0:
+ dependencies:
+ es-errors: 1.3.0
+ internal-slot: 1.1.0
+
+ streamx@2.23.0:
+ dependencies:
+ events-universal: 1.0.1
+ fast-fifo: 1.3.2
+ text-decoder: 1.2.7
+ transitivePeerDependencies:
+ - bare-abort-controller
+ - react-native-b4a
+
+ string-width@4.2.3:
+ dependencies:
+ emoji-regex: 8.0.0
+ is-fullwidth-code-point: 3.0.0
+ strip-ansi: 6.0.1
+
+ string-width@7.2.0:
+ dependencies:
+ emoji-regex: 10.6.0
+ get-east-asian-width: 1.5.0
+ strip-ansi: 7.1.2
+
+ string.prototype.trim@1.2.10:
+ dependencies:
+ call-bind: 1.0.8
+ call-bound: 1.0.4
+ define-data-property: 1.1.4
+ define-properties: 1.2.1
+ es-abstract: 1.24.1
+ es-object-atoms: 1.1.1
+ has-property-descriptors: 1.0.2
+
+ string.prototype.trimend@1.0.9:
+ dependencies:
+ call-bind: 1.0.8
+ call-bound: 1.0.4
+ define-properties: 1.2.1
+ es-object-atoms: 1.1.1
+
+ string.prototype.trimstart@1.0.8:
+ dependencies:
+ call-bind: 1.0.8
+ define-properties: 1.2.1
+ es-object-atoms: 1.1.1
stringify-entities@4.0.4:
dependencies:
character-entities-html4: 2.1.0
character-entities-legacy: 3.0.0
- stylis@4.3.6: {}
-
- superjson@2.2.5:
+ strip-ansi@6.0.1:
dependencies:
- copy-anything: 4.0.5
+ ansi-regex: 5.0.1
- tabbable@6.3.0: {}
+ strip-ansi@7.1.2:
+ dependencies:
+ ansi-regex: 6.2.2
- tinyexec@1.0.2: {}
+ style-to-js@1.1.21:
+ dependencies:
+ style-to-object: 1.0.14
+
+ style-to-object@1.0.14:
+ dependencies:
+ inline-style-parser: 0.2.7
+
+ sucrase@3.35.1:
+ dependencies:
+ '@jridgewell/gen-mapping': 0.3.13
+ commander: 4.1.1
+ lines-and-columns: 1.2.4
+ mz: 2.7.0
+ pirates: 4.0.7
+ tinyglobby: 0.2.15
+ ts-interface-checker: 0.1.13
+
+ supports-preserve-symlinks-flag@1.0.0: {}
+
+ tagged-tag@1.0.0: {}
+
+ tailwindcss@3.4.4:
+ dependencies:
+ '@alloc/quick-lru': 5.2.0
+ arg: 5.0.2
+ chokidar: 3.6.0
+ didyoumean: 1.2.2
+ dlv: 1.1.3
+ fast-glob: 3.3.3
+ glob-parent: 6.0.2
+ is-glob: 4.0.3
+ jiti: 1.21.7
+ lilconfig: 2.1.0
+ micromatch: 4.0.8
+ normalize-path: 3.0.0
+ object-hash: 3.0.0
+ picocolors: 1.1.1
+ postcss: 8.5.6
+ postcss-import: 15.1.0(postcss@8.5.6)
+ postcss-js: 4.1.0(postcss@8.5.6)
+ postcss-load-config: 4.0.2(postcss@8.5.6)
+ postcss-nested: 6.2.0(postcss@8.5.6)
+ postcss-selector-parser: 6.1.2
+ resolve: 1.22.11
+ sucrase: 3.35.1
+ transitivePeerDependencies:
+ - ts-node
+
+ tar-fs@3.1.1:
+ dependencies:
+ pump: 3.0.3
+ tar-stream: 3.1.7
+ optionalDependencies:
+ bare-fs: 4.5.4
+ bare-path: 3.0.0
+ transitivePeerDependencies:
+ - bare-abort-controller
+ - bare-buffer
+ - react-native-b4a
+
+ tar-stream@3.1.7:
+ dependencies:
+ b4a: 1.8.0
+ fast-fifo: 1.3.2
+ streamx: 2.23.0
+ transitivePeerDependencies:
+ - bare-abort-controller
+ - react-native-b4a
+
+ tar@6.1.15:
+ 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
+
+ teex@1.0.1:
+ dependencies:
+ streamx: 2.23.0
+ transitivePeerDependencies:
+ - bare-abort-controller
+ - react-native-b4a
+ optional: true
+
+ text-decoder@1.2.7:
+ dependencies:
+ b4a: 1.8.0
+ transitivePeerDependencies:
+ - react-native-b4a
+
+ thenify-all@1.6.0:
+ dependencies:
+ thenify: 3.3.1
+
+ thenify@3.3.1:
+ dependencies:
+ any-promise: 1.3.0
+
+ through@2.3.8: {}
+
+ tinyglobby@0.2.15:
+ dependencies:
+ fdir: 6.5.0(picomatch@4.0.3)
+ picomatch: 4.0.3
+
+ to-data-view@1.1.0: {}
+
+ to-regex-range@5.0.1:
+ dependencies:
+ is-number: 7.0.0
+
+ toidentifier@1.0.1: {}
+
+ tr46@0.0.3: {}
trim-lines@3.0.1: {}
- ts-dedent@2.2.0: {}
+ trim-trailing-lines@2.1.0: {}
+
+ trough@2.2.0: {}
+
+ ts-interface-checker@0.1.13: {}
+
+ tslib@1.14.1: {}
tslib@2.8.1: {}
- ufo@1.6.1: {}
+ twoslash-protocol@0.3.6: {}
+
+ twoslash@0.3.6(typescript@5.9.3):
+ dependencies:
+ '@typescript/vfs': 1.6.4(typescript@5.9.3)
+ twoslash-protocol: 0.3.6
+ typescript: 5.9.3
+ transitivePeerDependencies:
+ - supports-color
+
+ type-fest@0.21.3: {}
+
+ type-fest@4.41.0: {}
+
+ type-fest@5.4.4:
+ dependencies:
+ tagged-tag: 1.0.0
+
+ type-is@1.6.18:
+ dependencies:
+ media-typer: 0.3.0
+ mime-types: 2.1.35
+
+ typed-array-buffer@1.0.3:
+ dependencies:
+ call-bound: 1.0.4
+ es-errors: 1.3.0
+ is-typed-array: 1.1.15
+
+ typed-array-byte-length@1.0.3:
+ dependencies:
+ call-bind: 1.0.8
+ for-each: 0.3.5
+ gopd: 1.2.0
+ has-proto: 1.2.0
+ is-typed-array: 1.1.15
+
+ typed-array-byte-offset@1.0.4:
+ dependencies:
+ available-typed-arrays: 1.0.7
+ call-bind: 1.0.8
+ for-each: 0.3.5
+ gopd: 1.2.0
+ has-proto: 1.2.0
+ is-typed-array: 1.1.15
+ reflect.getprototypeof: 1.0.10
+
+ typed-array-length@1.0.7:
+ dependencies:
+ call-bind: 1.0.8
+ for-each: 0.3.5
+ gopd: 1.2.0
+ is-typed-array: 1.1.15
+ possible-typed-array-names: 1.1.0
+ reflect.getprototypeof: 1.0.10
+
+ typescript@5.9.3: {}
+
+ unbox-primitive@1.1.0:
+ dependencies:
+ call-bound: 1.0.4
+ has-bigints: 1.1.0
+ has-symbols: 1.1.0
+ which-boxed-primitive: 1.1.1
+
+ unbzip2-stream@1.4.3:
+ dependencies:
+ buffer: 5.7.1
+ through: 2.3.8
+
+ undici-types@7.18.2: {}
+
+ unified@11.0.5:
+ dependencies:
+ '@types/unist': 3.0.3
+ bail: 2.0.2
+ devlop: 1.1.0
+ extend: 3.0.2
+ is-plain-obj: 4.1.0
+ trough: 2.2.0
+ vfile: 6.0.3
+
+ unist-builder@4.0.0:
+ dependencies:
+ '@types/unist': 3.0.3
+
+ unist-util-find-after@5.0.0:
+ dependencies:
+ '@types/unist': 3.0.3
+ unist-util-is: 6.0.1
+
+ unist-util-is@5.2.1:
+ dependencies:
+ '@types/unist': 2.0.11
unist-util-is@6.0.1:
dependencies:
'@types/unist': 3.0.3
+ unist-util-map@4.0.0:
+ dependencies:
+ '@types/unist': 3.0.3
+
+ unist-util-modify-children@4.0.0:
+ dependencies:
+ '@types/unist': 3.0.3
+ array-iterate: 2.0.1
+
+ unist-util-position-from-estree@2.0.0:
+ dependencies:
+ '@types/unist': 3.0.3
+
unist-util-position@5.0.0:
dependencies:
'@types/unist': 3.0.3
+ unist-util-remove-position@5.0.0:
+ dependencies:
+ '@types/unist': 3.0.3
+ unist-util-visit: 5.0.0
+
+ unist-util-remove@4.0.0:
+ dependencies:
+ '@types/unist': 3.0.3
+ unist-util-is: 6.0.1
+ unist-util-visit-parents: 6.0.1
+
unist-util-stringify-position@4.0.0:
dependencies:
'@types/unist': 3.0.3
+ unist-util-visit-children@3.0.0:
+ dependencies:
+ '@types/unist': 3.0.3
+
+ unist-util-visit-parents@5.1.3:
+ dependencies:
+ '@types/unist': 2.0.11
+ unist-util-is: 5.2.1
+
+ unist-util-visit-parents@6.0.1:
+ dependencies:
+ '@types/unist': 3.0.3
+ unist-util-is: 6.0.1
+
unist-util-visit-parents@6.0.2:
dependencies:
'@types/unist': 3.0.3
unist-util-is: 6.0.1
+ unist-util-visit@4.1.2:
+ dependencies:
+ '@types/unist': 2.0.11
+ unist-util-is: 5.2.1
+ unist-util-visit-parents: 5.1.3
+
unist-util-visit@5.0.0:
dependencies:
'@types/unist': 3.0.3
unist-util-is: 6.0.1
unist-util-visit-parents: 6.0.2
+ universalify@2.0.1: {}
+
+ unpipe@1.0.0: {}
+
+ urijs@1.19.11: {}
+
+ urlpattern-polyfill@10.0.0: {}
+
+ use-callback-ref@1.3.3(@types/react@19.2.14)(react@19.2.3):
+ dependencies:
+ react: 19.2.3
+ tslib: 2.8.1
+ optionalDependencies:
+ '@types/react': 19.2.14
+
+ use-sidecar@1.1.3(@types/react@19.2.14)(react@19.2.3):
+ dependencies:
+ detect-node-es: 1.1.0
+ react: 19.2.3
+ tslib: 2.8.1
+ optionalDependencies:
+ '@types/react': 19.2.14
+
+ util-deprecate@1.0.2: {}
+
+ utility-types@3.11.0: {}
+
+ utils-merge@1.0.1: {}
+
uuid@11.1.0: {}
+ vary@1.1.2: {}
+
+ vfile-location@5.0.3:
+ dependencies:
+ '@types/unist': 3.0.3
+ vfile: 6.0.3
+
+ vfile-matter@5.0.1:
+ dependencies:
+ vfile: 6.0.3
+ yaml: 2.8.2
+
vfile-message@4.0.3:
dependencies:
'@types/unist': 3.0.3
@@ -2697,104 +8235,142 @@ snapshots:
'@types/unist': 3.0.3
vfile-message: 4.0.3
- vite@5.4.21:
+ web-namespaces@2.0.1: {}
+
+ webidl-conversions@3.0.1: {}
+
+ whatwg-url@5.0.0:
dependencies:
- esbuild: 0.21.5
- postcss: 8.5.6
- rollup: 4.52.5
- optionalDependencies:
- fsevents: 2.3.3
+ tr46: 0.0.3
+ webidl-conversions: 3.0.1
- vitepress-openapi@0.1.10(vitepress@1.6.4(@algolia/client-search@5.42.0)(postcss@8.5.6)(search-insights@2.17.3))(vue@3.5.22):
+ which-boxed-primitive@1.1.1:
dependencies:
- '@vueuse/core': 13.9.0(vue@3.5.22)
- class-variance-authority: 0.7.1
- clsx: 2.1.1
- lucide-vue-next: 0.503.0(vue@3.5.22)
- markdown-it-link-attributes: 4.0.1
- reka-ui: 2.6.0(vue@3.5.22)
- vitepress: 1.6.4(@algolia/client-search@5.42.0)(postcss@8.5.6)(search-insights@2.17.3)
- vue: 3.5.22
- transitivePeerDependencies:
- - '@vue/composition-api'
- - typescript
+ is-bigint: 1.1.0
+ is-boolean-object: 1.2.2
+ is-number-object: 1.1.1
+ is-string: 1.1.1
+ is-symbol: 1.1.1
- vitepress@1.6.4(@algolia/client-search@5.42.0)(postcss@8.5.6)(search-insights@2.17.3):
+ which-builtin-type@1.2.1:
dependencies:
- '@docsearch/css': 3.8.2
- '@docsearch/js': 3.8.2(@algolia/client-search@5.42.0)(search-insights@2.17.3)
- '@iconify-json/simple-icons': 1.2.57
- '@shikijs/core': 2.5.0
- '@shikijs/transformers': 2.5.0
- '@shikijs/types': 2.5.0
- '@types/markdown-it': 14.1.2
- '@vitejs/plugin-vue': 5.2.4(vite@5.4.21)(vue@3.5.22)
- '@vue/devtools-api': 7.7.7
- '@vue/shared': 3.5.22
- '@vueuse/core': 12.8.2
- '@vueuse/integrations': 12.8.2(focus-trap@7.6.6)
- focus-trap: 7.6.6
- mark.js: 8.11.1
- minisearch: 7.2.0
- shiki: 2.5.0
- vite: 5.4.21
- vue: 3.5.22
- optionalDependencies:
- postcss: 8.5.6
- transitivePeerDependencies:
- - '@algolia/client-search'
- - '@types/node'
- - '@types/react'
- - async-validator
- - axios
- - change-case
- - drauu
- - fuse.js
- - idb-keyval
- - jwt-decode
- - less
- - lightningcss
- - nprogress
- - qrcode
- - react
- - react-dom
- - sass
- - sass-embedded
- - search-insights
- - sortablejs
- - stylus
- - sugarss
- - terser
- - typescript
- - universal-cookie
+ call-bound: 1.0.4
+ function.prototype.name: 1.1.8
+ has-tostringtag: 1.0.2
+ is-async-function: 2.1.1
+ is-date-object: 1.1.0
+ is-finalizationregistry: 1.1.1
+ is-generator-function: 1.1.2
+ is-regex: 1.2.1
+ is-weakref: 1.1.1
+ isarray: 2.0.5
+ which-boxed-primitive: 1.1.1
+ which-collection: 1.0.2
+ which-typed-array: 1.1.20
- vscode-jsonrpc@8.2.0: {}
-
- vscode-languageserver-protocol@3.17.5:
+ which-collection@1.0.2:
dependencies:
- vscode-jsonrpc: 8.2.0
- vscode-languageserver-types: 3.17.5
+ is-map: 2.0.3
+ is-set: 2.0.3
+ is-weakmap: 2.0.2
+ is-weakset: 2.0.4
- vscode-languageserver-textdocument@1.0.12: {}
-
- vscode-languageserver-types@3.17.5: {}
-
- vscode-languageserver@9.0.1:
+ which-typed-array@1.1.20:
dependencies:
- vscode-languageserver-protocol: 3.17.5
+ available-typed-arrays: 1.0.7
+ call-bind: 1.0.8
+ call-bound: 1.0.4
+ for-each: 0.3.5
+ get-proto: 1.0.1
+ gopd: 1.2.0
+ has-tostringtag: 1.0.2
- vscode-uri@3.0.8: {}
-
- vue-demi@0.14.10(vue@3.5.22):
+ widest-line@5.0.0:
dependencies:
- vue: 3.5.22
+ string-width: 7.2.0
- vue@3.5.22:
+ wrap-ansi@6.2.0:
dependencies:
- '@vue/compiler-dom': 3.5.22
- '@vue/compiler-sfc': 3.5.22
- '@vue/runtime-dom': 3.5.22
- '@vue/server-renderer': 3.5.22(vue@3.5.22)
- '@vue/shared': 3.5.22
+ ansi-styles: 4.3.0
+ string-width: 4.2.3
+ strip-ansi: 6.0.1
+
+ wrap-ansi@7.0.0:
+ dependencies:
+ ansi-styles: 4.3.0
+ string-width: 4.2.3
+ strip-ansi: 6.0.1
+
+ wrap-ansi@9.0.2:
+ dependencies:
+ ansi-styles: 6.2.3
+ string-width: 7.2.0
+ strip-ansi: 7.1.2
+
+ wrappy@1.0.2: {}
+
+ ws@8.17.1: {}
+
+ ws@8.18.3: {}
+
+ ws@8.19.0: {}
+
+ xml2js@0.6.2:
+ dependencies:
+ sax: 1.4.4
+ xmlbuilder: 11.0.1
+
+ xmlbuilder@11.0.1: {}
+
+ y18n@5.0.8: {}
+
+ yallist@4.0.0: {}
+
+ yaml@2.8.2: {}
+
+ yargs-parser@21.1.1: {}
+
+ yargs@17.7.1:
+ dependencies:
+ cliui: 8.0.1
+ escalade: 3.2.0
+ get-caller-file: 2.0.5
+ require-directory: 2.1.1
+ string-width: 4.2.3
+ y18n: 5.0.8
+ yargs-parser: 21.1.1
+
+ yargs@17.7.2:
+ dependencies:
+ cliui: 8.0.1
+ escalade: 3.2.0
+ get-caller-file: 2.0.5
+ require-directory: 2.1.1
+ string-width: 4.2.3
+ y18n: 5.0.8
+ yargs-parser: 21.1.1
+
+ yauzl@2.10.0:
+ dependencies:
+ buffer-crc32: 0.2.13
+ fd-slicer: 1.1.0
+
+ yoctocolors-cjs@2.1.3: {}
+
+ yoga-layout@3.2.1: {}
+
+ zod-to-json-schema@3.20.4(zod@3.21.4):
+ dependencies:
+ zod: 3.21.4
+
+ zod-to-json-schema@3.20.4(zod@3.24.0):
+ dependencies:
+ zod: 3.24.0
+
+ zod@3.21.4: {}
+
+ zod@3.23.8: {}
+
+ zod@3.24.0: {}
zwitch@2.0.4: {}
diff --git a/docs/public/social.png b/social.png
similarity index 100%
rename from docs/public/social.png
rename to social.png
diff --git a/docs/public/social_en.png b/social_en.png
similarity index 100%
rename from docs/public/social_en.png
rename to social_en.png
diff --git a/docs/public/social_zh.png b/social_zh.png
similarity index 100%
rename from docs/public/social_zh.png
rename to social_zh.png
diff --git a/docs/public/star.gif b/star.gif
similarity index 100%
rename from docs/public/star.gif
rename to star.gif
diff --git a/ui/bot-page-en-rounded.png b/ui/bot-page-en-rounded.png
new file mode 100644
index 000000000..483d48757
Binary files /dev/null and b/ui/bot-page-en-rounded.png differ
diff --git a/ui/bot-page-zh-rounded.png b/ui/bot-page-zh-rounded.png
new file mode 100644
index 000000000..8cff557ae
Binary files /dev/null and b/ui/bot-page-zh-rounded.png differ
diff --git a/docs/zh/deploy/command.md b/zh/deploy/command.mdx
similarity index 79%
rename from docs/zh/deploy/command.md
rename to zh/deploy/command.mdx
index f460af4c7..fd2f8bf01 100644
--- a/docs/zh/deploy/command.md
+++ b/zh/deploy/command.mdx
@@ -1,5 +1,7 @@
-# 命令
+---
+title: "命令"
+---
LangBot 将以 `!` 开头的消息视为命令。官方提供了 [`EssentialCommands` 插件](https://space.langbot.app/market?author=langbot-team&plugin=EssentialCommands),包含了常用的命令。
-您也可以开发自己的命令插件,请参考 [命令插件开发](/zh/plugin/dev/components/command.md)。
\ No newline at end of file
+您也可以开发自己的命令插件,请参考 [命令插件开发](/zh/plugin/dev/components/command)。
diff --git a/zh/deploy/langbot/docker.mdx b/zh/deploy/langbot/docker.mdx
new file mode 100644
index 000000000..8507d58c4
--- /dev/null
+++ b/zh/deploy/langbot/docker.mdx
@@ -0,0 +1,42 @@
+---
+title: "Docker部署"
+---
+
+
+ 您需要提前了解:
+
+ - `Docker` 和 `Docker Compose` 的使用
+ - Docker 容器间网络通信配置方式
+
+
+
+ - 推荐使用[阿里云,服务器价格低至 38 元一年,更可以享受8折优惠](https://www.aliyun.com/minisite/goods?userCode=ys4ad8gs)
+
+
+Git 克隆本项目:
+
+```bash
+git clone https://github.com/langbot-app/LangBot
+cd LangBot/docker
+```
+
+启动容器:
+
+```bash
+docker compose up
+```
+
+
+ - 如果你的主机位于中国大陆,可以考虑把 `docker-compose.yaml` 文件中的镜像名称改为`docker.langbot.app/langbot-public/rockchin/langbot:latest`以使用我们提供的镜像源。
+ - 推荐[设置 Docker 容器代理](https://docker.github.net.cn/network/proxy/),以便保证 LangBot 在运行期间的网络访问通畅。
+
+
+首次启动会输出创建配置文件的提示,请继续按照文件配置。
+
+容器会映射`5300`端口供 WebUI 使用,您可以访问`http://127.0.0.1:5300`查看 WebUI。\
+还会映射`2280-2290`端口供使用 OneBot 协议的消息平台适配器反向连接。
+
+完成 LangBot 部署后,请继续阅读:
+
+- [配置机器人文档](/zh/deploy/platforms/readme)。
+- [配置模型文档](/zh/deploy/models/readme)。
\ No newline at end of file
diff --git a/docs/zh/deploy/langbot/manual.md b/zh/deploy/langbot/manual.mdx
similarity index 73%
rename from docs/zh/deploy/langbot/manual.md
rename to zh/deploy/langbot/manual.mdx
index 0d3c83435..9e5dd5b4b 100644
--- a/docs/zh/deploy/langbot/manual.md
+++ b/zh/deploy/langbot/manual.mdx
@@ -1,53 +1,54 @@
-# 手动部署
-
-:::warning
-1. 请使用Python 3.10.1(不包含3.10.0)及以上版本,推荐3.10.14版本,没有Python的需自行安装。
-2. Unix-like 系统上请优先考虑使用 Docker 部署。
-:::
-
-## 安装主程序
-
-1. 前往[Release](https://github.com/langbot-app/LangBot/releases)页面下载最新版本的压缩包(推荐)`langbot-xxx-all.zip`(请勿下载 Source Code,因为其中不包含 WebUI)。解压,在解压目录打开命令行(终端)
-
-
-
-2. 安装依赖
-
-我们使用 [uv](https://docs.astral.sh/uv/) 管理依赖。
-
-```bash
-pip install uv
-uv sync
-```
-
-或者使用清华源
-
-```bash
-pip install uv -i https://pypi.tuna.tsinghua.edu.cn/simple
-uv sync
-```
-
-3. 运行一次主程序,生成配置文件
-
-```bash
-uv run main.py
-```
-
-提示如下信息
-
-```
- _ ___ _
-| | __ _ _ _ __ _| _ ) ___| |_
-| |__/ _` | ' \/ _` | _ \/ _ \ _|
-|____\__,_|_||_\__, |___/\___/\__|
- |___/
-
-⭐️开源地址: https://github.com/langbot-app/LangBot
-📖文档地址: https://docs.langbot.app
-
-以下文件不存在,已自动生成,请按需修改配置文件后重启:
-- data/config.yaml
-...
-```
-
-接下来可以使用 Ctrl+C 退出程序,继续查看[部署机器人](/zh/deploy/platforms/readme)页。
+---
+title: "手动部署"
+---
+
+
+ Unix-like 系统上请优先考虑使用 Docker 部署。
+
+
+## 安装主程序
+
+1. 前往[Release](https://github.com/langbot-app/LangBot/releases)页面下载最新版本的压缩包(推荐)`langbot-xxx-all.zip`(请勿下载 Source Code,因为其中不包含 WebUI)。解压,在解压目录打开命令行(终端)
+
+
+
+2. 安装依赖
+
+我们使用 [uv](https://docs.astral.sh/uv/) 管理依赖。
+
+```bash
+pip install uv
+uv sync
+```
+
+或者使用清华源
+
+```bash
+pip install uv -i https://pypi.tuna.tsinghua.edu.cn/simple
+uv sync
+```
+
+3. 运行一次主程序,生成配置文件
+
+```bash
+uv run main.py
+```
+
+提示如下信息
+
+```
+ _ ___ _
+| | __ _ _ _ __ _| _ ) ___| |_
+| |__/ _` | ' \/ _` | _ \/ _ \ _|
+|____\__,_|_||_\__, |___/\___/\__|
+ |___/
+
+⭐️开源地址: https://github.com/langbot-app/LangBot
+📖文档地址: https://docs.langbot.app
+
+以下文件不存在,已自动生成,请按需修改配置文件后重启:
+- data/config.yaml
+...
+```
+
+接下来可以使用 Ctrl+C 退出程序,继续查看[部署机器人](/zh/deploy/platforms/readme)页。
\ No newline at end of file
diff --git a/docs/zh/deploy/langbot/one-click/1panel.md b/zh/deploy/langbot/one-click/1panel.mdx
similarity index 60%
rename from docs/zh/deploy/langbot/one-click/1panel.md
rename to zh/deploy/langbot/one-click/1panel.mdx
index e3d3f976f..a9c2ff52d 100644
--- a/docs/zh/deploy/langbot/one-click/1panel.md
+++ b/zh/deploy/langbot/one-click/1panel.mdx
@@ -1,18 +1,12 @@
-# 1Panel部署
+---
+title: "1Panel部署"
+---
使用[1Panel](https://www.bt.cn/new/download.html?r=dk_LangBot)一键部署 LangBot。
-:::warning
-
-除非您打算使用 Discord、飞书等无需额外容器的消息平台,或您熟悉1Panel上 Docker 容器间的网络连接,否则不建议使用1Panel一键部署,请考虑使用[Docker部署](/zh/deploy/langbot/docker)。
-
-:::
-
-
-
-:::info
-使用[阿里云,服务器价格低至 38 元一年,更可以享受8折优惠](https://www.aliyun.com/minisite/goods?userCode=ys4ad8gs),一键安装1Panel更方便
-:::
+
+ 使用[阿里云,服务器价格低至 38 元一年,更可以享受8折优惠](https://www.aliyun.com/minisite/goods?userCode=ys4ad8gs),一键安装1Panel更方便
+
## 安装1Panel
@@ -22,7 +16,7 @@
打开[1Panel](https://www.bt.cn/new/download.html?r=dk_LangBot),使用1Panel官方提供的Linux面板安装脚本,根据自己使用的系统选择对应的脚本
-
+
复制对应脚本,粘贴到服务器执行。
@@ -34,17 +28,17 @@
打开`应用商店`,选择`AI`类别,点击安装 LangBot
-
+
勾选`端口外部访问`,点击确认即可
-
+
稍等片刻,安装完成
点击左侧`容器`,选择`容器`类目,即可看到 LangBot 容器栏
-
+
复制服务器公网地址,例如`http://xxx.xxx.xxx.xxx:5300`(xxx.xxx.xxx.xxx为1Panel 明白所在服务器的 IP,5300为端口号)
@@ -52,4 +46,4 @@
然后就可以在可视化界面进行配置了。
-接下来请继续阅读[部署消息平台](/zh/deploy/platforms/readme)页。
+接下来请继续阅读[部署消息平台](/zh/deploy/platforms/readme)页。
\ No newline at end of file
diff --git a/docs/zh/deploy/langbot/one-click/bt.md b/zh/deploy/langbot/one-click/bt.mdx
similarity index 63%
rename from docs/zh/deploy/langbot/one-click/bt.md
rename to zh/deploy/langbot/one-click/bt.mdx
index f57bbaf27..2a71ffd8e 100644
--- a/docs/zh/deploy/langbot/one-click/bt.md
+++ b/zh/deploy/langbot/one-click/bt.mdx
@@ -1,55 +1,55 @@
-# 宝塔面板部署
-
-使用[宝塔面板](https://www.bt.cn/new/download.html?r=dk_LangBot)一键部署 LangBot。
-
-:::warning
-- 除非您打算使用 Discord、飞书等无需额外容器的消息平台,或您熟悉宝塔面板上 Docker 容器间的网络连接,否则不建议使用宝塔面板一键部署,请考虑使用[Docker部署](/zh/deploy/langbot/docker)。
-- 如果你已经安装了宝塔,请更新到 **9.2.0** 及以上
-:::
-
-
-:::info
-使用[阿里云,服务器价格低至 38 元一年,更可以享受8折优惠](https://www.aliyun.com/minisite/goods?userCode=ys4ad8gs),一键安装宝塔更方便
-:::
-
-## 安装宝塔
-
-> 服务器系统推荐(来自宝塔):Debian 12,Ubuntu 22等
->
-> 本文默认所述的是拥有公网IPv4地址的服务器,如果是家用机器没有公网 IP,可以通过下文中的内网来访问相关页面
-
-打开[宝塔面板](https://www.bt.cn/new/download.html?r=dk_LangBot),使用宝塔官方提供的Linux面板安装脚本,根据自己使用的系统选择对应的脚本
-
-
-
-复制对应脚本,粘贴到服务器执行。
-
-## 安装LangBot
-
-等待一段时间后,宝塔安装完成
-
-可以看到提示信息中类似这样的一段,将外网面板地址复制到浏览器打开。
-
-
-
-首次打开应该会弹出`推荐安装套件`,无需安装,关闭跳过即可。
-
-然后点击侧边栏的`docker`,首次会提示安装Docker和Docker Compose服务,点击立即安装,若已安装请忽略。
-
-然后在`Docker -> 应用商店`,搜索`LangBot`(注意大小写),点击`安装`,使用默认配置。
-
-稍等一段时间,可以看到提示名为`langbot_XXXX`的容器显示`运行中`
-
-
-
-点击上图中红色圆圈查看运行日志
-
-
-
-可以看到WebUI的配置页面(可视化配置页面)的外网和内网访问路径,复制公网地址,例如`http://xxx.xxx.xxx.xxx:5300`(xxx.xxx.xxx.xxx为宝塔面板IP,5300为端口号,可能变化,具体如图)
-
-打开后输入管理员邮箱和密码,然后点击初始化。
-
-然后就可以在可视化界面进行配置了。
-
-接下来请继续阅读[部署消息平台](/zh/deploy/platforms/readme)页。
+---
+title: "宝塔面板部署"
+---
+
+使用[宝塔面板](https://www.bt.cn/new/download.html?r=dk_LangBot)一键部署 LangBot。
+
+
+ 如果你已经安装了宝塔,请更新到 **9.2.0** 及以上
+
+
+
+ 使用[阿里云,服务器价格低至 38 元一年,更可以享受8折优惠](https://www.aliyun.com/minisite/goods?userCode=ys4ad8gs),一键安装宝塔更方便
+
+
+## 安装宝塔
+
+> 服务器系统推荐(来自宝塔):Debian 12,Ubuntu 22等
+>
+> 本文默认所述的是拥有公网IPv4地址的服务器,如果是家用机器没有公网 IP,可以通过下文中的内网来访问相关页面
+
+打开[宝塔面板](https://www.bt.cn/new/download.html?r=dk_LangBot),使用宝塔官方提供的Linux面板安装脚本,根据自己使用的系统选择对应的脚本
+
+
+
+复制对应脚本,粘贴到服务器执行。
+
+## 安装LangBot
+
+等待一段时间后,宝塔安装完成
+
+可以看到提示信息中类似这样的一段,将外网面板地址复制到浏览器打开。
+
+
+
+首次打开应该会弹出`推荐安装套件`,无需安装,关闭跳过即可。
+
+然后点击侧边栏的`docker`,首次会提示安装Docker和Docker Compose服务,点击立即安装,若已安装请忽略。
+
+然后在`Docker -> 应用商店`,搜索`LangBot`(注意大小写),点击`安装`,使用默认配置。
+
+稍等一段时间,可以看到提示名为`langbot_XXXX`的容器显示`运行中`
+
+
+
+点击上图中红色圆圈查看运行日志
+
+
+
+可以看到WebUI的配置页面(可视化配置页面)的外网和内网访问路径,复制公网地址,例如`http://xxx.xxx.xxx.xxx:5300`(xxx.xxx.xxx.xxx为宝塔面板IP,5300为端口号,可能变化,具体如图)
+
+打开后输入管理员邮箱和密码,然后点击初始化。
+
+然后就可以在可视化界面进行配置了。
+
+接下来请继续阅读[部署消息平台](/zh/deploy/platforms/readme)页。
\ No newline at end of file
diff --git a/docs/zh/deploy/langbot/package.md b/zh/deploy/langbot/package.mdx
similarity index 88%
rename from docs/zh/deploy/langbot/package.md
rename to zh/deploy/langbot/package.mdx
index ef42898d4..eb11d6564 100644
--- a/docs/zh/deploy/langbot/package.md
+++ b/zh/deploy/langbot/package.mdx
@@ -1,8 +1,10 @@
-# 使用包管理器部署
+---
+title: "使用包管理器部署"
+---
-:::info
+
支持 Windows、Linux、Mac OS 等系统,推荐在测试环境、个人用途场景使用;生产级环境请使用[Docker部署](/zh/deploy/langbot/docker.html)。
-:::
+
LangBot 已打包发布至 PyPI。请安装[uv](https://docs.astral.sh/uv/getting-started/installation/),然后在空目录下运行以下命令:
diff --git a/docs/zh/deploy/settings.md b/zh/deploy/settings.mdx
similarity index 72%
rename from docs/zh/deploy/settings.md
rename to zh/deploy/settings.mdx
index 6419aeec7..a44d9bf46 100644
--- a/docs/zh/deploy/settings.md
+++ b/zh/deploy/settings.mdx
@@ -1,4 +1,6 @@
-# 系统环境设置
+---
+title: "系统环境设置"
+---
配置系统运行的一些环境信息,文件位于`data/config.yaml`。
一般不需要修改。
@@ -16,6 +18,10 @@ admins: []
# API 端口
api:
port: 5300
+ # LangBot 统一管理所有需要 Webhook 监听的机器人地址
+ # 这是显示在需要 Webhook 连接的机器人页面上的 Webhook地址前缀
+ # 您可以根据自身网络环境修改
+ webhook_prefix: 'http://127.0.0.1:5300'
# 命令配置
command:
@@ -97,6 +103,10 @@ system:
expire: 604800
# JWT 密钥,首次启动时会自动生成一个密钥
secret: 'xxxx'
+ # 是否允许修改密码
+ allow_change_password: true
+ # 恢复密钥
+ recovery_key: 'xxxx'
# 向量数据库配置
vdb:
@@ -104,17 +114,38 @@ vdb:
# 支持的向量数据库:
# - chroma(默认,嵌入式向量数据库)
# - qdrant(外部向量数据库,请在下方配置)
+ # - milvus(可扩展的向量数据库,请在下方配置)
+ # - pgvector(PostgreSQL 扩展,请在下方配置)
+ # - seekdb(提供内置嵌入模型的数据库,请在下方配置)
use: chroma
# Qdrant 配置
qdrant:
- # Qdrant 的 URL
url: ''
- # Qdrant 的 Host
host: localhost
- # Qdrant 的 Port
port: 6333
- # Qdrant 的 API Key
api_key: ''
+ milvus:
+ uri: 'http://127.0.0.1:19530'
+ token: ''
+ pgvector:
+ host: '127.0.0.1'
+ port: 5433
+ database: 'langbot'
+ user: 'postgres'
+ password: 'postgres'
+ seekdb:
+ # 嵌入式模式('embedded' 或 'server')
+ mode: embedded
+ # 嵌入式模式配置:
+ path: './data/seekdb'
+ database: 'langbot'
+ # 服务器模式配置(当 mode='server' 时生效):
+ host: 'localhost'
+ port: 2881
+ user: 'root'
+ password: ''
+ # 可选,用于 OceanBase 多租户场景
+ tenant: ''
```
## 通过环境变量设置
@@ -130,4 +161,4 @@ config.yaml 中的配置可以通过环境变量进行设置。环境变量名
...
-在启动时,LangBot 会读取所有环境变量,将对应的配置应用到 config.yaml 中并写入到 data/config.yaml 文件中。
\ No newline at end of file
+在启动时,LangBot 会读取所有环境变量,将对应的配置应用到 config.yaml 中并写入到 data/config.yaml 文件中。
diff --git a/docs/zh/deploy/update.md b/zh/deploy/update.mdx
similarity index 88%
rename from docs/zh/deploy/update.md
rename to zh/deploy/update.mdx
index 28a9de685..c89856277 100644
--- a/docs/zh/deploy/update.md
+++ b/zh/deploy/update.mdx
@@ -1,4 +1,6 @@
-# 更新 LangBot
+---
+title: "更新 LangBot"
+---
## 使用包管理器部署
@@ -26,10 +28,10 @@ docker compose up --force-recreate --pull always -d
此命令将拉取最新的 LangBot 镜像并重建容器。
-:::info
+
4.3.0 版本更改了 `docker/docker-compose.yaml` 文件的内容和位置,若您由之前版本更新而来,请[根据文档重新部署](/zh/deploy/langbot/docker)。
-:::
+
## 手动部署
-从 [Releases](https://github.com/langbot-app/LangBot/releases) 页面下载最新发行版的 Assets 下的 `langbot--all.zip`,解压到原来部署到目录重启即可。
\ No newline at end of file
+从 [Releases](https://github.com/langbot-app/LangBot/releases) 页面下载最新发行版的 Assets 下的 `langbot--all.zip`,解压到原来部署到目录重启即可。
diff --git a/docs/zh/develop/adapter/discord/README.md b/zh/develop/adapter/discord/README.mdx
similarity index 93%
rename from docs/zh/develop/adapter/discord/README.md
rename to zh/develop/adapter/discord/README.mdx
index a822d98ac..bb71742f2 100644
--- a/docs/zh/develop/adapter/discord/README.md
+++ b/zh/develop/adapter/discord/README.mdx
@@ -1,4 +1,6 @@
-# Discord 适配器文档
+---
+title: "Discord 适配器文档"
+---
## 概述
@@ -7,10 +9,10 @@
## 文档导航
### 核心文档
-- **[API 参考](api_reference.md)** - Discord 适配器完整 API 文档
-- **[快速开始](quick_start.md)** - 基本使用指南
-- **[架构设计](design.md)** - 适配器架构设计
-- **[故障排除](troubleshooting.md)** - 常见问题解决方案
+- **[API 参考](api_reference)** - Discord 适配器完整 API 文档
+- **[快速开始](quick_start)** - 基本使用指南
+- **[架构设计](design)** - 适配器架构设计
+- **[故障排除](troubleshooting)** - 常见问题解决方案
## 完整功能集
diff --git a/docs/zh/develop/adapter/discord/api_reference.md b/zh/develop/adapter/discord/api_reference.mdx
similarity index 99%
rename from docs/zh/develop/adapter/discord/api_reference.md
rename to zh/develop/adapter/discord/api_reference.mdx
index b730f2dd5..a623be7d7 100644
--- a/docs/zh/develop/adapter/discord/api_reference.md
+++ b/zh/develop/adapter/discord/api_reference.mdx
@@ -1,4 +1,6 @@
-# Discord 适配器 API 参考
+---
+title: "Discord 适配器 API 参考"
+---
## 概述
diff --git a/docs/zh/develop/adapter/discord/design.md b/zh/develop/adapter/discord/design.mdx
similarity index 99%
rename from docs/zh/develop/adapter/discord/design.md
rename to zh/develop/adapter/discord/design.mdx
index 880ca3efa..beb948caf 100644
--- a/docs/zh/develop/adapter/discord/design.md
+++ b/zh/develop/adapter/discord/design.mdx
@@ -1,4 +1,6 @@
-# Discord 适配器架构设计
+---
+title: "Discord 适配器架构设计"
+---
## 概述
diff --git a/docs/zh/develop/adapter/discord/quick_start.md b/zh/develop/adapter/discord/quick_start.mdx
similarity index 99%
rename from docs/zh/develop/adapter/discord/quick_start.md
rename to zh/develop/adapter/discord/quick_start.mdx
index 8149574a7..e24740dfb 100644
--- a/docs/zh/develop/adapter/discord/quick_start.md
+++ b/zh/develop/adapter/discord/quick_start.mdx
@@ -1,4 +1,6 @@
-# Discord 适配器快速入门
+---
+title: "Discord 适配器快速入门"
+---
## 概述
diff --git a/docs/zh/develop/adapter/discord/troubleshooting.md b/zh/develop/adapter/discord/troubleshooting.mdx
similarity index 99%
rename from docs/zh/develop/adapter/discord/troubleshooting.md
rename to zh/develop/adapter/discord/troubleshooting.mdx
index 6c900070c..045790a78 100644
--- a/docs/zh/develop/adapter/discord/troubleshooting.md
+++ b/zh/develop/adapter/discord/troubleshooting.mdx
@@ -1,4 +1,6 @@
-# Discord 适配器故障排除
+---
+title: "Discord 适配器故障排除"
+---
## 概述
diff --git a/zh/develop/comp-arch.mdx b/zh/develop/comp-arch.mdx
new file mode 100644
index 000000000..2dfee7d91
--- /dev/null
+++ b/zh/develop/comp-arch.mdx
@@ -0,0 +1,5 @@
+---
+title: "组件架构"
+---
+
+
diff --git a/docs/zh/develop/dev-config.md b/zh/develop/dev-config.mdx
similarity index 71%
rename from docs/zh/develop/dev-config.md
rename to zh/develop/dev-config.mdx
index 9a013581e..21f2cebbd 100644
--- a/docs/zh/develop/dev-config.md
+++ b/zh/develop/dev-config.mdx
@@ -1,4 +1,6 @@
-# 开发配置
+---
+title: "开发配置"
+---
LangBot 分为前端和后端,前端使用 Next.js + shadcn 开发,后端通过 Quart(Flask 的异步版本)开发。
@@ -52,11 +54,18 @@ npm run dev
然后根据输出信息,访问`http://127.0.0.1:3000`查看独立启动的前端页面。
-:::info
-本地使用`pnpm dev`启动时,会携带`.env`中的环境变量`NEXT_PUBLIC_API_BASE_URL`,该变量会自动被前端使用,以确保前端可以访问到本地启动的后端的`5300`端口。
+
生产环境中,前端会被预编译成静态文件,由后端提供服务,前端会自动访问同域的后端地址。
-:::
+
+
+## 代码格式化
+
+仓库中包含 lint 和 format 检查工作流,您推送代码后将被自动检查。请配置 pre-commit 来在提交时在本地提前检查代码。
+
+```bash
+uv run pre-commit install
+```
## API 文档
diff --git a/docs/zh/develop/plugin-runtime.md b/zh/develop/plugin-runtime.mdx
similarity index 87%
rename from docs/zh/develop/plugin-runtime.md
rename to zh/develop/plugin-runtime.mdx
index 934194273..710f12993 100644
--- a/docs/zh/develop/plugin-runtime.md
+++ b/zh/develop/plugin-runtime.mdx
@@ -1,10 +1,10 @@
-# 调试插件运行时、CLI、SDK
+---
+title: "调试插件运行时、CLI、SDK"
+---
-::: info
-请先阅读[插件教程](/zh/plugin/plugin-intro),了解插件系统。
-
-- 插件运行时、CLI、SDK 开源在: https://github.com/langbot-app/langbot-plugin-sdk
-:::
+
+ 插件运行时、CLI、SDK 开源在: https://github.com/langbot-app/langbot-plugin-sdk
+
Clone 插件运行时源码:
@@ -21,7 +21,10 @@ uv sync --dev
此时,uv 将自动为您创建虚拟环境(.venv),若您的编辑器询问您是否使用此虚拟环境,请选择`是`。
-
+
或者请您手动激活此虚拟环境:
@@ -54,7 +57,7 @@ plugin:
runtime_ws_url: ws://localhost:5400/control/ws
```
-并在启动 LangBot 主程序时携带启动参数`--standalone-runtime`(如:`uv run main.py --standalone-runtime`)。
+并在启动 LangBot 主程序时携带启动参数`--standalone-runtime`(如:`uv run main.py --standalone-runtime`)。\
重启 LangBot,将会使用 WebSocket 连接到此运行时。
## langbot-plugin-sdk 架构
diff --git a/docs/zh/insight/community.md b/zh/insight/community.mdx
similarity index 70%
rename from docs/zh/insight/community.md
rename to zh/insight/community.mdx
index cfbf74c41..57abf2941 100644
--- a/docs/zh/insight/community.md
+++ b/zh/insight/community.mdx
@@ -1,4 +1,6 @@
-# 社区资源
+---
+title: "社区资源"
+---
## 简化版教程
@@ -14,16 +16,16 @@
解答各种问题
+- LangBot 社区(一):619154800 ([链接](https://qm.qq.com/q/1K9GjQuza))
+- LangBot 社区(二):1030838208 ([链接](https://qm.qq.com/q/PF9OuQCCcM))
- LangBot 社区(三):966235608 ([链接](https://qm.qq.com/q/JLi38whHum))
-- 【已满】LangBot 社区(二):1030838208 ([链接](https://qm.qq.com/q/PF9OuQCCcM))
-- 【已满】LangBot 社区(一):619154800 ([链接](https://qm.qq.com/q/1K9GjQuza))
### 🧩 插件开发群
插件和 LangBot 开发、发布、交流
-:::warning 注意
+
此群群友只对开发插件感兴趣,不会解答您的任何其他问题。
-:::
+
-- LangBot 插件&开发:1032327138 ([链接](https://qm.qq.com/q/G7ENGTjeou))
+- LangBot 插件&开发:1032327138 ([链接](https://qm.qq.com/q/G7ENGTjeou))
diff --git a/docs/zh/insight/features.md b/zh/insight/features.mdx
similarity index 78%
rename from docs/zh/insight/features.md
rename to zh/insight/features.mdx
index 25762b9a4..eaea2d906 100644
--- a/docs/zh/insight/features.md
+++ b/zh/insight/features.mdx
@@ -1,4 +1,6 @@
-# 特性规格
+---
+title: "特性规格"
+---
LangBot 是一个开源的大语言模型原生即时通信机器人开发平台,旨在提供开箱即用的 IM 机器人开发体验,具有 Agent、RAG、MCP 等多种 LLM 应用功能,适配全球主流即时通信平台,并提供丰富的 API 接口,支持自定义开发。
@@ -18,10 +20,13 @@ LangBot 是一个开源的大语言模型原生即时通信机器人开发平台
| Telegram | ✅ | 支持流式输出 |
| Slack | ✅ | |
| LINE | ✅ | |
+| KOOK | ✅ | |
| WhatsApp | 🚧 | |
🚧: 正在开发中
+各即时通信平台特性支持性请查看[此文档](/zh/insight/platform-features)。
+
## 模型和 LLMOps 平台支持性
| 供应商/服务 | 状态 | 备注 |
@@ -58,17 +63,22 @@ LangBot 是一个开源的大语言模型原生即时通信机器人开发平台
| RAG | ✅ | 使用 Chroma 作为向量数据库 |
| MCP | ✅ | 支持 Stdio 和 HTTP 两种方式 |
+## 系统扩展性
+
+- HTTP Service API: 支持通过基于 API key 鉴权的 HTTP API 接口访问 LangBot 各种实体。
+- Outgoing Webhook: 支持通过 Webhook 发送 LangBot 内部事件到外部系统。
+- 生产级插件系统: 基于跨进程通信技术和异步技术实现的生产级插件系统,支持多种组件扩展。
+
## 案例截图
-
+
-
+
-
+
-
+
-
-
-
+
+
diff --git a/docs/zh/insight/guide.md b/zh/insight/guide.mdx
similarity index 93%
rename from docs/zh/insight/guide.md
rename to zh/insight/guide.mdx
index dfab3dfcd..8ea02e3b5 100644
--- a/docs/zh/insight/guide.md
+++ b/zh/insight/guide.mdx
@@ -1,43 +1,45 @@
-# 欢迎访问 LangBot 文档
-
-LangBot 是一个开源的大语言模型(LLM)原生即时通信机器人平台,支持多种消息平台和模型供应商。提供对 Dify、阿里云百炼等 LLMOps 平台的支持。并提供 WebUI 供用户快速部署和使用。
-
-:::info
-这是 LangBot 4.0 的文档,3.0 文档请[访问](https://v3.docs.langbot.app)。
-:::
-
-## 文档结构
-
-文档分为以下几个部分:
-
-- 部署和使用(必读):部署和使用 LangBot 的详细步骤
-- 插件:插件使用和开发相关信息
-- 实践:许多不错的 LangBot 使用案例
-- 开发:参与 LangBot 开发的相关信息
-
-## 快速开始指南
-
-> 两种方式快速开始:
->
-> - 使用社区资源的简化版教程(见左侧)
-> - 阅读文档自行部署(下述为快速开始的方法)
-
-### 1. 部署 LangBot
-
-阅读左侧 **部署 LangBot** 部分,选择部署 LangBot 的方式
-
-部署完成后,打开`http://127.0.0.1:5300`或者`http://服务器公网IP:5300`
-
-进行初始化,填入邮箱和密码并记录保存下来
-
-### 2. 配置机器人
-
-查看左侧的[配置机器人](/zh/deploy/platforms/readme)
-
-### 3. 配置模型
-
-查看左侧[配置对话模型](/zh/deploy/models/readme)
-
-
-
-完成以上两步后即可使用,如果需要更多功能的配置,可在[流水线](/zh/deploy/pipelines/readme)中设置
+---
+title: "欢迎访问 LangBot 文档"
+---
+
+LangBot 是一个开源的大语言模型(LLM)原生即时通信机器人平台,支持多种消息平台和模型供应商。提供对 Dify、阿里云百炼等 LLMOps 平台的支持。并提供 WebUI 供用户快速部署和使用。
+
+
+这是 LangBot 4.0 的文档,3.0 文档请[访问](https://v3.docs.langbot.app)。
+
+
+## 文档结构
+
+文档分为以下几个部分:
+
+- 部署和使用(必读):部署和使用 LangBot 的详细步骤
+- 插件:插件使用和开发相关信息
+- 实践:许多不错的 LangBot 使用案例
+- 开发:参与 LangBot 开发的相关信息
+
+## 快速开始指南
+
+> 两种方式快速开始:
+>
+> - 使用社区资源的简化版教程(见左侧)
+> - 阅读文档自行部署(下述为快速开始的方法)
+
+### 1. 部署 LangBot
+
+阅读左侧 **部署 LangBot** 部分,选择部署 LangBot 的方式
+
+部署完成后,打开`http://127.0.0.1:5300`或者`http://服务器公网IP:5300`
+
+进行初始化,填入邮箱和密码并记录保存下来
+
+### 2. 配置机器人
+
+查看左侧的[配置机器人](/zh/deploy/platforms/readme)
+
+### 3. 配置模型
+
+查看左侧[配置对话模型](/zh/deploy/models/readme)
+
+
+
+完成以上两步后即可使用,如果需要更多功能的配置,可在[流水线](/zh/deploy/pipelines/readme)中设置
diff --git a/zh/insight/platform-features.mdx b/zh/insight/platform-features.mdx
new file mode 100644
index 000000000..9fd127b9c
--- /dev/null
+++ b/zh/insight/platform-features.mdx
@@ -0,0 +1,231 @@
+---
+title: "各消息平台特性支持性"
+---
+
+以下是各平台我们已实现并测试的功能列表,如有预期之外的现象,欢迎即使反馈到[GitHub Issues](https://github.com/langbot-app/LangBot/issues) 或直接提出 Pull Request 帮助修复。
+
+## OneBot v11
+
+### 接收
+
+| 功能点 | 状态 | 备注 |
+| --- | --- | --- |
+| 接收私聊消息 | ✅ | |
+| 接收群聊提及消息 | ✅ | |
+| 接收群聊普通消息 | ✅ | |
+| 接收图片消息 | ✅ | |
+| 接收语音消息 | ✅ | |
+| 接收文件消息 | ✅ | |
+| 接收富文本消息 | ✅ | 文本和图片结合 |
+| 获取私聊消息事件用户名称 | ✅ | |
+| 获取群聊消息事件群聊名称 | ✅ | |
+| 获取群聊消息事件发送者名称 | ✅ | |
+
+### 发送
+
+| 功能点 | 状态 | 备注 |
+| --- | --- | --- |
+| 回复私聊消息 | ✅ | |
+| 回复群聊消息 | ✅ | |
+| 回复图片消息 | ✅ | |
+| 回复语音消息 | ✅ | |
+| 回复文件消息 | ✅ | |
+| 回复富文本消息 | ✅ | 文本和图片结合 |
+| 发送主动消息 | ✅ | |
+| 发送流式响应 | ❌ | |
+
+## QQ 官方机器人
+
+## 企业微信(内部应用)
+
+### 接收
+
+| 功能点 | 状态 | 备注 |
+| --- | --- | --- |
+| 接收私聊消息 | ✅ | |
+| 接收群聊提及消息 | ❌ | 企微内部应用不支持拉群 |
+| 接收群聊普通消息 | ❌ | |
+| 接收图片消息 | ✅ | |
+| 接收语音消息 | ✅ | |
+| 接收文件消息 | ✅ | |
+| 接收富文本消息 | ❌ | |
+| 获取私聊消息事件用户名称 | ✅ | |
+| 获取群聊消息事件群聊名称 | ❌ | |
+| 获取群聊消息事件发送者名称 | ❌ | |
+
+### 发送
+
+| 功能点 | 状态 | 备注 |
+| --- | --- | --- |
+| 回复私聊消息 | ✅ | |
+| 回复群聊消息 | ❌ | |
+| 回复图片消息 | ✅ | |
+| 回复语音消息 | ✅ | |
+| 回复文件消息 | ✅ | |
+| 回复富文本消息 | ❌ | |
+| 发送主动消息 | ✅ | |
+| 发送流式响应 | ❌ | |
+
+## 企业微信(对外客服)
+
+## 企业微信智能机器人
+
+## 微信公众号
+
+## 飞书
+
+### 接收
+
+| 功能点 | 状态 | 备注 |
+| --- | --- | --- |
+| 接收私聊消息 | ✅ | |
+| 接收群聊提及消息 | ✅ | |
+| 接收群聊普通消息 | ❌ | 飞书仅支持接收提及机器人的消息 |
+| 接收图片消息 | ✅ | |
+| 接收语音消息 | ❌ | 飞书无语音消息 |
+| 接收文件消息 | ✅ | |
+| 接收富文本消息 | ✅ | 文本和图片结合 |
+| 获取私聊消息事件用户名称 | ❌ | 飞书不支持获取用户名称 |
+| 获取群聊消息事件群聊名称 | ❌ | 飞书不支持获取群聊名称 |
+| 获取群聊消息事件发送者名称 | ❌ | 飞书不支持获取发送者名称 |
+
+### 发送
+
+| 功能点 | 状态 | 备注 |
+| --- | --- | --- |
+| 回复私聊消息 | ✅ | |
+| 回复群聊消息 | ✅ | |
+| 回复图片消息 | ✅ | |
+| 回复语音消息 | ❌ | |
+| 回复文件消息 | ❌ | |
+| 回复富文本消息 | ❌ | |
+| 发送主动消息 | ✅ | |
+| 发送流式响应 | ✅ | |
+
+## 钉钉
+
+### 接收
+
+| 功能点 | 状态 | 备注 |
+| --- | --- | --- |
+| 接收私聊消息 | ✅ | |
+| 接收群聊提及消息 | ✅ | |
+| 接收群聊普通消息 | ❌ | 钉钉仅支持接收提及机器人的消息 |
+| 接收图片消息 | ✅ | |
+| 接收语音消息 | ✅ | |
+| 接收文件消息 | ✅ | |
+| 接收富文本消息 | ✅ | 文本和图片结合 |
+| 获取私聊消息事件用户名称 | ✅ | |
+| 获取群聊消息事件群聊名称 | ✅ | |
+| 获取群聊消息事件发送者名称 | ✅ | |
+
+### 发送
+
+| 功能点 | 状态 | 备注 |
+| --- | --- | --- |
+| 回复私聊消息 | ✅ | |
+| 回复群聊消息 | ✅ | |
+| 回复图片消息 | ✅ | |
+| 回复语音消息 | ❌ | |
+| 回复文件消息 | ❌ | |
+| 回复富文本消息 | ✅ | 文本和图片结合 |
+| 发送主动消息 | ✅ | |
+| 发送流式响应 | ✅ | |
+
+## KOOK
+
+P.S. 发送语音和文件报错未修
+
+### 接收
+
+| 功能点 | 状态 | 备注 |
+| --- | --- | --- |
+| 接收私聊消息 | ✅ | |
+| 接收群聊提及消息 | ✅ | |
+| 接收群聊普通消息 | ✅ | |
+| 接收图片消息 | ✅ | |
+| 接收语音消息 | ✅ | |
+| 接收文件消息 | ✅ | |
+| 接收富文本消息 | ✅ | 文本和图片结合 |
+| 获取私聊消息事件用户名称 | ✅ | |
+| 获取群聊消息事件群聊名称 | ✅ | |
+| 获取群聊消息事件发送者名称 | ✅ | |
+
+### 发送
+
+| 功能点 | 状态 | 备注 |
+| --- | --- | --- |
+| 回复私聊消息 | ✅ | |
+| 回复群聊消息 | ✅ | |
+| 回复图片消息 | ✅ | |
+| 回复语音消息 | ❌ | KOOK不支持回复语音消息 |
+| 回复文件消息 | ❌ | |
+| 回复富文本消息 | ✅ | 文本和图片结合 |
+| 发送主动消息 | ✅ | |
+| 发送流式响应 | ❌ | |
+
+## Discord
+
+### 接收
+
+| 功能点 | 状态 | 备注 |
+| --- | --- | --- |
+| 接收私聊消息 | ✅ | |
+| 接收群聊提及消息 | ✅ | |
+| 接收群聊普通消息 | ✅ | |
+| 接收图片消息 | ✅ | |
+| 接收语音消息 | ❌ | |
+| 接收文件消息 | ✅ | |
+| 接收富文本消息 | ✅ | 文本和图片结合 |
+| 获取私聊消息事件用户名称 | ✅ | |
+| 获取群聊消息事件群聊名称 | ✅ | |
+| 获取群聊消息事件发送者名称 | ✅ | |
+
+### 发送
+
+| 功能点 | 状态 | 备注 |
+| --- | --- | --- |
+| 回复私聊消息 | ✅ | |
+| 回复群聊消息 | ✅ | |
+| 回复图片消息 | ✅ | 作为文件携带 |
+| 回复语音消息 | ✅ | 作为文件携带 |
+| 回复文件消息 | ✅ | |
+| 回复富文本消息 | ✅ | 文本和文件结合 |
+| 发送主动消息 | ✅ | |
+| 发送流式响应 | ❌ | |
+
+## Telegram
+
+P.S. 未测试
+
+### 接收
+
+| 功能点 | 状态 | 备注 |
+| --- | --- | --- |
+| 接收私聊消息 | ✅ | |
+| 接收群聊提及消息 | ✅ | |
+| 接收群聊普通消息 | ✅ | |
+| 接收图片消息 | ✅ | |
+| 接收语音消息 | ❌ | |
+| 接收文件消息 | ✅ | |
+| 接收富文本消息 | ✅ | |
+| 获取私聊消息事件用户名称 | ✅ | |
+| 获取群聊消息事件群聊名称 | ✅ | |
+| 获取群聊消息事件发送者名称 | ✅ | |
+
+### 发送
+
+| 功能点 | 状态 | 备注 |
+| --- | --- | --- |
+| 回复私聊消息 | ✅ | |
+| 回复群聊消息 | ✅ | |
+| 回复图片消息 | ✅ | |
+| 回复语音消息 | ✅ | |
+| 回复文件消息 | ✅ | |
+| 回复富文本消息 | ✅ | |
+| 发送主动消息 | ✅ | |
+| 发送流式响应 | ❌ | |
+
+## Slack
+
+## LINE
diff --git a/docs/zh/plugin/compatibility.md b/zh/plugin/compatibility.mdx
similarity index 95%
rename from docs/zh/plugin/compatibility.md
rename to zh/plugin/compatibility.mdx
index ea9bd8c79..2d03f7055 100644
--- a/docs/zh/plugin/compatibility.md
+++ b/zh/plugin/compatibility.mdx
@@ -1,4 +1,6 @@
-# 系统兼容处理
+---
+title: "系统兼容处理"
+---
LangBot 插件系统运用了`Asyncio`和`Subprocess`等机制,这在unix-like系统(如Linux、MacOS)上运行良好,但在Windows上存在一些问题,导致插件无法正常运行。
@@ -12,4 +14,4 @@ Windows 上的 Python 异步事件循环默认使用 `ProactorEventLoop`,但
与 Unix-like 系统上的子进程管理与 Stdio 通信绑定的形式不同,LangBot 和 Plugin Runtime 在 Windows 上会自动采用 子进程 + WebSocket 结合的跨进程通信技术,LangBot 通过子进程启动 Plugin Runtime 但通过 WebSocket 与其通信;Plugin Runtime 也通过子进程启动各个已安装插件但通过 WebSocket 通信。
-这是 LangBot 根据系统标识自动适应的,您无需手动配置。
\ No newline at end of file
+这是 LangBot 根据系统标识自动适应的,您无需手动配置。
diff --git a/docs/zh/plugin/dev/apis/common.md b/zh/plugin/dev/apis/common.mdx
similarity index 98%
rename from docs/zh/plugin/dev/apis/common.md
rename to zh/plugin/dev/apis/common.mdx
index f5b38ee23..47533ba3f 100644
--- a/docs/zh/plugin/dev/apis/common.md
+++ b/zh/plugin/dev/apis/common.mdx
@@ -1,11 +1,9 @@
-# 插件通用 API
+---
+title: "插件通用 API"
+---
LangBot 为插件提供了一系列 API ,用于操作 LangBot 各个模块、控制消息上下文等。
-:::info 目录
-[[toc]]
-:::
-
## 请求 API
操作当前正在处理的用户请求(消息)。仅在`EventListener`和`Command`组件中可用。访问方式如下:
@@ -309,4 +307,4 @@ async def get_config_file(self, file_key: str) -> bytes:
file_bytes = await self.plugin.get_config_file("key")
```
-请结合 [`file` 或 `array[file]` 类型配置项](/zh/plugin/dev/basic-info.html#type-file)使用。
\ No newline at end of file
+请结合 [``file 或 array[file] 类型配置项``](/zh/plugin/dev/basic-info.html#type-file)使用。
\ No newline at end of file
diff --git a/zh/plugin/dev/apis/messages.mdx b/zh/plugin/dev/apis/messages.mdx
new file mode 100644
index 000000000..a5a5cee67
--- /dev/null
+++ b/zh/plugin/dev/apis/messages.mdx
@@ -0,0 +1,92 @@
+---
+title: "消息平台实体"
+---
+
+LangBot 支持多种消息平台,每个消息平台的`消息实体`格式均不相同。为了屏蔽这些差异,我们实现了一套统一的标准。插件开发者只需要掌握并在插件中使用此页所述的消息实体,LangBot 内部的消息处理逻辑能够自动完成消息的解析和转换。
+
+## 消息链
+
+消息平台的`消息`不同于用于 AI 交互的消息,消息平台的消息以`消息链`的形式描述,QQ 上展示的每一个独立的消息就是一条消息链,消息链中可以包含`文字`、`图片`、`@组件`等多种`消息链组件`,例如:
+
+
+
+这就是一个消息链,包含 一个 Plain 组件(Hello World)和 一个 Image 组件(乌萨奇)
+
+消息链和消息链组件的定义位于`langbot_plugin.api.entities.builtin.platform.message`中。
+
+### 构造消息链
+
+请先引入`langbot_plugin.api.entities.builtin.platform.message`包,才能使用其中的消息组件。
+
+```python
+from langbot_plugin.api.entities.builtin.platform.message import *
+
+# 构建一个包含文字 Hello LangBot 和图片(从URL获取)的消息
+msg_chain = MessageChain([
+ Plain(text="Hello LangBot"),
+ Image(url='https://qchatgpt.rockchin.top/langbot-logo.png')
+])
+
+# 构建一个包含 @全体成员 和文字 Hello LangBot 的消息
+msg_chain = MessageChain([
+ AtAll(),
+ Plain(text="Hello LangBot")
+])
+
+# 构建一个包含 @指定成员 和文字 Hello LangBot 的消息
+msg_chain = MessageChain([
+ At(target=123456),
+ Plain(text="Hello LangBot")
+])
+```
+
+目前支持的消息链组件:
+
+- `Source` 源消息链信息,如果是从消息平台收到的消息,都会在消息链最前端包含此组件,记录消息信息
+- `Plain` 纯文本消息
+- `Quote` 引用消息
+- `Image` 图片消息
+- `AtAll` @全体成员消息
+- `At` @指定成员消息
+- `Voice` 语音消息
+ - 需要检查消息平台支持性
+- `Forward` 转发消息
+ - 在很多平台不受支持,不建议使用
+- `File` 文件消息
+
+创建组件时,须使用具名参数传入。具体使用方式可以查看源码`langbot_plugin.api.entities.builtin.platform.message`中的定义。
+
+## 其他实体
+
+除了上述实体之外,还有`好友 Friend`和`群 Group`等实体,这些实体的定义位于`langbot_plugin.api.entities.platform.entities`中。
+
+## 访问消息平台底层 API
+
+
+ 4.x 暂不适用。
+
+
+为了抹平各个平台的差异,LangBot 在消息平台API之上,提供了一个抽象层,即上方所述的内容,以及`pkg/platform/sources`目录下的各个平台适配器。\
+但由于各个平台的差异较大,抽象层内的实体和 API 封装并不完整,如果您的插件需要访问特定平台的功能,可以按照以下说明访问底层 API。
+
+
+ ```python
+ # 例如在插件中
+ @handler(GroupMessageReceived)
+ async def _(self, ctx: EventContext):
+ # 取得适配器对象
+ adapter = ctx.query.adapter
+ ```
+
+
+| 平台 | 适配器 | 访问方式 | 说明 |
+| ---------- | --------------- | ------------------ | -------------------------------------------------------------------------------------------------------------------------------------------------------------- |
+| OneBot v11 | aiocqhttp | adapter.bot | bot 对象对应 [aiocqhttp](https://github.com/nonebot/aiocqhttp) 的 CQHttp 对象,详细使用方式请参考 aiocqhttp 文档 |
+| QQ 官方API | qqofficial | adapter.bot | bot 对象为 libs/qq_official_api 下的 SDK 对象,详细使用方式可以参考 libs/qq_official_api/api.py 中`QQOfficialClient`中的`send_group_text_msg`方法发起 HTTP 请求的方式,具体接口文档请查看 QQ 官方 API 文档 |
+| 企业微信 | wecom | adapter.bot | 参考 libs/wecom_api/api.py 中`WecomClient`中的`send_image`方法发起 HTTP 请求的方式,具体接口文档请查看企业微信 API 文档 |
+| 微信公众号 | officialaccount | - | 请参考微信公众号的 API 文档中的接口文档信息,相关的凭据信息可以在 adapter.bot 中取得 |
+| 飞书 | lark | adapter.api_client | 飞书 SDK 的 API Client 对象,具体请参考[oapi-sdk-python](https://github.com/larksuite/oapi-sdk-python) |
+| 钉钉 | dingtalk | - | 请参考钉钉 API 文档,相关的凭据信息可以在 adapter.bot 中取得 |
+| Discord | discord | adapter.bot | bot 对象为 [Rapptz/discord.py](https://github.com/Rapptz/discord.py) 的 Discord 对象,详细使用方式请参考文档 |
+| Telegram | telegram | adapter.bot | bot 对象为 [python-telegram-bot](https://github.com/python-telegram-bot/python-telegram-bot) 的 Telegram 对象,详细使用方式请参考文档 |
+| Slack | slack | adapter.bot | bot 对象 libs/slack_api/api.py 中的对象,详细使用方式请参考其代码以及 Slack SDK |
\ No newline at end of file
diff --git a/docs/zh/plugin/dev/apis/pipeline-events.md b/zh/plugin/dev/apis/pipeline-events.mdx
similarity index 77%
rename from docs/zh/plugin/dev/apis/pipeline-events.md
rename to zh/plugin/dev/apis/pipeline-events.mdx
index 347b70567..0a1651d43 100644
--- a/docs/zh/plugin/dev/apis/pipeline-events.md
+++ b/zh/plugin/dev/apis/pipeline-events.mdx
@@ -1,8 +1,6 @@
-# 流水线事件和 API
-
-:::info 目录
-[[toc]]
-:::
+---
+title: "流水线事件和 API"
+---
LangBot 插件可注册并处理流水线事件。使用方法见[组件:事件监听器](/zh/plugin/dev/components/event-listener)。
@@ -10,7 +8,7 @@ LangBot 插件可注册并处理流水线事件。使用方法见[组件:事
某些事件具有`可设置的属性`,这些属性可以被插件代码修改,并在之后被用在 LangBot 后续的处理中。
-### *MessageReceived
+### \*MessageReceived
接收到群聊或私聊任何消息时触发。
@@ -27,7 +25,10 @@ class PersonMessageReceived(BaseEventModel):
"""发送者ID"""
sender_id: typing.Union[int, str]
- """发送者ID"""
+ """发送者ID,私聊情况下与 launcher_id 相同"""
+
+ message_event: platform_events.PersonMessage
+ """原消息事件对象。包含发送者的信息。"""
message_chain: platform_message.MessageChain = pydantic.Field(
serialization_alias="message_chain"
@@ -49,13 +50,16 @@ class GroupMessageReceived(BaseEventModel):
sender_id: typing.Union[int, str]
"""发送者ID"""
+ message_event: platform_events.GroupMessage
+ """原消息事件对象。包含群聊和发送者的信息。"""
+
message_chain: platform_message.MessageChain = pydantic.Field(
serialization_alias="message_chain"
)
"""消息链"""
```
-### *NormalMessageReceived
+### \*NormalMessageReceived
接收到群聊或私聊消息,并判断为需要由 LLM 处理的消息(非命令消息)时触发。
@@ -66,14 +70,20 @@ class PersonNormalMessageReceived(BaseEventModel):
event_name: str = "PersonNormalMessageReceived"
launcher_type: str
+ """发起对象类型(person)"""
launcher_id: typing.Union[int, str]
+ """发起对象ID"""
sender_id: typing.Union[int, str]
+ """发送者ID,私聊情况下与 launcher_id 相同"""
text_message: str
"""消息文本"""
+ message_event: platform_events.PersonMessage
+ """原消息事件对象。包含发送者的信息。"""
+
message_chain: platform_message.MessageChain = pydantic.Field(
serialization_alias="message_chain"
)
@@ -94,14 +104,20 @@ class GroupNormalMessageReceived(BaseEventModel):
event_name: str = "GroupNormalMessageReceived"
launcher_type: str
+ """发起对象类型(group)"""
launcher_id: typing.Union[int, str]
+ """群号"""
sender_id: typing.Union[int, str]
+ """发送者ID"""
text_message: str
"""消息文本"""
+ message_event: platform_events.GroupMessage
+ """原消息事件对象。包含群聊和发送者的信息。"""
+
message_chain: platform_message.MessageChain = pydantic.Field(
serialization_alias="message_chain"
)
@@ -116,11 +132,11 @@ class GroupNormalMessageReceived(BaseEventModel):
"""直接回复消息链,仅在阻止默认行为时生效"""
```
-### *CommandSent
+### \*CommandSent
-:::warning 注意
-不再推荐使用,请改为使用[组件:命令](/zh/plugin/dev/components/command)。
-:::
+
+ 不再推荐使用,请改为使用[组件:命令](/zh/plugin/dev/components/command)。
+
接收到群聊或私聊命令时触发。
@@ -131,10 +147,13 @@ class PersonCommandSent(BaseEventModel):
event_name: str = "PersonCommandSent"
launcher_type: str
+ """发起对象类型(person)"""
launcher_id: typing.Union[int, str]
+ """发起对象ID"""
sender_id: typing.Union[int, str]
+ """发送者ID,私聊情况下与 launcher_id 相同"""
command: str
"""命令文本"""
@@ -155,10 +174,13 @@ class GroupCommandSent(BaseEventModel):
event_name: str = "GroupCommandSent"
launcher_type: str
+ """发起对象类型(group)"""
launcher_id: typing.Union[int, str]
+ """群号"""
sender_id: typing.Union[int, str]
+ """发送者ID"""
command: str
"""命令文本"""
@@ -171,7 +193,6 @@ class GroupCommandSent(BaseEventModel):
is_admin: bool
"""是否为管理员"""
-
```
### NormalMessageResponded
@@ -185,10 +206,13 @@ class NormalMessageResponded(BaseEventModel):
event_name: str = "NormalMessageResponded"
launcher_type: str
+ """发起对象类型(person)"""
launcher_id: typing.Union[int, str]
+ """发起对象ID"""
sender_id: typing.Union[int, str]
+ """发送者ID,私聊情况下与 launcher_id 相同"""
session: provider_session.Session
"""会话对象"""
@@ -222,6 +246,7 @@ class PromptPreProcessing(BaseEventModel):
event_name: str = "PromptPreProcessing"
session_name: str
+ """会话名称,格式为 person_1234567890 或 group_1234567890"""
# ========== 可设置的属性 ==========
@@ -232,7 +257,6 @@ class PromptPreProcessing(BaseEventModel):
prompt: list[typing.Union[provider_message.Message, provider_message.MessageChunk]]
"""此对话现有消息记录,可修改,langbot_plugin.api.entities.builtin.provider.message.Message 或 langbot_plugin.api.entities.builtin.provider.message.MessageChunk 类型"""
-
```
## 事件上下文 API
@@ -246,6 +270,20 @@ class PromptPreProcessing(BaseEventModel):
事件处理方法将被传入`EventContext`对象,该对象包含事件的上下文信息,该对象同时具有[请求 API](/zh/plugin/dev/apis/common)和事件上下文特定 API,以下为事件上下文特定 API 列表:
+### 获取原事件属性
+
+`event_context.event` 属性为原事件对象,可获取原事件的属性。其类型即为监听的事件类型。
+
+例如:当监听的事件是`GroupMessageReceived`时:
+
+```python
+event = event_context.event
+print(event.launcher_type) # 发起对象类型(group)
+print(event.launcher_id) # 群号
+print(event.sender_id) # 发送者账号 ID
+print(event.message_chain) # 消息链
+```
+
### 阻止默认行为
```python
@@ -258,18 +296,15 @@ event_context.prevent_default()
调用该方法后,该事件后续默认行为将被阻止,流水线将直接结束。
-:::info
-仅以下事件可阻止默认行为:
-
-- PersonMessageReceived
-- GroupMessageReceived
-- PersonNormalMessageReceived
-- GroupNormalMessageReceived
-- PersonCommandSent
-- GroupCommandSent
-- NormalMessageResponded
-
-:::
+
+ - PersonMessageReceived
+ - GroupMessageReceived
+ - PersonNormalMessageReceived
+ - GroupNormalMessageReceived
+ - PersonCommandSent
+ - GroupCommandSent
+ - NormalMessageResponded
+
### 阻止后序插件执行
@@ -281,4 +316,4 @@ def prevent_postorder(self):
event_context.prevent_postorder()
```
-调用该方法后,注册了该事件的后序插件此次将不被执行。
+调用该方法后,注册了该事件的后序插件此次将不被执行。
\ No newline at end of file
diff --git a/docs/zh/plugin/dev/apis/tech-details.md b/zh/plugin/dev/apis/tech-details.mdx
similarity index 84%
rename from docs/zh/plugin/dev/apis/tech-details.md
rename to zh/plugin/dev/apis/tech-details.mdx
index 6c59f597d..3e5e04320 100644
--- a/docs/zh/plugin/dev/apis/tech-details.md
+++ b/zh/plugin/dev/apis/tech-details.mdx
@@ -1,11 +1,13 @@
-# 插件技术细节
+---
+title: "插件技术细节"
+---
## 架构
-
+
在 4.0 版本中,我们引入了一种高安全性、高灵活性的生产级插件系统,并为插件开发者提供了丰富的 API 和易用的配套工具。
Plugin Runtime (插件运行时),用于管理插件的生命周期,协调 LangBot 与插件之间的交互。有两种运行模式:`stdio` 和 `websocket`。当 LangBot 是由用户直接启动(未运行在容器内时),会使用 `stdio` 模式,这种场景多为个人用户或轻量级环境。当 LangBot 运行在容器内时,会使用 `websocket` 模式,此场景专为生产级环境设计。
-Plugin Runtime 会自动启动各个已安装的插件,通过 stdio 交互。在插件开发场景中,开发者可以使用 `lbp` 命令行工具启动插件并通过 WebSocket 连接到已启动的 Runtime 进行调试。
\ No newline at end of file
+Plugin Runtime 会自动启动各个已安装的插件,通过 stdio 交互。在插件开发场景中,开发者可以使用 `lbp` 命令行工具启动插件并通过 WebSocket 连接到已启动的 Runtime 进行调试。
diff --git a/docs/zh/plugin/dev/basic-info.md b/zh/plugin/dev/basic-info.mdx
similarity index 96%
rename from docs/zh/plugin/dev/basic-info.md
rename to zh/plugin/dev/basic-info.mdx
index f87c8e4a1..72f1399dd 100644
--- a/docs/zh/plugin/dev/basic-info.md
+++ b/zh/plugin/dev/basic-info.mdx
@@ -1,8 +1,6 @@
-# 完善配置信息
-
-:::info 目录
-[[toc]]
-:::
+---
+title: "完善配置信息"
+---
## 修改清单文件
@@ -180,9 +178,9 @@ print(file_config)
file_bytes = await self.get_config_file(file_key)
```
-::: info
-常见 mimetype 与文件扩展名对应参考:[mdn 文档](https://developer.mozilla.org/zh-CN/docs/Web/HTTP/Guides/MIME_types/Common_types)
-:::
+
+ 常见 mimetype 与文件扩展名对应参考:[mdn 文档](https://developer.mozilla.org/zh-CN/docs/Web/HTTP/Guides/MIME_types/Common_types)
+
### type: array[file]
@@ -241,4 +239,4 @@ print(bot_uuid) # 输出: '550e8400-e29b-41d4-a716-446655440000'
该教程将指引您逐步完善插件功能。
-- 添加组件:插件组件是插件的核心功能单元,您可以根据需求[添加组件](/zh/plugin/dev/components/add)。
+- 添加组件:插件组件是插件的核心功能单元,您可以根据需求[添加组件](/zh/plugin/dev/components/add)。
\ No newline at end of file
diff --git a/docs/zh/plugin/dev/components/add.md b/zh/plugin/dev/components/add.mdx
similarity index 78%
rename from docs/zh/plugin/dev/components/add.md
rename to zh/plugin/dev/components/add.mdx
index 594cf3f23..f6a2c4b30 100644
--- a/docs/zh/plugin/dev/components/add.md
+++ b/zh/plugin/dev/components/add.mdx
@@ -1,10 +1,13 @@
-# 添加组件
+---
+title: "添加组件"
+---
插件由一种或多种组件构成,为 LangBot 提供不同的功能。目前支持的组件类型有:
- 事件监听器(EventListener):监听流水线执行期间的事件,对上下文或流水线进行修改。
- 命令(Command):由用户通过`!`(或其他已设置的前缀)开头的命令消息触发。
- 工具(Tool):供 LangBot 内置的 Local Agent 在执行期间由 LLM 调用。
+- 知识检索器(KnowledgeRetriever):为 LangBot 提供外部知识库检索能力,支持接入各类 RAG 系统。
## 添加组件
@@ -30,8 +33,7 @@ Component EventListener generated successfully.
➜ HelloPlugin >
```
-:::info
-CLI 将在插件目录下生成一个 `components` 目录,并在其中创建组件对应目录
+
```
.
@@ -60,13 +62,14 @@ components:
...
```
如需删除组件,可自行删除对应信息。
-:::
+
## 组件类型
各个组件的详细使用方式请参考:
-- [EventListener](./event-listener.md)
-- [Command](./command.md)
-- [Tool](./tool.md)
\ No newline at end of file
+- [EventListener](./event-listener)
+- [Command](./command)
+- [Tool](./tool)
+- [KnowledgeRetriever](./knowledge-retriever)
diff --git a/docs/zh/plugin/dev/components/command.md b/zh/plugin/dev/components/command.mdx
similarity index 94%
rename from docs/zh/plugin/dev/components/command.md
rename to zh/plugin/dev/components/command.mdx
index d2b699074..5baa7f918 100644
--- a/docs/zh/plugin/dev/components/command.md
+++ b/zh/plugin/dev/components/command.mdx
@@ -1,8 +1,10 @@
-# 组件:命令
+---
+title: "组件:命令"
+---
命令组件由用户通过`!`(或其他已设置的前缀)开头的命令消息触发。如下是命令`!help`的触发示例:
-
+
## 添加命令组件
@@ -53,7 +55,7 @@ execution:
## 插件处理
-默认会生成如下代码(components/command/<命令名称>.py),您需要在`Info`类的`initialize`方法中注册并实现子命令的处理逻辑。
+默认会生成如下代码(`components/command/<命令名称>.py`),您需要在`Info`类的`initialize`方法中注册并实现子命令的处理逻辑。
```python
# Auto generated by LangBot Plugin SDK.
@@ -136,7 +138,7 @@ class Info(Command):
上述命令效果如图:
-
+
### 命令上下文
diff --git a/docs/zh/plugin/dev/components/event-listener.md b/zh/plugin/dev/components/event-listener.mdx
similarity index 97%
rename from docs/zh/plugin/dev/components/event-listener.md
rename to zh/plugin/dev/components/event-listener.mdx
index ae8df207a..6aaa8aad3 100644
--- a/docs/zh/plugin/dev/components/event-listener.md
+++ b/zh/plugin/dev/components/event-listener.mdx
@@ -1,4 +1,6 @@
-# 组件:事件监听器
+---
+title: "组件:事件监听器"
+---
LangBot 的流水线在运行期间会产生一些事件,供插件 Hook 并处理。每个插件中只允许添加一个事件监听器(components/event_listener/default.yaml),但在其中可以注册任意数量的事件。
@@ -98,4 +100,4 @@ class EventContext(pydantic.BaseModel):
您已经了解了事件监听器的基本信息,接下来可以:
- 在文档[流水线事件](/zh/plugin/dev/apis/pipeline-events)中查看`可监听的事件列表`和`事件上下文 API`
-- 查看[插件通用 API](/zh/plugin/dev/apis/common)
\ No newline at end of file
+- 查看[插件通用 API](/zh/plugin/dev/apis/common)
diff --git a/zh/plugin/dev/components/knowledge-retriever.mdx b/zh/plugin/dev/components/knowledge-retriever.mdx
new file mode 100644
index 000000000..060cc220d
--- /dev/null
+++ b/zh/plugin/dev/components/knowledge-retriever.mdx
@@ -0,0 +1,267 @@
+---
+title: "组件:知识检索器"
+---
+
+知识检索器(Knowledge Retriever)组件允许插件为 LangBot 提供外部知识库检索能力。当用户在 LangBot 中创建外部知识库时,可以选择由插件提供的知识检索器来检索知识。
+
+
+
+## 添加知识检索器组件
+
+单个插件中能添加任意数量的知识检索器,请在插件目录执行命令`lbp comp KnowledgeRetriever`,并根据提示输入知识检索器的配置。
+
+```bash
+➜ FastGPTRetriever > lbp comp KnowledgeRetriever
+Generating component KnowledgeRetriever...
+KnowledgeRetriever name: fastgpt
+KnowledgeRetriever description: Retrieve knowledge from FastGPT knowledge bases
+Component KnowledgeRetriever generated successfully.
+组件 KnowledgeRetriever 生成成功。
+```
+
+现在即会在`components/knowledge_retriever/`目录下生成`fastgpt.yaml`和`fastgpt.py`文件,`.yaml`定义了知识检索器的基础信息和配置参数,`.py`是该知识检索器的处理程序:
+
+```bash
+➜ FastGPTRetriever > tree
+...
+├── components
+│ ├── __init__.py
+│ └── knowledge_retriever
+│ ├── __init__.py
+│ ├── fastgpt.py
+│ └── fastgpt.yaml
+...
+```
+
+## 清单文件:知识检索器
+
+```yaml
+apiVersion: v1 # 请勿修改
+kind: KnowledgeRetriever # 请勿修改
+metadata:
+ name: fastgpt # 知识检索器名称,用于标识该检索器
+ label:
+ en_US: FastGPT Knowledge Base # 检索器显示名称,用于显示在 LangBot 的 UI 上,支持多语言
+ zh_Hans: FastGPT 知识库
+ ja_JP: FastGPT ナレッジベース
+ description:
+ en_US: 'Retrieve knowledge from FastGPT knowledge bases' # 检索器描述,用于显示在 LangBot 的 UI 上,支持多语言。可选
+ zh_Hans: '从 FastGPT 知识库中检索知识'
+ ja_JP: 'FastGPT ナレッジベースから知識を取得'
+ icon: assets/icon.svg # 检索器图标,会被展示在外部知识库配置页面
+spec:
+ config: # 检索器配置参数,用户在创建外部知识库时需要填写这些参数
+ - name: api_base_url # 参数名称
+ type: string # 参数类型:string, number, boolean, select
+ label:
+ en_US: API Base URL
+ zh_Hans: API 基础地址
+ ja_JP: API ベース URL
+ description:
+ en_US: 'Base URL for FastGPT API'
+ zh_Hans: 'FastGPT API 基础地址'
+ ja_JP: 'FastGPT API ベース URL'
+ default: 'http://localhost:3000' # 参数默认值
+ required: true # 是否必填
+ - name: api_key
+ type: string
+ label:
+ en_US: FastGPT API Key
+ zh_Hans: FastGPT API Key
+ ja_JP: FastGPT API キー
+ description:
+ en_US: 'API key from your FastGPT instance'
+ zh_Hans: '从您的 FastGPT 实例获取的 API Key'
+ ja_JP: 'FastGPT インスタンスから取得した API Key'
+ default: ''
+ required: true
+ - name: search_mode # select 类型参数示例
+ type: select
+ label:
+ en_US: Search Mode
+ zh_Hans: 搜索模式
+ ja_JP: 検索モード
+ description:
+ en_US: 'The search method to use'
+ zh_Hans: '使用的搜索方法'
+ ja_JP: '使用する検索方法'
+ default: 'embedding'
+ options: # select 类型参数需要定义选项列表
+ - name: 'embedding'
+ label:
+ en_US: 'Embedding Search'
+ zh_Hans: '向量搜索'
+ ja_JP: '埋め込み検索'
+ - name: 'fullTextRecall'
+ label:
+ en_US: 'Full-Text Recall'
+ zh_Hans: '全文检索'
+ ja_JP: '全文検索'
+ - name: using_rerank # boolean 类型参数示例
+ type: boolean
+ label:
+ en_US: Use Re-ranking
+ zh_Hans: 使用重排序
+ ja_JP: リランキングを使用
+ description:
+ en_US: 'Whether to use re-ranking'
+ zh_Hans: '是否使用重排序'
+ ja_JP: 'リランキングを使用するかどうか'
+ default: false
+ required: false
+execution:
+ python:
+ path: fastgpt.py # 检索器处理程序,请勿修改
+ attr: FastGPT # 检索器处理程序的类名,与 fastgpt.py 中的类名一致
+```
+
+配置项格式可参考:[插件清单配置项格式](/zh/plugin/dev/basic-info)
+
+## 插件处理
+
+默认会生成如下代码(`components/knowledge_retriever/<检索器名称>.py`),您需要在`FastGPT`类的`retrieve`方法中实现知识检索逻辑。完整代码可在[langbot-plugin-demo](https://github.com/langbot-app/langbot-plugin-demo)中找到。
+
+```python
+# Auto generated by LangBot Plugin SDK.
+# Please refer to https://docs.langbot.app/en/plugin/dev/tutor.html for more details.
+...
+
+class FastGPT(KnowledgeRetriever):
+
+ async def retrieve(self, context: RetrievalContext) -> list[RetrievalResultEntry]:
+ """Retrieve knowledge from FastGPT knowledge base"""
+
+ # 1. 获取配置参数
+ api_base_url = self.config.get('api_base_url', 'http://localhost:3000')
+ api_key = self.config.get('api_key')
+ dataset_id = self.config.get('dataset_id')
+ search_mode = self.config.get('search_mode', 'embedding')
+ using_rerank = self.config.get('using_rerank', False)
+
+ # 2. 参数验证
+ if not api_key or not dataset_id:
+ logger.error("Missing required configuration: api_key or dataset_id")
+ return []
+
+ # 3. 构建 API 请求
+ url = f"{api_base_url.rstrip('/')}/api/core/dataset/searchTest"
+ headers = {
+ "Authorization": f"Bearer {api_key}",
+ "Content-Type": "application/json"
+ }
+ payload = {
+ "datasetId": dataset_id,
+ "text": context.query, # 从 RetrievalContext 获取查询文本
+ "searchMode": search_mode,
+ "usingReRank": using_rerank,
+ }
+
+ try:
+ # 4. 调用外部 API
+ async with httpx.AsyncClient() as client:
+ response = await client.post(url, json=payload, headers=headers, timeout=30.0)
+ response.raise_for_status()
+ result = response.json()
+
+ # 5. 解析响应并转换为 RetrievalResultEntry
+ results = []
+ for record in result.get('data', []):
+ # 合并主要数据和辅助数据作为内容
+ content_text = '\n'.join([
+ record.get('q', ''),
+ record.get('a', '')
+ ]).strip()
+
+ # 创建检索结果条目
+ entry = RetrievalResultEntry(
+ id=record.get('id', ''),
+ content=[ContentElement.from_text(content_text)],
+ metadata={
+ 'dataset_id': record.get('datasetId', ''),
+ 'source_name': record.get('sourceName', ''),
+ 'score': record.get('score', 0.0),
+ },
+ # 将相似度分数转换为距离(分数越高,距离越小)
+ distance=1.0 - float(record.get('score', 0.0)),
+ )
+ results.append(entry)
+
+ logger.info(f"Retrieved {len(results)} chunks from FastGPT dataset {dataset_id}")
+ return results
+
+ except httpx.HTTPStatusError as e:
+ logger.error(f"HTTP error from FastGPT API: {e.response.status_code} - {e.response.text}")
+ return []
+ except httpx.RequestError as e:
+ logger.error(f"Request error when calling FastGPT API: {str(e)}")
+ return []
+ except Exception as e:
+ traceback.print_exc()
+ logger.error(f"Unexpected error during retrieval: {str(e)}")
+ return []
+```
+
+### 检索上下文
+
+`RetrievalContext` 包含本次检索的上下文信息:
+
+```python
+class RetrievalContext(pydantic.BaseModel):
+ """知识检索上下文"""
+
+ query: str
+ """查询文本,用户的检索问题"""
+```
+
+### 检索结果
+
+检索结果需要转换为 `RetrievalResultEntry` 对象列表,每个对象代表一个检索到的知识块:
+
+```python
+class RetrievalResultEntry(pydantic.BaseModel):
+ """单个检索结果条目"""
+
+ id: str
+ """结果 ID,唯一标识此条目"""
+
+ content: list[ContentElement]
+ """结果内容,使用 ContentElement.from_text() 创建文本内容"""
+
+ metadata: dict[str, Any]
+ """结果元数据,可以包含任意键值对,如来源、分数等"""
+
+ distance: float
+ """距离分数,表示与查询的相关度(越小越相关)
+ 通常通过 1.0 - similarity_score 计算"""
+```
+
+### 获取配置参数
+
+通过 `self.config.get(参数名, 默认值)` 获取用户配置的参数值:
+
+```python
+# 获取字符串参数
+api_base_url = self.config.get('api_base_url', 'http://localhost:3000')
+
+# 获取数字参数
+limit = self.config.get('limit', 5000)
+similarity = self.config.get('similarity', 0.0)
+
+# 获取布尔参数
+using_rerank = self.config.get('using_rerank', False)
+
+# 获取 select 参数
+search_mode = self.config.get('search_mode', 'embedding')
+```
+
+## 测试检索器
+
+创建完成后,在插件目录执行命令 `lbp run`,启动调试。然后在 LangBot 中:
+
+1. 进入"知识库"页面
+2. 添加外部知识库
+3. 选择您的插件提供的知识检索器并填写配置
+
+
+
+保存后即可在 LangBot 流水线中选用该知识库。
diff --git a/docs/zh/plugin/dev/components/tool.md b/zh/plugin/dev/components/tool.mdx
similarity index 94%
rename from docs/zh/plugin/dev/components/tool.md
rename to zh/plugin/dev/components/tool.mdx
index e877c94e7..a35f7d795 100644
--- a/docs/zh/plugin/dev/components/tool.md
+++ b/zh/plugin/dev/components/tool.mdx
@@ -1,4 +1,6 @@
-# 组件:工具
+---
+title: "组件:工具"
+---
LangBot 内置的 Local Agent 在执行期间会根据场景调用工具以与外界交互,目前支持通过插件和 MCP 两种方式添加工具。
@@ -53,7 +55,7 @@ execution:
## 插件处理
-默认会生成如下代码(components/tools/<工具名称>.py),您需要在`GetWeatherAlerts`类的`call`方法中实现此工具的调用和返回逻辑。
+默认会生成如下代码(`components/tools/<工具名称>.py`),您需要在`GetWeatherAlerts`类的`call`方法中实现此工具的调用和返回逻辑。
```python
# Auto generated by LangBot Plugin SDK.
@@ -75,9 +77,9 @@ class GetWeatherAlerts(Tool):
在 `call` 方法中,实现该工具:
-:::info
+
天气获取工具用例来自 MCP 的 [Server 编写示例](https://modelcontextprotocol.io/quickstart/server)。
-:::
+
```python
from __future__ import annotations
@@ -166,10 +168,10 @@ httpx
现在在插件目录执行命令`lbp run`,启动调试。在 LangBot 中配置支持工具调用的模型,并在对应流水线上选择使用该模型,即可使用该工具。
-
+
## 接下来做什么
您已经了解了工具的基本用法,接下来可以:
-- 查看[插件通用 API](/zh/plugin/dev/apis/common)
\ No newline at end of file
+- 查看[插件通用 API](/zh/plugin/dev/apis/common)
diff --git a/docs/zh/plugin/dev/directory-structure.md b/zh/plugin/dev/directory-structure.mdx
similarity index 90%
rename from docs/zh/plugin/dev/directory-structure.md
rename to zh/plugin/dev/directory-structure.mdx
index c4d050e2d..7d70e0663 100644
--- a/docs/zh/plugin/dev/directory-structure.md
+++ b/zh/plugin/dev/directory-structure.mdx
@@ -1,8 +1,6 @@
-# 插件目录规范
-
-:::info 目录
-[[toc]]
-:::
+---
+title: "插件目录规范"
+---
本文介绍 LangBot 插件的标准目录结构和文件组织规范,帮助开发者创建符合规范的插件。
@@ -38,12 +36,11 @@ LangBot 插件支持多语言 README 文档,以便为不同语言的用户提
**重要规范:**
-1. **根目录 `README.md`(必需)**
+1. **`根目录 README.md(必需)`**
- 必须使用**英文**编写
- 作为插件的默认说明文档
- 当请求的语言版本不存在时,将回退到此文档
-
-2. **`readme/` 目录(可选)**
+2. **`readme/ 目录(可选)`**
- 用于存放**非英文**的 README 文档
- 文件命名格式:`README_{语言代码}.md`
@@ -51,12 +48,12 @@ LangBot 插件支持多语言 README 文档,以便为不同语言的用户提
根据 [RFC 4646](https://datatracker.ietf.org/doc/html/rfc4646) 标准,LangBot 目前支持以下语言代码:
-| 语言 | 语言代码 | 文件名 | 位置 |
-|------|----------|--------|------|
-| 英文 | `en` 或 `en_US` | `README.md` | **插件根目录** |
-| 简体中文 | `zh_Hans` | `README_zh_Hans.md` | `readme/` 目录 |
-| 繁体中文 | `zh_Hant` | `README_zh_Hant.md` | `readme/` 目录 |
-| 日语 | `ja_JP` | `README_ja_JP.md` | `readme/` 目录 |
+| 语言 | 语言代码 | 文件名 | 位置 |
+| ---- | -------------- | ------------------- | ------------ |
+| 英文 | `en` 或 `en_US` | `README.md` | **插件根目录** |
+| 简体中文 | `zh_Hans` | `README_zh_Hans.md` | `readme/` 目录 |
+| 繁体中文 | `zh_Hant` | `README_zh_Hant.md` | `readme/` 目录 |
+| 日语 | `ja_JP` | `README_ja_JP.md` | `readme/` 目录 |
### 示例目录结构
@@ -102,7 +99,6 @@ This is a plugin...
- 用户请求简体中文(`zh_Hans`)
- → 查找 `readme/README_zh_Hans.md`
- → 如果不存在,返回 `README.md`(英文版)
-
- 用户请求日语(`ja_JP`)
- → 查找 `readme/README_ja_JP.md`
- → 如果不存在,返回 `README.md`(英文版)
@@ -188,4 +184,4 @@ pillow>=9.0.0
- [基础教程](/zh/plugin/dev/tutor) - 了解如何创建第一个插件
- [完善配置信息](/zh/plugin/dev/basic-info) - 配置 manifest.yaml
- [添加组件](/zh/plugin/dev/components/add) - 开发插件组件
-- [发布到插件市场](/zh/plugin/dev/publish/market) - 分发你的插件
+- [发布到插件市场](/zh/plugin/dev/publish/market) - 分发你的插件
\ No newline at end of file
diff --git a/docs/zh/plugin/dev/migration.md b/zh/plugin/dev/migration.mdx
similarity index 90%
rename from docs/zh/plugin/dev/migration.md
rename to zh/plugin/dev/migration.mdx
index f196ee6d0..164cf0637 100644
--- a/docs/zh/plugin/dev/migration.md
+++ b/zh/plugin/dev/migration.mdx
@@ -1,14 +1,15 @@
-# 迁移指南
+---
+title: "迁移指南"
+---
本教程高亮了某些注意事项,请各位插件开发者在已阅读现版本插件教程后,再以此文档作为参考进行插件迁移。
## 从 3.x 支持的异步插件迁移
-:::info
-插件特征:
+
- 主要时间段:2024.2 ~ 2025.8
- 注册方式:`main.py` 中的插件类中使用 `@handler` 装饰器注册事件监听器、使用 `@llm_func` 装饰器注册内容函数(工具);处理函数均为异步函数(async def)
-:::
+
- 插件和组件注册方式:已由以往的单一插件类中的装饰器注册方式,改为了清单文件注册方式,参阅[清单文件](/zh/plugin/dev/basic-info);并将各个不同类型的组件独立出来,详细请见[添加组件](/zh/plugin/dev/components/add)。
- 消息链实体:现已重构,每个消息链元素的构造方法现在需要显式传入**具名参数**,参阅[消息平台实体](/zh/plugin/dev/apis/messages)。
@@ -17,11 +18,10 @@
## 从 2.x 和 3.x 支持的同步插件迁移
-:::info
-插件特征:
+
- 主要时间段:2023.1 ~ 2024.2
- 注册方式:`main.py` 中的插件类中使用 `@on` 装饰器注册事件监听器、使用 `@func` 装饰器注册内容函数(工具);处理函数均为同步函数(def)
-:::
+
- 同步改异步:插件运行时现已改为全异步(基于asyncio),请将插件所有涉及 IO 操作的代码改为异步写法。
-- 详细内容请参阅上述 3.x 异步插件迁移指南。
\ No newline at end of file
+- 详细内容请参阅上述 3.x 异步插件迁移指南。
diff --git a/docs/zh/plugin/dev/publish/github.md b/zh/plugin/dev/publish/github.mdx
similarity index 78%
rename from docs/zh/plugin/dev/publish/github.md
rename to zh/plugin/dev/publish/github.mdx
index f68ade06f..fcd6fcfc4 100644
--- a/docs/zh/plugin/dev/publish/github.md
+++ b/zh/plugin/dev/publish/github.mdx
@@ -1,4 +1,6 @@
-# 通过 GitHub 分发插件
+---
+title: "通过 GitHub 分发插件"
+---
您可以将您的插件上传至 GitHub ,为仓库创建 Release 并上传 `.lbpkg` 文件,其他用户即可在 LangBot 上安装。
@@ -16,8 +18,8 @@ lbp build
请将该插件上传 GitHub,并前往插件仓库的 Release 页面,点击创建 Release,并上传刚刚打包的`.lbpkg`文件。
-
+
## 安装插件
-请在 LangBot 的插件管理页面,点击右上角即可选择 GitHub 安装方式。
\ No newline at end of file
+请在 LangBot 的插件管理页面,点击右上角即可选择 GitHub 安装方式。
diff --git a/docs/zh/plugin/dev/publish/market.md b/zh/plugin/dev/publish/market.mdx
similarity index 88%
rename from docs/zh/plugin/dev/publish/market.md
rename to zh/plugin/dev/publish/market.mdx
index 0f6624bc8..866552705 100644
--- a/docs/zh/plugin/dev/publish/market.md
+++ b/zh/plugin/dev/publish/market.mdx
@@ -1,4 +1,6 @@
-# 发布插件到插件市场
+---
+title: "发布插件到插件市场"
+---
通过 CLI 将插件发布至 [LangBot 插件市场](https://space.langbot.app/market)。
@@ -6,7 +8,7 @@
LangBot Space 是 LangBot 提供中心化服务平台。请访问[LangBot Space](https://space.langbot.app),点击右上角使用 GitHub 登录并创建账号。
-
+
这将跳转到 GitHub 授权页面,请根据提示完成授权。
@@ -31,7 +33,7 @@ Waiting for verification...
请点击`Verification URL`跳转至 LangBot Space,输入`User Code`完成登录。
-
+
```bash
==================================================
@@ -60,6 +62,6 @@ Plugin built successfully: dist/tmp/RockChinQ-HelloPlugin-0.1.0.lbpkg
您现在可以在[LangBot 插件市场](https://space.langbot.app/market)查看您的插件提交任务。请等待审核通过后,您可以在插件市场查看您的插件。
-
+
有任何问题,您可以发送邮件到`hello@langbot.app`或通过[社区](/zh/insight/community)联系我们。
diff --git a/zh/plugin/dev/style.mdx b/zh/plugin/dev/style.mdx
new file mode 100644
index 000000000..2a8ced43f
--- /dev/null
+++ b/zh/plugin/dev/style.mdx
@@ -0,0 +1,17 @@
+---
+title: "代码规范指南"
+---
+
+## 日志记录
+
+在插件中请使用`logging`模块记录日志,不要使用`print`语句(这将导致容器环境中无法输出日志)。
+
+```python
+import logging
+
+logger = logging.getLogger(__name__) # 在任何 Python 文件的开头导入 logging 模块,并定义 logger 对象
+
+logger.info('This is an info message') # 使用 logger.info 记录信息级别日志
+logger.warning('This is a warning message')
+logger.error('This is an error message')
+```
diff --git a/docs/zh/plugin/dev/tutor.md b/zh/plugin/dev/tutor.mdx
similarity index 86%
rename from docs/zh/plugin/dev/tutor.md
rename to zh/plugin/dev/tutor.mdx
index c11f8dfea..e7b6d2b3d 100644
--- a/docs/zh/plugin/dev/tutor.md
+++ b/zh/plugin/dev/tutor.mdx
@@ -1,10 +1,12 @@
-# 插件开发教程
+---
+title: "插件开发教程"
+---
## 架构基础
在 4.0 版本中,我们引入了一种高安全性、高灵活性的生产级插件系统,并为插件开发者提供了丰富的 API 和易用的配套工具。
-
+
Plugin Runtime (插件运行时),用于管理插件的生命周期,协调 LangBot 与插件之间的交互。有两种运行模式:`stdio` 和 `websocket`。当 LangBot 是由用户直接启动(未运行在容器内时),会使用 `stdio` 模式,这种场景多为个人用户或轻量级环境。当 LangBot 运行在容器内时,会使用 `websocket` 模式,此场景专为生产级环境设计。
@@ -43,11 +45,14 @@ main.py 中的插件类是每个插件通用的代码,在插件被启动时会
各个组件是您插件的核心功能模块,可以根据需要[添加和删除组件](/zh/plugin/dev/components/add)。不同的组件会在不同的情况下被调用,这种设计方便后续扩展插件功能。各个组件均直接继承于`langbot_plugin.api.definition.components`包下的各个组件基类,并在其中包含`plugin: BasePlugin`对象,您可直接调用插件的 API。
-::: info
-- 详细的 API 说明请参考[API 参考](/zh/plugin/dev/apis/common)。
+
请您继续阅读本页教程,了解插件的开发流程。
-:::
+
+
+## AI 辅助开发
+
+- [skills-LangBotplugin](https://github.com/TyperBody/skills-LangBotplugin) - 来自社区成员 [@TyperBody](https://github.com/TyperBody) 贡献的 Skills,使用 AI 快速开发插件,欢迎体验
## 安装 CLI
@@ -69,16 +74,14 @@ lbp init
按照提示输入`Author(作者)`、`Description(描述)`等信息
-:::info
-您也可以使用`lbp init HelloPlugin`命令,在子目录`HelloPlugin`中初始化插件。
+
-
-:::
+
+
此操作将生成插件的初始文件。您现在可以在您喜爱的编辑器中打开 `HelloPlugin` 目录,开始编写插件代码。
-:::info
-若提示找不到 `lbp` 命令,可能是由于您未正确设置 `PATH` 环境变量。
+
可使用`python -m langbot_plugin.cli.__init__`替代`lbp`命令。
例如:
@@ -87,14 +90,13 @@ lbp init
python -m langbot_plugin.cli.__init__ init HelloPlugin
cd HelloPlugin
```
-:::
+
## 启动调试
您需要先部署并启动 LangBot,确保 Plugin Runtime 正在运行并监听 `5401` 端口。
-::: info
-Runtime 有两种启动方式:
+
- `Stdio` 模式:当您使用源代码启动 LangBot 并未携带启动参数`--standalone-runtime`时,LangBot 会自动以子进程的形式启动 Plugin Runtime,并通过 `stdio`(标准输入输出流)模式与 Plugin Runtime 通信。此时 Runtime 会加载 LangBot 根目录的`data/plugins`目录下的插件。并监听 LangBot 运行主机的`5401`端口作为调试端口。
@@ -105,7 +107,7 @@ Runtime 有两种启动方式:
无论是`stdio`或`websocket`模式,Plugin Runtime 都会监听其所在的主机的`5401`端口作为调试端口供插件调试时连接。
当您在开发插件时,推荐您按照[开发配置](/zh/develop/dev-config)中的方式 LangBot,此方式将以 Stdio 形式启动 Plugin Runtime,便于插件开发。
-:::
+
复制插件目录下的`.env.example`文件为`.env`,检查或修改`DEBUG_RUNTIME_WS_URL`为您的 Plugin Runtime 的 WebSocket 地址。
@@ -119,11 +121,11 @@ cp .env.example .env
lbp run
```
-
+
并可以在 LangBot 的 WebUI 中看到此插件已被加载。
-
+
## 接下来做什么
diff --git a/docs/zh/plugin/plugin-intro.md b/zh/plugin/plugin-intro.mdx
similarity index 76%
rename from docs/zh/plugin/plugin-intro.md
rename to zh/plugin/plugin-intro.mdx
index f4f8de7e8..c994a629f 100644
--- a/docs/zh/plugin/plugin-intro.md
+++ b/zh/plugin/plugin-intro.mdx
@@ -1,10 +1,12 @@
-# LangBot 插件
+---
+title: "LangBot 插件"
+---
LangBot 内部由多种组件组成,如大模型工具、命令、消息平台适配器、大模型请求器等。为了满足扩展性和灵活性的需求,我们实现了一套生产级的插件系统。
每个插件被运行在独立的进程中,由 Plugin Runtime 统一管理。
-
+
## 插件结构
@@ -13,6 +15,7 @@ LangBot 内部由多种组件组成,如大模型工具、命令、消息平台
- 事件处理器:监听流水线执行期间的事件,对上下文或流水线进行修改。
- 命令:由用户通过`!`(或其他已设置的前缀)开头的命令消息触发。
- 工具:供 LangBot 内置的 Local Agent 在执行期间由 LLM 调用。
+- 知识检索器:用于从外部知识库中检索相关知识。
后续还将支持更多组件的插件化。
@@ -21,17 +24,17 @@ LangBot 内部由多种组件组成,如大模型工具、命令、消息平台
目前支持上传插件包安装、从插件市场安装以及从 GitHub Release 安装插件。
在 LangBot 的插件管理页面,点击右上角即可选择安装方式
-
+
点击本地安装,选择他人分享的或从 Marketplace 下载的`.lbpkg`文件,即可安装插件。
或点击插件市场 Tab,选择插件后点击安装。
-
+
安装插件后,您需要到流水线配置中,选择所需要使用的插件。
-
+
## 插件管理
@@ -39,13 +42,13 @@ LangBot 内部由多种组件组成,如大模型工具、命令、消息平台
某些插件可能会要求您填入特定的配置项(请参考插件 README 说明),请点击插件卡片进入插件详情页,按照提示获取并输入。
-
+
### 更新插件
仅支持更新从插件市场安装的插件。
-
+
## 插件市场
diff --git a/docs/zh/tags/readme.md b/zh/tags/readme.mdx
similarity index 79%
rename from docs/zh/tags/readme.md
rename to zh/tags/readme.mdx
index 4a471f90b..2df01f875 100644
--- a/docs/zh/tags/readme.md
+++ b/zh/tags/readme.mdx
@@ -1,21 +1,23 @@
-# Service API 概述
+---
+title: "Service API 概述"
+---
LangBot 提供了一套供外部服务使用的 API 接口,便于集成。这些接口以 API Key 鉴权,是目前 HTTP API 的子集。要查看前后端通信的 API 文档,请前往[开发](/zh/develop/dev-config)部分。
-::: warning
+
Service API 目前处于 Beta 阶段,部分接口可能会频繁变动。
-:::
+
## 获取 API Key
点击 WebUI 侧栏的`API Keys`按钮,创建一个 API Key。
-
+
创建后,复制 API Key 并保存。
-
+
## 使用 API
-左侧列出了所有可用的 API,您可以填入您的实例地址(后端开放的端口地址,默认为 `http://localhost:5300`)和 API Key,然后点击`Try it out`按钮即可调用 API。
\ No newline at end of file
+左侧列出了所有可用的 API,您可以填入您的实例地址(后端开放的端口地址,默认为 `http://localhost:5300`)和 API Key,然后点击`Try it out`按钮即可调用 API。
diff --git a/zh/tags/webhook.mdx b/zh/tags/webhook.mdx
new file mode 100644
index 000000000..9f864c7b7
--- /dev/null
+++ b/zh/tags/webhook.mdx
@@ -0,0 +1,106 @@
+---
+title: "Webhooks"
+---
+
+Webhooks 允许您将机器人收到的消息事件发送到外部服务进行处理。
+
+## 配置 Webhook
+
+1. 在 LangBot WebUI 中,点击侧边栏的 "API 集成" 按钮
+2. 切换到 "Webhooks" 标签页
+3. 点击 "+" 按钮创建新的 Webhook
+4. 填写以下信息:
+ - **名称**:Webhook 的名称
+ - **URL**:接收事件的目标 URL
+ - **描述**:可选说明
+ - **状态**:启用或禁用
+
+## 事件格式
+
+### 个人消息 (bot.person_message)
+
+```json
+{
+ "uuid": "event-unique-id",
+ "event_type": "bot.person_message",
+ "data": {
+ "bot_uuid": "bot-uuid",
+ "adapter_name": "AdapterName",
+ "sender": {
+ "id": "user-id",
+ "name": "User Name"
+ },
+ "message": [
+ {
+ "type": "Plain",
+ "text": "消息内容"
+ }
+ ],
+ "timestamp": 1234567890
+ }
+}
+```
+
+### 群组消息 (bot.group_message)
+
+```json
+{
+ "uuid": "event-unique-id",
+ "event_type": "bot.group_message",
+ "data": {
+ "bot_uuid": "bot-uuid",
+ "adapter_name": "AdapterName",
+ "group": {
+ "id": "group-id",
+ "name": "Group Name"
+ },
+ "sender": {
+ "id": "user-id",
+ "name": "User Name"
+ },
+ "message": [
+ {
+ "type": "Plain",
+ "text": "消息内容"
+ }
+ ],
+ "timestamp": 1234567890
+ }
+}
+```
+
+## 响应格式
+
+Webhook 服务应返回 JSON 响应:
+
+```json
+{
+ "status": "ok",
+ "skip_pipeline": false
+}
+```
+
+### 参数说明
+
+- **status**: 处理状态(建议返回 "ok")
+- **skip_pipeline**: 是否跳过 LangBot 流水线处理
+ - `true`: 消息不会继续在流水线中处理
+ - `false`: 消息正常进入流水线处理
+
+
+`skip_pipeline` 允许您完全接管消息处理。设置为 `true` 时,消息只由 Webhook 服务处理,不触发 LangBot 的 AI 对话功能。
+
+
+## 集成示例
+
+### Dify 工作流
+
+使用 [dify-plugin-langbot-trigger](https://github.com/langbot-app/dify-plugin-langbot-trigger) 插件接收 LangBot webhook 事件,在 Dify 中创建工作流处理消息。
+
+## 注意事项
+
+- Webhook URL 必须可访问
+- 请求超时时间为 15 秒
+- 请求失败不影响消息正常处理
+- 支持配置多个 Webhook 并行执行
+- 任一 Webhook 返回 `skip_pipeline: true` 时跳过流水线处理
diff --git a/docs/zh/tob/contact.md b/zh/tob/contact.mdx
similarity index 67%
rename from docs/zh/tob/contact.md
rename to zh/tob/contact.mdx
index 3fe11acd4..403cf3a40 100644
--- a/docs/zh/tob/contact.md
+++ b/zh/tob/contact.mdx
@@ -1,6 +1,9 @@
-# 咨询方式
-
-作者长期提供定制服务,欢迎咨询:
-
-- 微信:junyan_qin
+---
+title: "咨询方式"
+hidden: true
+---
+
+作者长期提供定制服务,欢迎咨询:
+
+- 微信:junyan_qin
- QQ:1010553892
\ No newline at end of file
diff --git a/docs/zh/tob/index.md b/zh/tob/index.mdx
similarity index 74%
rename from docs/zh/tob/index.md
rename to zh/tob/index.mdx
index 2d4065434..5b958bffe 100644
--- a/docs/zh/tob/index.md
+++ b/zh/tob/index.mdx
@@ -1,5 +1,7 @@
-# 规模使用和商用指南
-
-LangBot 已经具备了一定的生产能力,目前已在多家公司的生产环境运行并承担一定的业务。我们相信您非常重视合规性和稳定性方面的问题,此章节将基于一些已有的案例讲解商用最佳实践。
-
-请点击左侧目录查看具体内容。
\ No newline at end of file
+---
+title: "规模使用和商用指南"
+---
+
+LangBot 已经具备了一定的生产能力,目前已在多家公司的生产环境运行并承担一定的业务。我们相信您非常重视合规性和稳定性方面的问题,此章节将基于一些已有的案例讲解商用最佳实践。
+
+请点击左侧目录查看具体内容。
diff --git a/docs/zh/tob/platform.md b/zh/tob/platform.mdx
similarity index 83%
rename from docs/zh/tob/platform.md
rename to zh/tob/platform.mdx
index 3a8fa0a69..21c3a5cfe 100644
--- a/docs/zh/tob/platform.md
+++ b/zh/tob/platform.mdx
@@ -1,33 +1,29 @@
-# 消息平台稳定性
-
-:::info 目录
-[[toc]]
-:::
-
-主流的机器人都是使用`逆向工程`的方式,破解QQ的通信协议,实现程序控制的功能。这种方式具有一定的灰色性质,可能会被腾讯系统风控。
-
-目前的案例来看,现有的逆向工程可以实现多个月的较稳定运行,服务宕机恢复不会超过24小时,有完善的社区支持,可以较好地应对商业用途。
-
-## 降低被风控风险
-
-- 在配置文件中启用`强制消息延迟`、`请求限速功能`,使机器人回复用户消息的速度降低,减少被风控的风险。
-
-- 避免将机器人放到人员复杂的大群里使用。这个一般不会出问题,有过在3000人大群稳定运行近一年的案例。但若是群内人员频繁举报机器人账号,可能会被风控。
-
-- 使用境内主机或家用网络的电脑运行消息平台,尽量不使用境外主机。
-
-## 机器人服务多开
-
-如果机器人的业务与账号本身弱相关,可以考虑开启多个`消息平台`(例如使用两个账号登录两个Lagrange实例),在一个机器人被腾讯封号后,另一个机器人还可以继续服务。
-
-## 使用 QQ 官方机器人 API
-
-腾讯官方在23年下半年开放了Q群机器人API,LangBot 很好地支持这个 API,可以查看部署教程中的配置方式使用。
-
-但 QQ 官方机器人API具有以下已知的局限性:
-
-- 需要企业资质才能申请
-- 仅支持群内使用,不支持私聊
-- 仅能接收到群内@机器人的消息,无法接收到群内其他消息
-- 主动发送消息每天限次
+---
+title: "消息平台稳定性"
+---
+
+主流的 QQ、微信机器人都是使用`逆向工程`的方式,破解QQ的通信协议,实现程序控制的功能。这种方式具有一定的灰色性质,可能会被腾讯系统风控。
+
+目前的案例来看,现有的逆向工程可以实现多个月的较稳定运行,服务宕机恢复不会超过24小时,有完善的社区支持,可以较好地应对商业用途。
+
+## 降低被风控风险
+
+- 在配置文件中启用`强制消息延迟`、`请求限速功能`,使机器人回复用户消息的速度降低,减少被风控的风险。
+- 避免将机器人放到人员复杂的大群里使用。这个一般不会出问题,有过在3000人大群稳定运行近一年的案例。但若是群内人员频繁举报机器人账号,可能会被风控。
+- 使用境内主机或家用网络的电脑运行消息平台,尽量不使用境外主机。
+
+## 机器人服务多开
+
+如果机器人的业务与账号本身弱相关,可以考虑开启多个`消息平台`(例如使用两个账号登录两个Lagrange实例),在一个机器人被腾讯封号后,另一个机器人还可以继续服务。
+
+## 使用 QQ 官方机器人 API
+
+腾讯官方在23年下半年开放了Q群机器人API,LangBot 很好地支持这个 API,可以查看部署教程中的配置方式使用。
+
+但 QQ 官方机器人API具有以下已知的局限性:
+
+- 需要企业资质才能申请
+- 仅支持群内使用,不支持私聊
+- 仅能接收到群内@机器人的消息,无法接收到群内其他消息
+- 主动发送消息每天限次
- 腾讯对 AIGC 功能的机器人审核较严格
\ No newline at end of file
diff --git a/docs/zh/tob/provider.md b/zh/tob/provider.mdx
similarity index 86%
rename from docs/zh/tob/provider.md
rename to zh/tob/provider.mdx
index d8a2b4fd1..4cf889b7a 100644
--- a/docs/zh/tob/provider.md
+++ b/zh/tob/provider.mdx
@@ -1,13 +1,15 @@
-# AI 内容合规性
-
-> 国家对AIGC的管理办法参考资料
->
-> - [生成式人工智能服务管理暂行办法](https://www.cac.gov.cn/2023-07/13/c_1690898327029107.htm)
-
-在内容管控方面,LangBot 内置了`关键词检测`、`百度智能云审核`等内容过滤器,具体请查看配置文件章节。
-
-在实践中,应该辅以群内管理员禁言之类的方式管控内容,模型方面,以下是推荐的方案(按推荐顺序):
-
-1. 使用国产模型
-2. 使用严格的内容过滤器(可自行实现,详细参考插件功能章节)
-3. 在使用境外模型时辅以严格的 Prompt
\ No newline at end of file
+---
+title: "AI 内容合规性"
+---
+
+> 国家对AIGC的管理办法参考资料
+>
+> - [生成式人工智能服务管理暂行办法](https://www.cac.gov.cn/2023-07/13/c_1690898327029107.htm)
+
+在内容管控方面,LangBot 内置了`关键词检测`、`百度智能云审核`等内容过滤器,具体请查看配置文件章节。
+
+在实践中,应该辅以群内管理员禁言之类的方式管控内容,模型方面,以下是推荐的方案(按推荐顺序):
+
+1. 使用国产模型
+2. 使用严格的内容过滤器(可自行实现,详细参考插件功能章节)
+3. 在使用境外模型时辅以严格的 Prompt
diff --git a/zh/usage/knowledge/readme.mdx b/zh/usage/knowledge/readme.mdx
new file mode 100644
index 000000000..d2bee7678
--- /dev/null
+++ b/zh/usage/knowledge/readme.mdx
@@ -0,0 +1,37 @@
+---
+title: "使用知识库 (Knowledge Base)"
+---
+
+LangBot 原生支持 RAG(Retrieval-Augmented Generation,即检索增强生成),您可以创建内置知识库,并将其与流水线绑定,流水线将根据知识库中的内容回答问题。同时,我们支持接入外部服务(Dify、RAGFLow等)提供的知识检索服务。
+
+## 构建内置知识库
+
+
+内置知识库的创建和使用需要先配置嵌入模型,请先阅读[配置模型](/zh/usage/models/readme)。
+
+
+在知识库页面,点击`创建知识库`按钮,填写知识库名称,选择已配置好的嵌入模型,然后点击`创建`按钮。
+
+之后请到知识库的”文档”页面,上传文档,LangBot 将会在后台开始解析和索引。
+
+
+
+## 接入外部知识库
+
+请在知识库页面,切换到”外部知识库”标签页,添加外部知识库。在对话框中可以选择需要使用的外部知识库检索器,您需要先在插件管理中安装对应的插件。目前支持的知识检索器可以在[插件市场](https://space.langbot.app/market?category=KnowledgeRetriever)中查看。
+
+## 使用知识库
+
+请到流水线配置中,”AI 能力”页,选择`内置 Agent`作为运行器,并在下方选择您刚刚创建的知识库。
+
+
+
+
+
+
+仅当运行器为`内置 Agent`时,才可以使用 LangBot 原生知识库,若要在使用其他运行器时使用知识库,请参考所使用的运行器对应产品的文档。
+
+
+现在即可在`对话调试`或流水线所绑定的机器人上使用知识库进行对话:
+
+
diff --git a/zh/usage/mcp/readme.mdx b/zh/usage/mcp/readme.mdx
new file mode 100644
index 000000000..d48264a46
--- /dev/null
+++ b/zh/usage/mcp/readme.mdx
@@ -0,0 +1,57 @@
+---
+title: "使用MCP服务器"
+---
+
+LangBot 支持使用来自 MCP 服务器的工具,您可以添加 MCP 服务器,使用大语言模型中的工具调用特性,更好的处理 LLM 请求。
+
+
+ MCP 服务器推荐获取渠道:[ModelScope](https://modelscope.cn/mcp)
+
+
+## 打开模型的函数调用功能
+
+如图,将模型的`函数调用`功能打开。
+
+
+
+## 创建MCP服务器
+
+点击`插件管理` -\> `MCP管理`,如图所示:
+
+
+
+点击右上角的`添加`,选择`添加 MCP 服务器`,
+
+
+
+比如使用 Fetch HTML 服务器,填写对应的 URL,点击`测试`用来测试 MCP 服务器,点`提交`添加此服务器。
+
+添加完成之后,点击卡片上的开关以连接 MCP 服务器,点击卡片可以看到 MCP 服务器的详情:
+
+
+
+## 效果
+
+需要在流水线设置中选用 `内置 Agent` 作为运行器,并使用支持函数调用的模型。
+
+
\ No newline at end of file
diff --git a/zh/usage/models/readme.mdx b/zh/usage/models/readme.mdx
new file mode 100644
index 000000000..75fcee660
--- /dev/null
+++ b/zh/usage/models/readme.mdx
@@ -0,0 +1,47 @@
+---
+title: "配置模型 (Models)"
+---
+
+## LangBot Models
+
+LangBot Models 是 LangBot 官方提供的模型服务。当您使用 LangBot Space 账户初始化本地实例时,可用模型将被自动添加到您的实例中,无需进行任何配置。您将会获得一定的免费额度用于快速上手。
+
+
+
+具体可用模型,请查看[LangBot Space](https://space.langbot.app/models)。
+
+## 自定义模型
+
+您也可以添加其他来源的模型。
+
+### 对话模型 (LLM Model)
+
+对话模型将被流水线用于处理消息,您配置的第一个模型将被设置为默认流水线的模型。
+
+
+
+可以添加多个模型,然后再流水线中选择具体使用什么模型
+
+
+
+填入这四个参数`模型名称`、`模型供应商`、`请求 URL`、`API Key`,然后提交即可
+
+模型能力方面,请根据具体模型特性来选择:
+
+- 视觉能力:需要启用才可以识图
+
+- 函数调用:需要启用才可以在对话中使用 Agent 工具
+
+### 嵌入模型 (Embedding Model)
+
+嵌入模型将被用于计算消息的向量,若您需要使用知识库,请配置此模型。
+
+
+
+填入这四个参数`模型名称`、`模型供应商`、`请求 URL`、`API Key`,然后提交即可,之后请在知识库中配置使用此模型。
+
+### 使用 seekdb 内置嵌入模型(零配置)
+系统已集成 seekdb 提供的官方嵌入模型,无需填写任何参数。
+- 在“嵌入模型”页面选择「seekdb-内置」;
+- 点击「保存」即可立即使用;
+- 后续在知识库中选择该模型即可生效。
diff --git a/docs/zh/deploy/pipelines/coze.md b/zh/usage/pipelines/coze.mdx
similarity index 77%
rename from docs/zh/deploy/pipelines/coze.md
rename to zh/usage/pipelines/coze.mdx
index b745d2fd7..7d2ce72dc 100644
--- a/docs/zh/deploy/pipelines/coze.md
+++ b/zh/usage/pipelines/coze.mdx
@@ -1,22 +1,24 @@
-# 接入 Coze API
+---
+title: "接入 Coze API"
+---
本文仅说明如何在 Coze 平台获取 Token 与 Bot ID,并将其填写到 LangBot 流水线配置中。
## 1. 获取 Token 与 Bot ID
1. 登录 Coze 平台,进入你的开发控制台。
-
+
2. 在“API 管理”中创建并复制令牌。
-
+
-:::info
+
coze.cn 的授权中有可以长期授权的`服务身份及凭证`,但是 coze.com 只有个人访问令牌。
-:::
+
3. 从项目开发中选择你自己的智能体,或者新建智能体,拿到一下id就是bot_id。
-
+
* 智能体发布一定要选上api的选项
-
+
@@ -33,7 +35,7 @@ coze.cn 的授权中有可以长期授权的`服务身份及凭证`,但是 coz
- bot_id:粘贴对应机器人的 Bot ID
- 请根据您使用的 Coze 站点选择 `API 基础 URL`:coze.cn 请填写 `https://api.coze.cn`;coze.com 请填写 `https://api.coze.com`
- 
+ 
4. 点击“保存”完成配置。
完成后,你即可在该流水线中调用 Coze 机器人完成对话处理。
@@ -42,4 +44,4 @@ coze.cn 的授权中有可以长期授权的`服务身份及凭证`,但是 coz
- 保存失败或调用报错:请确认 token 与 bot_id 是否正确且未包含多余空格。
- 无法选择 `Coze API`:请确认当前版本是否已支持该运行器;若尚未支持,请升级到包含 Coze 运行器的版本。
-更多流水线通用配置说明,请参考[修改对话流水线配置](/zh/deploy/pipelines/readme)。
\ No newline at end of file
+更多流水线通用配置说明,请参考[修改对话流水线配置](/zh/usage/pipelines/readme)。
diff --git a/docs/zh/deploy/pipelines/dify.md b/zh/usage/pipelines/dify.mdx
similarity index 77%
rename from docs/zh/deploy/pipelines/dify.md
rename to zh/usage/pipelines/dify.mdx
index 66206dd02..05efc4d41 100644
--- a/docs/zh/deploy/pipelines/dify.md
+++ b/zh/usage/pipelines/dify.mdx
@@ -1,4 +1,6 @@
-# 在 LangBot 上使用 Dify
+---
+title: "在 LangBot 上使用 Dify"
+---
[Dify](https://dify.ai) 是一款开源的大语言模型(LLM) 应用开发平台。它融合了后端即服务(Backend as Service)和 LLMOps 的理念,使开发者可以快速搭建生产级的生成式 AI 应用。
Dify 可以创建聊天助手(含Chatflow)、Agent、文本生成应用、工作流等应用。
@@ -11,32 +13,30 @@ LangBot 目前支持`聊天助手`(含Chatflow)、`Agent`、`工作流`三
发布应用后,在应用的 `访问API` 页面,生成 API 密钥。
-
+
保存 API 服务器和 API 密钥,在 LangBot 的流水线的`AI 能力`配置。
-:::info
-以上为 Dify 云服务版本的示例,若您使用本地自部署的社区版本,请使用 LangBot 访问你自己 Dify 服务的地址作为 `base-url`,后方需要添加 `/v1` 作为路径。
+
- 若 LangBot 与 Dify 部署在同一台主机,并且都是使用 Docker 部署的,可以参考文章:[网络配置详解](/zh/workshop/network-details.html#langbot-%E5%92%8C%E6%B6%88%E6%81%AF%E5%B9%B3%E5%8F%B0%E5%9D%87%E8%BF%90%E8%A1%8C%E5%9C%A8-docker-%E5%AE%B9%E5%99%A8%E4%B8%AD)。其中,请将启动 Dify 的 docker-compose.yaml 中所有容器的`networks`均添加`langbot-network`,并为`nginx`容器添加容器名`dify-nginx`,最后在 LangBot 配置中将`base-url`设置为`http://dify-nginx/v1`。
- 其他情况请咨询贵司运维人员。
-:::
+
## 配置 LangBot
打开 LangBot WebUI 页面,添加一个新的流水线或在已有流水线中切换到 AI 能力配置页面。
-
+
-::: info
-### 工作流输出键
+
如果使用的是 Dify 的工作流应用,那么请使用 `summary` 作为键传递输出内容。
-
+
## 输出处理
使用 工作流 应用或 Agent 应用时,如果开启了 LangBot 流水线`输出处理`中的`track-function-calls`,将会在 Dify 执行每个工具调用时,输出一个`调用函数xxx`的消息给用户。
但如果是使用`chat`应用下的`ChatFlow`(聊天助手->工作流编排),无论如何只会输出 Answer(直接回复)节点返回的文本。
-:::
\ No newline at end of file
+
diff --git a/docs/zh/deploy/pipelines/langflow.md b/zh/usage/pipelines/langflow.mdx
similarity index 67%
rename from docs/zh/deploy/pipelines/langflow.md
rename to zh/usage/pipelines/langflow.mdx
index 2a247298b..fec1d124c 100644
--- a/docs/zh/deploy/pipelines/langflow.md
+++ b/zh/usage/pipelines/langflow.mdx
@@ -1,4 +1,6 @@
-# 在 LangBot 上使用 Langflow
+---
+title: "在 LangBot 上使用 Langflow"
+---
Langflow 是一个开源的用于构建和部署基于 AI 的 Agent 和工作流的项目。其支持本地和云端部署,并提供 API 供其他应用接入。
@@ -10,22 +12,22 @@ LangBot 目前支持使用 Langflow 作为运行器。
以默认模板中的 Simple Agent 为例:
-
+
您可根据需求修改工作流:
-
+
## 配置 LangBot
打开 LangBot WebUI 页面,添加一个新的流水线或在已有流水线中切换到 AI 能力配置页面,选择`Langflow API` 作为运行器。
-
+
根据提示填入`Base URL`(根据实际网络情况填写) `API Key` `Flow ID` 等信息,API Key 可在 Langflow 的 Settings 中获取:
-
+
Flow ID 可点击编辑页右上角的`Share` -> `API access` 并示例代码中获取:
-
\ No newline at end of file
+
diff --git a/docs/zh/deploy/pipelines/n8n.md b/zh/usage/pipelines/n8n.mdx
similarity index 52%
rename from docs/zh/deploy/pipelines/n8n.md
rename to zh/usage/pipelines/n8n.mdx
index f496a90bb..f430c3b45 100644
--- a/docs/zh/deploy/pipelines/n8n.md
+++ b/zh/usage/pipelines/n8n.mdx
@@ -1,4 +1,6 @@
-# 在 LangBot 上使用 n8n
+---
+title: "在 LangBot 上使用 n8n"
+---
[n8n](https://n8n.io/) 是一款开源的自动化工作流平台,可以创建、调度、执行各种自动化任务。
@@ -8,46 +10,44 @@ LangBot 目前支持通过 n8n 工作流的 `Webhook` 节点,来触发工作
请打开已有的流水线配置页面,或新建流水线(推荐)并打开配置页面,到 `AI 能力`中选择 `n8n 工作流 API` 作为运行器。
-
+
并根据下方内容设置并填写其他配置。
## 配置 n8n 工作流连接
-
+
or
-
+
需要选择`Webhook`或者`On chat message`触发,并参考下图配置:
* webhook
- 
+ 
* on chat message
- 
+ 
-:::info
-如果要需要流式,其中的`Response Mode`都需要选择为`Streaming`。
-
-:::
+
+
+
-:::info
-Authentication 对应 LangBot 流水线配置中的几种鉴权方式,可自行更改。
+
-
-:::
+
+
调用ai模型的节点可配置为`AI Agent`,并参考下图配置:
> 需要流式则将图片中红框内容添加,不需要则不管
-
+
n8n 的工作流响应内容请使用`Respond to Webhook`节点,并参考下图配置(如果你选择的是流式响应和`AI Agent`节点,则不需要操作此步骤):
-
+
`Response Body`中的响应内容键名需要与 LangBot 流水线配置中的`输出键名`一致。
-在完成 n8n 工作流的配置之后,请在其顶部点击`Active`以启用工作流。
\ No newline at end of file
+在完成 n8n 工作流的配置之后,请在其顶部点击`Active`以启用工作流。
diff --git a/docs/zh/deploy/pipelines/readme.md b/zh/usage/pipelines/readme.mdx
similarity index 67%
rename from docs/zh/deploy/pipelines/readme.md
rename to zh/usage/pipelines/readme.mdx
index 0431474e7..30314cc98 100644
--- a/docs/zh/deploy/pipelines/readme.md
+++ b/zh/usage/pipelines/readme.mdx
@@ -1,10 +1,12 @@
-# 修改对话流水线配置 (Pipelines)
+---
+title: "修改对话流水线配置 (Pipelines)"
+---
流水线控制了收到消息之后的处理流程,以及与大模型之间的信息交互。每个机器人可以绑定到一条流水线上,同一条流水线能被多个机器人绑定。
LangBot 首次启动时会自动创建一个默认的流水线。创建机器人时,会自动绑定到默认流水线。创建第一个模型时,会自动将其设置为默认流水线的模型。
-
+
您可以创建多条流水线,用于不同的机器人,适应不同的场景。
@@ -20,30 +22,35 @@ AI 能力主要分为两个部分,选择运行器和配置运行器参数。
运行器定义了如何调度大模型处理消息,默认为`内置 Agent`,这是 LangBot 实现的一个多回合 Agent 策略,当且仅当选择此运行器时,才会使用 LangBot 内部配置的模型和工具。
-**
+{/*  */}
-
+
您也可以选择使用 `Dify`、 [`n8n`](https://n8n.io/) 等外部 LLMOps 平台,这种情况下所使用的模型和提示词、工具等资源将由 LLMOps 平台提供。
-
+
-- 接入 Dify 的详细步骤可以[参考教程](/zh/deploy/pipelines/dify.html)。
-- 接入 n8n 的详细步骤可以[参考教程](/zh/deploy/pipelines/n8n.html)。
+- 接入 Dify 的详细步骤可以[参考教程](/zh/usage/pipelines/dify.html)。
+- 接入 n8n 的详细步骤可以[参考教程](/zh/usage/pipelines/n8n.html)。
### 请求变量
当使用外部 LLMOps 平台时,LangBot 会显式传入以下参数,您可以自行在 LLMOps 平台的开始节点中添加(下图以 Dify 为例):
+- `launcher_type`:发起对象类型,私聊为 `person`,群聊为 `group`
+- `launcher_id`:发起对象ID,私聊为用户ID,群聊为群ID
+- `sender_id`:发送者ID
- `user_message_text`:用户消息的纯文本
- `session_id`:用户会话id,私聊为 `person_`,群聊为 `group_`
- `conversation_id`:字符串,用户会话id,由 LangBot 生成。用户重置会话后,会重新生成
- `msg_create_time`:数字类型,收到此消息的时间戳(秒)
+- `group_name`:群聊名称,仅在群消息事件时设置
+- `sender_name`:发送者名称
您可以[通过插件自定义任何变量](/zh/plugin/dev/apis/common.html#%E8%AE%BE%E7%BD%AE%E8%AF%B7%E6%B1%82%E5%8F%98%E9%87%8F)。
-
+
## 其他配置
-请参考配置表单中的描述信息。
\ No newline at end of file
+请参考配置表单中的描述信息。
diff --git a/docs/zh/deploy/pipelines/tbox.md b/zh/usage/pipelines/tbox.mdx
similarity index 71%
rename from docs/zh/deploy/pipelines/tbox.md
rename to zh/usage/pipelines/tbox.mdx
index 1a38b3e95..bb06783a1 100644
--- a/docs/zh/deploy/pipelines/tbox.md
+++ b/zh/usage/pipelines/tbox.mdx
@@ -1,4 +1,6 @@
-# 在 LangBot 上使用 TBox(蚂蚁百宝箱)
+---
+title: "在 LangBot 上使用 TBox(蚂蚁百宝箱)"
+---
[TBox(百宝箱)](https://tbox.cn/)是蚂蚁集团推出的面向 AI 开发者的一站式智能体应用开发平台。在平台上,无论您是否拥有编程基础,都可以通过自然语言,基于各种大模型搭建属于您自己的智能体应用,并将其发布到支付宝小程序、web 服务、浏览器插件等生态渠道。
@@ -6,14 +8,14 @@ LangBot 支持接入 TBox 上编排好的智能体,用作流水线 Runner。
在 TBox 上搭建好智能体后,请到[`开放平台`](https://www.tbox.cn/open/authorized-management)创建 API Key:
-
+
并在 TBox 的智能体编排页面找到该应用的 AppID:
-
+
接着回到 LangBot 流水线设置中,切到`AI 能力`配置页面,选择`蚂蚁百宝箱平台 API` 作为运行器:
-
+
-现在即可使用 TBox 上的智能体了。
\ No newline at end of file
+现在即可使用 TBox 上的智能体了。
diff --git a/docs/zh/deploy/platforms/dingtalk.md b/zh/usage/platforms/dingtalk.mdx
similarity index 68%
rename from docs/zh/deploy/platforms/dingtalk.md
rename to zh/usage/platforms/dingtalk.mdx
index 7e4be1290..7886872cd 100644
--- a/docs/zh/deploy/platforms/dingtalk.md
+++ b/zh/usage/platforms/dingtalk.mdx
@@ -1,56 +1,58 @@
-# 部署钉钉机器人
+---
+title: "部署钉钉机器人"
+---
部署 LangBot 到钉钉。
## 创建机器人
进入 [钉钉开发者后台](https://open-dev.dingtalk.com/?spm=ding_open_doc.document.0.0.74f445e5MkawbT#/),登录并且进入组织。登录成功后进入开放平台,是这样的:
-
+
点击上方的 `应用开发`,然后点击右面蓝色的按钮 `创建应用`,填写机器人的基本信息,点击保存。
进入机器人的后台,比如我们有机器人 langbot2 ,那么它的管理页面是这样的:
-
+
## 配置机器人
点击 `添加应用能力`,`其他应用能力`,`机器人`中的 `配置`,点击配置并且填写信息之后,如下图:
-
+
点击页面下方的`发布`,发布成功之后,点击机器人页面中左侧最下方的`版本管理与发布`,如图:
-
+
如果是第一次创建机器人,那么右边是空的,需要点击`创建新版本`,在其中设置信息,然后设置`应用可见范围`,点击保存。
点击`事件订阅`,将其中的推送方式改为`Stream模式推送`。
如果需要卡片流式,则需要在权限管理中申请卡片权限,如图:
-
+
-
+
另外卡片消息主要创建卡片模板,并记录模板id填入配置信息,流程如下:
> 卡片内容模板ID,可通过登录开发者后台 > [卡片平台](https://open-dev.dingtalk.com/fe/card?spm=ding_open_doc.document.0.0.33cf2281L0fXsV)获取
新建模板填写信息,如图:
-
+
选择预设模板(直接选第一个然后进去后更改模板内容),如图:
-
+
点击使用
-
+
创建
-
+
点击创建后会跳转到编辑模板。如图,这样你就可以尽情的编辑你想要的卡片消息了:
-
+
主内容这里默认content不要改动即可:
-
+
编辑好没问题之后保存即可,并复制模板id用以填写配置文件:
-
-
+
+
## 填写配置信息
@@ -63,21 +65,18 @@
点击[卡片平台](https://open-dev.dingtalk.com/fe/card?spm=ding_open_doc.document.0.0.33cf2281L0fXsV)模板列表复制绑定的对应的模板id填入卡片模板id
-
+
流式相关:
-
+
**启动 LangBot** 。
## 添加机器人
本文使用钉钉 windows 桌面版举例,点击上方的`搜索`,`功能`,然后输入刚才机器人创建的名称,如图:
-
+
点击机器人即可和机器人聊天。
如果想要添加到群里,那么点击钉钉群的`群管理`,`机器人`,`添加机器人`,然后搜索机器人名称就可以在群中使用。
-
-
-
diff --git a/docs/zh/deploy/platforms/discord.md b/zh/usage/platforms/discord.mdx
similarity index 61%
rename from docs/zh/deploy/platforms/discord.md
rename to zh/usage/platforms/discord.mdx
index b47bca4eb..e793d77b1 100644
--- a/docs/zh/deploy/platforms/discord.md
+++ b/zh/usage/platforms/discord.mdx
@@ -1,22 +1,24 @@
-# 接入 Discord 机器人
+---
+title: "接入 Discord 机器人"
+---
## 创建机器人
前往[Discord 开发者门户](https://discord.com/developers/applications),登录后,创建应用。
-
+
修改基础信息,点击`Save Changes`保存。
-
+
点击左侧`Bot`,点击`Reset Token`,复制生成的 Token。
-
+
并在此页面的`Privileged Gateway Intents`中勾选所有选项,点击`Save Changes`保存。
-
+
**最后,点击左侧`OAuth2`,复制页面上的`Client ID`。**
@@ -24,13 +26,11 @@
点击添加一个新的机器人,将上一步获取的`Client ID`和`Token`填写到配置中。
-
+
-:::warning
+
-如果你在中国大陆境内使用此适配器,可能需要设置网络代理。
-
-:::
+
填写完成后启动 LangBot,若成功配置,日志中会出现`[02-02 16:48:15.263] manager.py (68) - [INFO] : 初始化平台适配器 1: discord`的字样,保持 LangBot 运行。
@@ -40,16 +40,16 @@
前往`OAuth2`页面,选择`URL Generator`,选择`bot`,按照图中所示勾选权限。
-
+
-
+
点击`Copy`,将生成的 URL 粘贴到浏览器中打开,邀请机器人到你的服务器。
-
+
## 使用机器人
现在在群里或者私聊机器人都可以正常使用了。
-
\ No newline at end of file
+
diff --git a/zh/usage/platforms/kook.mdx b/zh/usage/platforms/kook.mdx
new file mode 100644
index 000000000..ac958db08
--- /dev/null
+++ b/zh/usage/platforms/kook.mdx
@@ -0,0 +1,65 @@
+---
+title: "接入 KOOK 机器人"
+---
+
+## 创建机器人
+
+前往 [KOOK 开发者中心](https://developer.kookapp.cn/),登录后进入控制台。
+
+
+
+点击「新建应用」,填写应用信息。
+
+
+
+应用创建完成后,进入应用详情页。
+
+
+
+在应用概览页面可以查看应用的基本信息。
+
+
+
+## 获取 Bot Token
+
+在应用页面中,点击「机器人」标签,复制 Bot Token 并妥善保存,后续需要使用。
+
+
+
+## 配置机器人权限
+
+**重要:** 在「机器人」设置中,找到「消息过滤」选项,点击配置。
+
+
+
+开启所有消息相关事件权限,包括频道消息和私聊消息事件,否则机器人将无法接收消息。
+
+
+
+## 邀请机器人
+
+在机器人设置页面,可以生成邀请链接,将机器人邀请到你的服务器。
+
+
+
+## 对接 LangBot
+
+打开 LangBot Webui 页面,在「机器人」页面点击创建新机器人。
+
+
+
+选择 KOOK 平台,填写机器人名称和 Bot Token。
+
+
+
+保存后,机器人将出现在列表中。
+
+
+
+点击启用按钮,启动机器人。若成功配置,机器人状态将显示为运行中。
+
+
+
+## 使用机器人
+
+现在在 KOOK 服务器中,机器人就可以正常接收和回复消息了。机器人支持频道消息和私聊消息。
diff --git a/zh/usage/platforms/lark.mdx b/zh/usage/platforms/lark.mdx
new file mode 100644
index 000000000..94fe1054d
--- /dev/null
+++ b/zh/usage/platforms/lark.mdx
@@ -0,0 +1,90 @@
+---
+title: "接入飞书机器人"
+---
+
+## 创建机器人
+
+前往[飞书开放平台](https://open.feishu.cn/app),登录后,创建企业自建应用/商店应用 [(区别介绍)](https://open.feishu.cn/document/platform-overveiw/overview)。
+
+
+
+
+
+为应用添加机器人能力:
+
+
+在权限管理中添加图中所示权限:
+
+
+
+如需卡片流式权限则多添加如下图的创建与更新卡片:
+
+
+
+
+默认卡片模板如需更换,需要自己去平台适配器的代码中修改卡片模板
+
+
+## 对接 LangBot
+
+在`凭证与基础信息`页找到`app_id`和`app_secret`。
+
+
+
+
+
+打开LangBot 的 Webui 配置页面,创建一个新的机器人
+
+将相关信息填入表单
+
+
+
+流式相关:
+
+
+填写完成后启动 LangBot,若成功配置,日志中会出现`[01-29 23:42:56.796] manager.py (68) - [INFO] : 初始化平台适配器 1: lark`的字样,保持 LangBot 运行。
+
+
+
+- `enable-webhook`:设置为`true`
+- `encrypt-key`:设置为`事件与回调`页面的`加密策略`中的`Encrypt Key`
+
+注意,在Webhook模式中,LangBot 需要部署在具有公网 IP 的服务器上,并确保防火墙已开放上方配置的端口。
+
+
+## 配置事件订阅
+
+前往`事件与回调`页,配置订阅方式为`长连接`:
+
+
+
+并添加事件:`接收消息`
+
+
+
+
+
+
+
+请先启动 LangBot,在此处填写你的服务器地址和端口,路径为`/lark/callback`,点击`保存`。
+
+
+
+## 发布机器人
+
+点击顶部`创建版本`,填写版本号等信息,点击下方`保存`。
+
+
+
+在飞书群中添加机器人,即可使用:
+
+
+
+
+
+私聊也可以直接使用
+
+
+
+## 常见问题
+- 商店应用机器人创建/保存后无法立刻响应聊天消息,由于[app_ticket事件](https://open.feishu.cn/document/server-docs/application-v6/event/app_ticket-events)延迟机制,需要等待2分钟左右才可以正常使用。
diff --git a/docs/zh/deploy/platforms/line.md b/zh/usage/platforms/line.mdx
similarity index 63%
rename from docs/zh/deploy/platforms/line.md
rename to zh/usage/platforms/line.mdx
index 9e675aef3..cf2c8eed0 100644
--- a/docs/zh/deploy/platforms/line.md
+++ b/zh/usage/platforms/line.mdx
@@ -1,4 +1,6 @@
-# 接入LINE机器人
+---
+title: "接入LINE机器人"
+---
本文介绍如何将 LangBot 与 LINE 平台进行对接,实现 LINE 机器人功能。
@@ -15,33 +17,33 @@
1. 在开发者控制台中,创建一个新的 Provider(如果没有的话)
-
+
2. 在 Provider 下,点击 "Create"
-
+
3. 填入名称,并点击 Create
-
+
4. 跳转页面后选择 Create a Message API
-
+
* 继续点击 Create a Message API
-
+
* 跳转页面后填入基本信息
-
+
- Channel Name(频道名称)
- Channel Description(频道描述)
- Category(类别)
- Subcategory(子类别)
- Email Address(邮箱地址)
5. 全部填好之后点击 "Continue" 创建
-
+
6. 检查填入的信息,无问题点击 Submit 即可
-
+
7. 创建成功去使用
-
+
### 获取配置信息
@@ -50,74 +52,78 @@
1. Channel Secret
> [刚刚点击使用跳转页面](https://manager.line.biz/account)
* 选择 Settings
-
+
* 点击 Message API
-
+
* 开启 Message API
-
+
* 选择刚刚新建的 Provider 并点击 Agree
-
+
* 隐私条款直接点击 OK
-
+
* 点击 OK 创建成功
-
+
* Copy 即可
-
+
2. Channel Access Token(需要点击 "Issue" 按钮生成)
* 点击控制台或者直接访问 [控制台](https://developers.line.biz/console/)
-
+
* 选择你创建的 Provider 并点击 Message API
-
+
* 点击 Message API
-
+
* 下滑到最下面,点击 Issue
-
+
* 点击图标复制
-
+
-
-
-
-
-## 配置Webhook
-
-* 点击控制台或者直接访问 [控制台](https://developers.line.biz/console/)
-
-* 选择你创建的 Provider 并点击 Message API
-
-* 点击 Message API
-
-* 点击 Edit 填写连接
-
-* 填入连接(必须要 HTTPS 的连接,也就是要 SSL 证书),点击 Update
-
-
-* 选择 Use Webhook
-
-
-5. 点击 "Verify" 按钮测试连接是否成功
-
-
-
## 对接 LangBot
接下来打开 LangBot 配置页面:
1. 点击 "机器人",然后点击 "添加"
-
+
2. 在 "平台/适配器选择" 中选择 "LINE"
-
+
3. 填写配置信息:
- Channel Secret:您之前获取的 Channel Secret
- Channel Access Token:您之前获取的 Channel Access Token
- 
+ 
4. 点击 "保存" 完成配置
- 
+ 
+
+
+## 配置Webhook
+
+
+推荐您先参照[配置 HTTP 反向代理](/zh/workshop/production/proxy-and-ssl)来配置 LangBot 回调地址。
+
+
+* 从 LangBot 配置页面获取 Webhook 回调地址
+
+
+* 点击控制台或者直接访问 [控制台](https://developers.line.biz/console/)
+
+* 选择你创建的 Provider 并点击 Message API
+
+* 点击 Message API
+
+* 点击 Edit 填写连接
+
+* 填入连接(必须要 HTTPS 的连接,也就是要 SSL 证书),点击 Update
+
+
+* 选择 Use Webhook
+
+
+5. 点击 "Verify" 按钮测试连接是否成功
+
+
## 功能配置
diff --git a/docs/zh/deploy/platforms/qq/aiocqhttp/lagrange.md b/zh/usage/platforms/qq/aiocqhttp/lagrange.mdx
similarity index 79%
rename from docs/zh/deploy/platforms/qq/aiocqhttp/lagrange.md
rename to zh/usage/platforms/qq/aiocqhttp/lagrange.mdx
index 8ad9bceca..94cbcd616 100644
--- a/docs/zh/deploy/platforms/qq/aiocqhttp/lagrange.md
+++ b/zh/usage/platforms/qq/aiocqhttp/lagrange.mdx
@@ -1,67 +1,69 @@
-# 部署消息平台 Lagrange
-
-## Lagrange介绍
-
-Lagrange 是一个 QQNT 协议逆向工程框架,轻便且相对稳定。通过 OneBot 11 协议接入,需选择使用`OneBot v11`作为适配器。
-
-::: warning
-需要使用 NT QQ 与机器人交互,旧版QQ无法正常使用
-:::
-
-## 部署步骤
-
-以下仅提供 Windows 上的大致步骤,详细步骤或其他平台请参考 [Lagrange官方文档](https://lagrangedev.github.io/Lagrange.Doc/v1/Lagrange.OneBot/)
-
-### 环境配置
-
-安装.NET 8运行时,[点击直达微软官网下载](https://dotnet.microsoft.com/zh-cn/download/dotnet/thank-you/runtime-desktop-8.0.4-windows-x64-installer)
-
-### 从Github Actions下载最新的build
-
-需要登录Github后才能下载,如果你不需要部分特性,可以在Release下载,看图片3
-
-[Github Actions](https://github.com/KonataDev/Lagrange.Core/actions)
-
-看图进行下载:
-
-
-
-
-
-
-
-### 尾声
-
-解压你所下载的zip,打开到有Lagrange.OneBot.exe的目录,在此目录下打开cmd命令提示符,输入
-
-```bash
-.\Lagrange.OneBot
-```
-
-运行一次,如果输出了一个二维码,即可直接用机器人号扫码登录(若二维码显示不清楚,可以到lagrange的data目录下寻找图片文件)。
-
-若无法登录,请检查是否正常填写了lagrange配置文件appsettings.json中的签名地址 SignServerUrl ,签名地址请到lagrange文档中寻找。
-
-## 修改配置
-
-需要配置 Lagrange 以让其连接上 LangBot,请编辑 Lagrange 的配置文件 appsettings.json,确保 Implementations 中的连接配置符合下图内容:
-
-
-
-其中 Type 必须为 `ReverseWebSocket`;
-Host 为 LangBot 运行的主机 IP,若在同一主机上,可以写 `127.0.0.1`;
-Suffix 必须为 `/ws`;
-
-## Lagrange 对接
-
-接下来打开 LangBot 配置页面
-
-点击机器人,点击添加
-
-`平台/适配器选择`为`OneBot v11`
-
-
-
-::: info
-注意,如果涉及多个 docker 容器的网络连接问题,请参考[网络配置详解](/zh/workshop/network-details)
-:::
\ No newline at end of file
+---
+title: "部署消息平台 Lagrange"
+---
+
+## Lagrange介绍
+
+Lagrange 是一个 QQNT 协议逆向工程框架,轻便且相对稳定。通过 OneBot 11 协议接入,需选择使用`OneBot v11`作为适配器。
+
+
+需要使用 NT QQ 与机器人交互,旧版QQ无法正常使用
+
+
+## 部署步骤
+
+以下仅提供 Windows 上的大致步骤,详细步骤或其他平台请参考 [Lagrange官方文档](https://lagrangedev.github.io/Lagrange.Doc/v1/Lagrange.OneBot/)
+
+### 环境配置
+
+安装.NET 8运行时,[点击直达微软官网下载](https://dotnet.microsoft.com/zh-cn/download/dotnet/thank-you/runtime-desktop-8.0.4-windows-x64-installer)
+
+### 从Github Actions下载最新的build
+
+需要登录Github后才能下载,如果你不需要部分特性,可以在Release下载,看图片3
+
+[Github Actions](https://github.com/KonataDev/Lagrange.Core/actions)
+
+看图进行下载:
+
+
+
+
+
+
+
+### 尾声
+
+解压你所下载的zip,打开到有Lagrange.OneBot.exe的目录,在此目录下打开cmd命令提示符,输入
+
+```bash
+.\Lagrange.OneBot
+```
+
+运行一次,如果输出了一个二维码,即可直接用机器人号扫码登录(若二维码显示不清楚,可以到lagrange的data目录下寻找图片文件)。
+
+若无法登录,请检查是否正常填写了lagrange配置文件appsettings.json中的签名地址 SignServerUrl ,签名地址请到lagrange文档中寻找。
+
+## 修改配置
+
+需要配置 Lagrange 以让其连接上 LangBot,请编辑 Lagrange 的配置文件 appsettings.json,确保 Implementations 中的连接配置符合下图内容:
+
+
+
+其中 Type 必须为 `ReverseWebSocket`;
+Host 为 LangBot 运行的主机 IP,若在同一主机上,可以写 `127.0.0.1`;
+Suffix 必须为 `/ws`;
+
+## Lagrange 对接
+
+接下来打开 LangBot 配置页面
+
+点击机器人,点击添加
+
+`平台/适配器选择`为`OneBot v11`
+
+
+
+
+注意,如果涉及多个 docker 容器的网络连接问题,请参考[网络配置详解](/zh/workshop/network-details)
+
diff --git a/docs/zh/deploy/platforms/qq/aiocqhttp/llonebot.md b/zh/usage/platforms/qq/aiocqhttp/llonebot.mdx
similarity index 74%
rename from docs/zh/deploy/platforms/qq/aiocqhttp/llonebot.md
rename to zh/usage/platforms/qq/aiocqhttp/llonebot.mdx
index 75c564c88..c18b91343 100644
--- a/docs/zh/deploy/platforms/qq/aiocqhttp/llonebot.md
+++ b/zh/usage/platforms/qq/aiocqhttp/llonebot.mdx
@@ -1,27 +1,29 @@
-# 部署消息平台 LiteLoaderQQNT
-
-通过 OneBot 11 协议接入,需选择使用``OneBot v11``作为适配器。
-
-# LiteLoaderQQNT
-
-- [LiteLoaderQQNT 的 OneBot API 插件](https://github.com/LLOneBot/LLOneBot) 注入 QQ 客户端并将其转换为 OneBot 11 协议
-
-安装LiteLoaderQQNT的教程:https://llonebot.github.io/zh-CN/guide/getting-started
-
-
-
-确保地址中 IP地址 是 LangBot 运行的主机的地址(若在同一网络内运行则为 127.0.0.1)
-
-## Lagrange 对接
-
-接下来打开 LangBot 配置页面
-
-点击机器人,点击添加
-
-`平台/适配器选择`为`OneBot v11`
-
-
-
-::: info
-注意,如果涉及多个 docker 容器的网络连接问题,请参考[网络配置详解](/zh/workshop/network-details)
-:::
\ No newline at end of file
+---
+title: "部署消息平台 LiteLoaderQQNT"
+---
+
+通过 OneBot 11 协议接入,需选择使用``OneBot v11``作为适配器。
+
+# LiteLoaderQQNT
+
+- [LiteLoaderQQNT 的 OneBot API 插件](https://github.com/LLOneBot/LLOneBot) 注入 QQ 客户端并将其转换为 OneBot 11 协议
+
+安装LiteLoaderQQNT的教程:https://llonebot.github.io/zh-CN/guide/getting-started
+
+
+
+确保地址中 IP地址 是 LangBot 运行的主机的地址(若在同一网络内运行则为 127.0.0.1)
+
+## Lagrange 对接
+
+接下来打开 LangBot 配置页面
+
+点击机器人,点击添加
+
+`平台/适配器选择`为`OneBot v11`
+
+
+
+
+注意,如果涉及多个 docker 容器的网络连接问题,请参考[网络配置详解](/zh/workshop/network-details)
+
diff --git a/docs/zh/deploy/platforms/qq/aiocqhttp/napcat.md b/zh/usage/platforms/qq/aiocqhttp/napcat.mdx
similarity index 73%
rename from docs/zh/deploy/platforms/qq/aiocqhttp/napcat.md
rename to zh/usage/platforms/qq/aiocqhttp/napcat.mdx
index 9ed352b23..19d92c49e 100644
--- a/docs/zh/deploy/platforms/qq/aiocqhttp/napcat.md
+++ b/zh/usage/platforms/qq/aiocqhttp/napcat.mdx
@@ -1,33 +1,35 @@
-# 部署消息平台 NapCat
-
-通过 OneBot 11 协议接入,需选择使用``OneBot v11``作为适配器。
-
-## NapCat安装教程
-
-按照 [NapCat 官方文档安装](https://napcat.napneko.icu/guide/start-install)
-
-## NapCat配置教程
-
-仅以 webui 操作为例,其他的配置方式请查看 NapCat 文档。
-
-登录后,在控制台或Bash上可以查看日志 , 找到 `[NapCat] [WebUi] WebUi Publish Panel Url: http://x.x.x.x:6099/webui?token=xxxxx `
-
-
-复制Url到浏览器或者 Windows11 按照Ctrl点击Url即可 扫码登录后即可进入网络配置一页
-
-点击添加网络配置 WebSocket客户端 点击启用 然后在Url一栏填入 `ws://127.0.0.1:2280/ws` 并保存即可
-
-
-## NapCat 对接
-
-接下来打开 LangBot 配置页面
-
-点击机器人,点击添加
-
-`平台/适配器选择`为`OneBot v11`
-
-
-
-::: info
-注意,如果涉及多个 docker 容器的网络连接问题,请参考[网络配置详解](/zh/workshop/network-details)
-:::
\ No newline at end of file
+---
+title: "部署消息平台 NapCat"
+---
+
+通过 OneBot 11 协议接入,需选择使用``OneBot v11``作为适配器。
+
+## NapCat安装教程
+
+按照 [NapCat 官方文档安装](https://napcat.napneko.icu/guide/start-install)
+
+## NapCat配置教程
+
+仅以 webui 操作为例,其他的配置方式请查看 NapCat 文档。
+
+登录后,在控制台或Bash上可以查看日志 , 找到 `[NapCat] [WebUi] WebUi Publish Panel Url: http://x.x.x.x:6099/webui?token=xxxxx `
+
+
+复制Url到浏览器或者 Windows11 按照Ctrl点击Url即可 扫码登录后即可进入网络配置一页
+
+点击添加网络配置 WebSocket客户端 点击启用 然后在Url一栏填入 `ws://127.0.0.1:2280/ws` 并保存即可
+
+
+## NapCat 对接
+
+接下来打开 LangBot 配置页面
+
+点击机器人,点击添加
+
+`平台/适配器选择`为`OneBot v11`
+
+
+
+
+注意,如果涉及多个 docker 容器的网络连接问题,请参考[网络配置详解](/zh/workshop/network-details)
+
diff --git a/docs/zh/deploy/platforms/qq/official.md b/zh/usage/platforms/qq/official.mdx
similarity index 76%
rename from docs/zh/deploy/platforms/qq/official.md
rename to zh/usage/platforms/qq/official.mdx
index 886a7af34..468592897 100644
--- a/docs/zh/deploy/platforms/qq/official.md
+++ b/zh/usage/platforms/qq/official.mdx
@@ -1,15 +1,17 @@
-# 使用 QQ 官方机器人 API(使用websocket方式)
-
-:::warning
-QQ 官方已停止维护 WebSocket 方式,请使用 Webhook 方式。
-:::
-
-QQ官方机器人所有人均可申请,可以在频道和群聊中使用,私聊也可。
-
-## 注册 QQ 机器人
-
-前往[QQ开放平台](https://q.qq.com/#/),找到下方的 QQ 机器人文档,按照指引注册 QQ 频道机器人。
-
-## 获取凭证
-
-注册完成后,前往机器人控制台,找到 开发设置,获取 `AppId(机器人ID)` 和 `AppSecret(机器人密钥)`,接下来进入填写配置信息步骤。
\ No newline at end of file
+---
+title: "使用 QQ 官方机器人 API(使用websocket方式)"
+---
+
+
+QQ 官方已停止维护 WebSocket 方式,请使用 Webhook 方式。
+
+
+QQ官方机器人所有人均可申请,可以在频道和群聊中使用,私聊也可。
+
+## 注册 QQ 机器人
+
+前往[QQ开放平台](https://q.qq.com/#/),找到下方的 QQ 机器人文档,按照指引注册 QQ 频道机器人。
+
+## 获取凭证
+
+注册完成后,前往机器人控制台,找到 开发设置,获取 `AppId(机器人ID)` 和 `AppSecret(机器人密钥)`,接下来进入填写配置信息步骤。
diff --git a/zh/usage/platforms/qq/official_webhook.mdx b/zh/usage/platforms/qq/official_webhook.mdx
new file mode 100644
index 000000000..913a2d881
--- /dev/null
+++ b/zh/usage/platforms/qq/official_webhook.mdx
@@ -0,0 +1,82 @@
+---
+title: "使用 QQ 官方机器人 API(使用webhook方式)"
+---
+
+本文章只提供测试版机器人的发布,具体机器人上线请按照 [发布流程](https://q.qq.com/qqbot/#/home) 进行部署。
+
+
+目前 QQ 官方发布公告,禁止违规接入 AIGC 功能,请慎重使用。
+
+
+
+
+## 注册 QQ 机器人(测试机器人)
+
+### 配置机器人基本信息
+
+前往 [QQ开放平台](https://q.qq.com/#/) ,找到下方的 `应用管理` ,点击创建机器人,填写基本信息之后,进入机器人页面,如图:
+
+
+
+`首页` 选项中的 `发布流程` 即为上线机器人的步骤。由于部署的是测试版机器人,所以只需要进行其中的 `资料` 和 `沙箱配置` 。
+
+先进行资料填写,然后点击沙箱配置。
+
+#### 配置沙箱配置项
+
+点击 `沙箱配置` 。
+如果要部署在QQ群中,那么按照 `QQ群ID` 下方的要求进行选择群聊,在消息列表配置中添加有私聊权限的用户。
+如果要部署在QQ频道中,那么按照 `频道ID` 下方的要求选择频道ID,机器人类型为0。
+
+#### 配置开发管理项
+
+点击 `开发管理` 。
+
+
+
+记录其中的 `AppID` , `Token` , `AppSecret` ,并将 LangBot 所在服务器的IP地址填写到IP白名单中。
+
+## 对接 LangBot
+
+接下来打开 LangBot 配置页面
+
+点击机器人,点击添加
+
+`平台/适配器选择`为`QQ官方API`
+
+
+
+
+## 配置回调地址
+
+要求 LangBot 部署在具有公网 IP 的服务器上,并已成功启用 HTTPS。请根据文档[配置 HTTP 反向代理和 SSL](/zh/workshop/production/proxy-and-ssl) 操作。
+
+
+#### 后续配置
+
+若 Caddy 启动不成功,请自行阅读 [Caddy文档](https://caddy2.dengxiaolong.com/docs/quick-starts/caddyfile),或者加入 LangBot 社区群请求帮助。
+
+以下是一些可能出现的问题:
+
+- 没有开启443端口
+- 没有将域名解析到本机
+- 没有成功保存 Caddyfile
+
+### 设置管理端回调地址
+
+
+首先 **启动 LangBot** 。
+
+点击 机器人管理端网页中的 `回调配置`,勾选下面 `添加事件` 中的所有事件。
+
+进入 LangBot 配置页面,启用并且选择对应的QQ机器人,粘贴对应机器人配置页面中的 Webhook 回调地址,将其中的 IP 地址和端口改成之前 Caddy 配置的域名,在请求地址中填入。
+
+如图:
+
+
+
+比如域名为 `testlb.com`,那么请求地址中填写 `testlb.com/bots/xxxxxx-xxxxxx` ,点击确定配置。如果回调地址保存成功,那么意味着部署成功。若出现 `校验失败` 字样,请认真检查上述配置项是否填写正确。
+
+## 发布方式
+
+进入 `首页` 的发布流程 ,按照流程进行机器人发布,上线。
diff --git a/zh/usage/platforms/readme.mdx b/zh/usage/platforms/readme.mdx
new file mode 100644
index 000000000..190785667
--- /dev/null
+++ b/zh/usage/platforms/readme.mdx
@@ -0,0 +1,24 @@
+---
+title: "配置机器人 (Bots)"
+---
+
+机器人用于从消息平台接收消息事件并调用流水线处理消息。
+
+
+
+
+| 平台 | 状态 | 备注 |教程 |
+| ------ | ---- | ---- | ---- |
+| OneBot v11 | ✅ | 使用普通的 QQ 号作为机器人,需要使用独立的协议端,支持 OneBot v11 | [NapCat](/zh/usage/platforms/qq/aiocqhttp/napcat)
[Lagrange](/zh/usage/platforms/qq/aiocqhttp/lagrange)
[LiteLoaderQQNT](/zh/usage/platforms/qq/aiocqhttp/llonebot) |
+| QQ 官方机器人 | ✅ | 接入 QQ 开放平台的机器人 API | [教程](/zh/usage/platforms/qq/official_webhook) |
+| 企业微信 | ✅ | 企业内部机器人 | [教程](/zh/usage/platforms/wecom/wecom) |
+| 企业微信客服 | ✅ | 企业对外机器人 | [教程](/zh/usage/platforms/wecom/wecomcs) |
+| 企业微信智能机器人 | ✅ | 智能机器人 | [教程](/zh/usage/platforms/wecom/wecombot) |
+| 微信公众号 | ✅ | 微信公众平台机器人 | [教程](/zh/usage/platforms/wxoa) |
+| 飞书 | ✅ | | [教程](/zh/usage/platforms/lark) |
+| 钉钉 | ✅ | | [教程](/zh/usage/platforms/dingtalk) |
+| Discord | ✅ | | [教程](/zh/usage/platforms/discord) |
+| Telegram | ✅ | | [教程](/zh/usage/platforms/telegram) |
+| Slack | ✅ | | [教程](/zh/usage/platforms/slack) |
+| LINE | ✅ | | [教程](/zh/usage/platforms/line) |
+| KOOK | ✅ | | [教程](/zh/usage/platforms/kook) |
diff --git a/docs/zh/deploy/platforms/slack.md b/zh/usage/platforms/slack.mdx
similarity index 56%
rename from docs/zh/deploy/platforms/slack.md
rename to zh/usage/platforms/slack.mdx
index a14f6eb18..ed7d8047e 100644
--- a/docs/zh/deploy/platforms/slack.md
+++ b/zh/usage/platforms/slack.mdx
@@ -1,10 +1,12 @@
-# 接入 Slack 机器人
+---
+title: "接入 Slack 机器人"
+---
## 创建机器人
前往 [Slack的App平台](https://api.slack.com/apps)。
-
+
点击右上角的 `Create New App` ,选择从 `from a manifest` , 选择要部署机器人的工作区,选择下一步,
选择创建机器人。
@@ -13,15 +15,15 @@
进入左侧 `OAuth & Permissions` ,往下拉到 `Scopes`,添加如下机器人权限:
-
+
-
+
-添加上述权限之后,点击 `Install to your workspace`,记录下开头为 `xoxb-xxxxx`的token。
+添加上述权限之后,点击 `Install to your workspace`,记录下开头为 `xoxb-xxxxx`的token。
**注:**
-**若没有一次性添加成功权限,后续则需要重新安装App。**
+**若没有一次性添加成功权限,后续则需要重新安装App。**
进入左侧 `App Home` 栏,滑到最下面有 `Message Tab`,打开并且勾选
`Allow users to send Slash commands and messages from the messages tab`。
@@ -30,26 +32,25 @@
进入左侧 `Event Subscriptions` ,打开开关,点击 `Subscribe to bot events`,
将如下权限添加进去:
-
+
上述操作都完成之后,打开 LangBot Webui 配置页面,添加一个新的机器人
-
+
## 启动机器人
- Slack 配置项在填写完成后,**启动 LangBot**。
- 然后在刚才Event Subscriptions的 `Request URL`中,填写入你的 LangBot 的部署地址。
+
+由于 Slack 官方要求使用 https,请根据文档[配置 HTTP 反向代理和 SSL](/zh/workshop/production/proxy-and-ssl) 先配置好反向代理。
+
-::: info
-由于 Slack 官方要求使用 https,可以参考[QQ官方机器人部署流程中的Caddy配置部分](/zh/deploy/platforms/qq/official_webhook.md#操作caddy流程),注意端口使用 Slack 适配器配置的端口。
+Slack 配置项在填写完成后,**启动 LangBot**。
+启用并打开 LangBot 主页中的 Slack 机器人配置页面,复制其中的 WebHook URL,在刚才Event Subscriptions的 `Request URL`中,填写入 WebHook URL。
-:::
上述配置项都填写完成后,点击保存链接,若标识为绿色的**Verified**,那么就说明部署成功。
否则查看上述配置项是否填写正确。
## 效果图
-
-
+
diff --git a/docs/zh/deploy/platforms/telegram.md b/zh/usage/platforms/telegram.mdx
similarity index 54%
rename from docs/zh/deploy/platforms/telegram.md
rename to zh/usage/platforms/telegram.mdx
index 306483db6..22e90e2b8 100644
--- a/docs/zh/deploy/platforms/telegram.md
+++ b/zh/usage/platforms/telegram.mdx
@@ -1,22 +1,24 @@
-# 接入 Telegram 机器人
+---
+title: "接入 Telegram 机器人"
+---
## 创建机器人
前往 [Telegram 机器人创建页面](https://t.me/botfather),按照提示操作,创建一个机器人。
-
+
-
+
创建完成后,BotFather 会返回一个 API Token,请妥善保存。接下来关闭`Privacy Mode`,以便在群聊中使用。
-
+
## 对接 LangBot
打开 LangBot Webui 页面,创建一个新机器人
-
+
填写完成后启动 LangBot,若成功配置,日志中会出现`[02-02 16:48:15.263] manager.py (68) - [INFO] : 初始化平台适配器 1: telegram`的字样,保持 LangBot 运行。
@@ -24,6 +26,6 @@
现在在群里或者私聊机器人都可以正常使用了。
-
+
-
\ No newline at end of file
+
diff --git a/docs/zh/deploy/platforms/wechat/wechatpad.md b/zh/usage/platforms/wechat/wechatpad.mdx
similarity index 90%
rename from docs/zh/deploy/platforms/wechat/wechatpad.md
rename to zh/usage/platforms/wechat/wechatpad.mdx
index 4fe9d23d4..887d7f6a6 100644
--- a/docs/zh/deploy/platforms/wechat/wechatpad.md
+++ b/zh/usage/platforms/wechat/wechatpad.mdx
@@ -1,4 +1,6 @@
-# 通过 WeChatPadPro 接入个人微信
+---
+title: "通过 WeChatPadPro 接入个人微信"
+---
> 异地警告,没有 Socks5 代理或者本地服务器慎用!!!!!!
@@ -246,34 +248,34 @@ volumes:
## 登录微信
1. 成功启动 WeChatPadPro 后根据你的 serverip:port 访问 WeChatPadPro 的 Swagger
-
+
2. 填入 adminKey
-
+
3. 获取 token
** try it out `/admin/GanAuthKey1` 接口 body 中的 days 改为 365 即可
-
+
等待返回拿到里面的 token 回填入上面的 token
-
+
5. 登录微信
** try it out `/login/GetLoginQrCodeNew` 接口即可(和服务器是同市或者同省)
-
+
** 如果是云服务器,需要填入 Proxy
-
+
** 返回的参数中有登录二维码链接,打开扫码登录即可
-
+
** 手机登录后看是否有 iPad 在线,如果不在线就使用, 查看扫码状态
-
+
> 没有在线的话是因为什么(这是我已经成功登录,扫码状态过期了)
-
+
6. 记录你的 adminkey、token、wx 地址和访问地址(wxid 可以不管)
@@ -286,7 +288,7 @@ volumes:
- `wxid` 填写该登录账号的 wxid
- `wechatpad_token` 填写 WeChatPadPro 的 token
-
+
## 详细的 API 接口文档
@@ -398,4 +400,4 @@ docker compose up -d
3. 定期备份
- 备份 MySQL 数据
- - 备份应用数据
\ No newline at end of file
+ - 备份应用数据
diff --git a/zh/usage/platforms/wecom/wecom.mdx b/zh/usage/platforms/wecom/wecom.mdx
new file mode 100644
index 000000000..f94605282
--- /dev/null
+++ b/zh/usage/platforms/wecom/wecom.mdx
@@ -0,0 +1,79 @@
+---
+title: "部署企业微信机器人"
+---
+
+部署企业微信机器人接入 LangBot 。
+
+
+- 企业微信回调地址需要公网IP和域名,推荐您先参照[配置 HTTP 反向代理](/zh/workshop/production/proxy-and-ssl)来配置 LangBot 回调地址。
+
+
+## 记录企业ID
+
+打开[企业微信管理后台](https://work.weixin.qq.com/),点击`我的企业`,记录下最下面的`企业ID`。
+
+
+
+## 创建机器人
+
+点击` 应用管理 `,` 自建 `,` 创建应用`
+
+
+
+填写机器人基本信息:
+
+
+
+查看并记录机器人密钥(Secret):
+
+
+
+从企业微信客户端根据提示获取。
+
+## 开启通讯录同步权限
+
+
+- 目前 LangBot 仍在开发,所以未实现此配置项的相关功能。
+- 此配置项可以填写入随机字符,**不能为空**。
+
+
+点击`安全与管理`,`管理工具`,`通讯录同步`;先配置可信IP,添加部署 LangBot 的服务器IP。
+
+点击`查看secret`,记录下来,这是 contacts_secret(通讯录同步 secret)。
+
+
+
+## 在 LangBot 新建机器人
+
+在 LangBot 机器人页面,点击`创建机器人`,填入名称,选择`企业微信`,此步骤只需要填入 企业ID 和 机器人密钥,以及通讯录同步 secret。
+
+
+
+点击提交,跳转到机器人编辑页面,点击启用;此时即可看到 Webhook 回调地址,复制下来:
+
+
+
+## 设置回调地址
+
+回到企业微信的机器人管理页面,点击`接收消息`,`设置API接收`,将 LangBot 的 Webhook 回调地址填入`URL`中:
+
+
+
+点击 Token 和 EncodingAESKey 的`随机获取`,并记录下来,**保持此页开启**。返回到 LangBot 的企微机器人配置页面,将 Token 和 EncodingAESKey 填入,点击保存。
+
+
+
+再回到**刚刚填写 Webhook 回调地址的页面**,点击保存即可配置完成;如果出现**请求URL失败**,请再三检查你的配置项填写是否正确。
+
+## 配置应用的企业可信 IP
+
+回到该应用到管理页,在下方找到`企业可信 IP`,添加部署 LangBot 的服务器IP。
+
+
+
+点击保存即可。
+
+## 常见问题
+
+Q:企微上找不到机器人对话框?
+A:可以到企微管理页面上该应用的详情页,点击`功能`->`发送消息`->`发消息`,选择自己账号,发送消息,即可在自己的对话框中看到机器人。
diff --git a/docs/zh/deploy/platforms/wecom/wecombot.md b/zh/usage/platforms/wecom/wecombot.mdx
similarity index 53%
rename from docs/zh/deploy/platforms/wecom/wecombot.md
rename to zh/usage/platforms/wecom/wecombot.mdx
index 2071b0260..4e606c8ad 100644
--- a/docs/zh/deploy/platforms/wecom/wecombot.md
+++ b/zh/usage/platforms/wecom/wecombot.mdx
@@ -1,21 +1,23 @@
-# 部署企业微信智能机器人
+---
+title: "部署企业微信智能机器人"
+---
## 创建机器人
首先登录[企业微信管理后台](https://work.weixin.qq.com/wework_admin/frame#/)。
-
+
点击左边栏的`安全与管理`,点击`管理工具`里面的`智能机器人`。
如图:
-
+
点击`创建机器人`,拉至页面最底部,点击`API模式创建`,进入页面:
-
+
点击随机获取 Token 和 EncodingAESKey,然后填写上方的机器人基本信息,**注意设置可见范围**。
@@ -27,12 +29,20 @@
其中,令牌为 Token,消息加解密密钥为 EncodingAESKey,机器人ID填写入xxx(或者随便填写,后续会改),填写之后点击
`保存`,并`启用`机器人。
-
+
-返回企业微信机器人配置页面,在`URL回调`中填写入机器人回调地址(接受http),例:**http://xxx.xxx.xx.xx:2291/callback/command** 。若创建成功,则会跳转至详情页面,若出现`请求URL失败`字样,请再三检查上述操作是否一一完成。
+在 LangBot 主页中,启用并选择对应的机器人,点击进入配置页面,复制其中的 Webhook 回调地址
+
+
+推荐您先参照[配置 HTTP 反向代理](/zh/workshop/production/proxy-and-ssl)来配置 LangBot 回调地址。
+
+
+
+
+返回企业微信机器人配置页面将复制的webhook地址填写到`URL回调`中。若创建成功,则会跳转至详情页面,若出现`请求URL失败`字样,请再三检查上述操作是否一一完成。
创建成功之后的详情页:
-
+
复制企业微信机器人详情页的`Bot ID`,回到LangBot管理页面,将部署的智能机器人的机器人Id改为复制的ID,重新启动机器人。
@@ -40,7 +50,7 @@
进入企业微信,点击 `➕`,如图:
-
+
点击`企业创建的`,选择创建的机器人,进入聊天界面。
@@ -48,8 +58,4 @@
## 效果图
-
-
-
-
-
+
diff --git a/docs/zh/deploy/platforms/wecom/wecomcs.md b/zh/usage/platforms/wecom/wecomcs.mdx
similarity index 59%
rename from docs/zh/deploy/platforms/wecom/wecomcs.md
rename to zh/usage/platforms/wecom/wecomcs.mdx
index 1f4d715a0..3202acceb 100644
--- a/docs/zh/deploy/platforms/wecom/wecomcs.md
+++ b/zh/usage/platforms/wecom/wecomcs.mdx
@@ -1,26 +1,25 @@
-# 部署企业微信客服
+---
+title: "部署企业微信客服"
+---
-:::info
-
-本文详细讲述 LangBot 部署到企业微信客服号的过程,此功能可以将客服号与普通微信进行对话。若只需要在企业微信内部使用,请参考[企业微信内部应用实现](wecom.md)。
+
**部署企业微信客服号需要企业资质**,具体查看[企业微信客服号接入指南](https://developer.work.weixin.qq.com/document/path/94638),并且根据此文档提供对应的企业资质证明。
-:::
+
## 效果图
-
+
## 对接 LangBot
-
+
-后续的配置方式和配置项和[企业微信内部应用](wecom.md)一样,只是不需要 `contacts_secret`。
+后续的配置方式和配置项和[企业微信内部应用](wecom)一样,只是不需要 `contacts_secret`。
## 注意事项
1. 一定要按照上文的企业微信官方文档步骤走,将客服账号添加入 `api 管理`中。
2. 步骤与企业微信内部应用一样,不要漏看,同样需要保存回调地址,因为本质上只是在企业微信内部应用上增加了其他的权限。
3. LangBot 不会读取敏感信息如聊天记录和企业资质内容。
-
diff --git a/docs/zh/deploy/platforms/wxoa.md b/zh/usage/platforms/wxoa.mdx
similarity index 68%
rename from docs/zh/deploy/platforms/wxoa.md
rename to zh/usage/platforms/wxoa.mdx
index 65f157699..bd5b8c85f 100644
--- a/docs/zh/deploy/platforms/wxoa.md
+++ b/zh/usage/platforms/wxoa.mdx
@@ -1,4 +1,6 @@
-# 部署微信公众号机器人
+---
+title: "部署微信公众号机器人"
+---
部署微信公众号机器人接入 LangBot 。
@@ -20,7 +22,7 @@
进入[微信公众平台](https://mp.weixin.qq.com/),如果已经有公众号账号,那么直接扫码登录,进入控制台。
如果之前没有注册过公众号,那么点击立即注册,选择 `公众号`,依次填写信息,进入控制台。控制台是这样的:
-
+
## 设置回调地址
@@ -28,15 +30,13 @@
### 获取配置项
点击`设置与开发`,`开发接口管理`,出现这样的页面:
-
+
记录下来`开发者ID(AppID)`,`开发者密码(AppSecret)`,并将部署 LangBot 的服务器添加入`IP白名单`。
-### 设置反向代理
+### 为 LangBot 设置反向代理
-由于微信公众号的只支持http(80端口),https(443端口),所以本文假设80端口已被占用,使用443端口反向代理至 LangBot 。
-
-具体的反向代理配置教程与[QQ官方机器人反向代理配置](/zh/deploy/platforms/qq/official_webhook.md#操作caddy流程)相同,只是将`reverse_proxy 127.0.0.1:2284`改为`reverse_proxy 127.0.0.1:2287`。
+由于微信公众号的只支持http(80端口),https(443端口),请根据文档[配置 HTTP 反向代理和 SSL](/zh/workshop/production/proxy-and-ssl) 操作。
### 保存回调地址
@@ -44,13 +44,10 @@
至此,打开 LangBot Webui 页面,创建一个新的机器人,将获取到的四个配置项( AppID , AppSecret , token , EncodingAESKey )填入
-
+
在配置项中,`Mode`选项为选择的接入模式,其中默认为`drop`,`drop` 为传统收发消息模式,`passive` 为发送任意文字获取回复模式。
`LoadingMessage`选项为加载信息,可以更改为其他内容,仅在模式为`passive`下有效。将 `enable` 设置为 `true` 。
-填写成功后,**启动 LangBot** 。
-
-将 URL 填写为`https://your_domain_name/callback/command`,其中的 `your_domain_name` 就是 Caddy 中填写的域名。点击保存。如果可以保存成功,那么意味着部署成功。如果出现**系统发生错误,请稍后重试**,那么请重新检查以上配置内容是否填写正确。
-
+填写成功后,在 LangBot 主页中,启用并选择对应的机器人,点击进入配置页面,复制其中的 Webhook 回调地址,返回微信公众号机器人配置页面,填写到`URL`。比如 URL 填写为`https://your_domain_name/bots/xxxxx`,其中的 `your_domain_name` 就是 Caddy 中填写的域名。点击保存。如果可以保存成功,那么意味着部署成功。如果出现**系统发生错误,请稍后重试**,那么请重新检查以上配置内容是否填写正确。
diff --git a/zh/workshop/302ai-integration.mdx b/zh/workshop/302ai-integration.mdx
new file mode 100644
index 000000000..762cf8d57
--- /dev/null
+++ b/zh/workshop/302ai-integration.mdx
@@ -0,0 +1,7 @@
+---
+title: "接入 302.AI 的模型"
+---
+
+打开 WebUI 页面,添加模型时选择[302.AI](https://share.302.ai/SuTG99)即可
+
+
diff --git a/docs/zh/workshop/impl-platform-adapter.md b/zh/workshop/impl-platform-adapter.mdx
similarity index 93%
rename from docs/zh/workshop/impl-platform-adapter.md
rename to zh/workshop/impl-platform-adapter.mdx
index 495143cc4..000ed7457 100644
--- a/docs/zh/workshop/impl-platform-adapter.md
+++ b/zh/workshop/impl-platform-adapter.mdx
@@ -1,4 +1,6 @@
-# 实现一个消息平台适配器
+---
+title: "实现一个消息平台适配器"
+---
本文章将以`aiocqhttp`适配器为例,讲解如何为 LangBot 实现一个新的消息平台适配器,以便接入 WhatsApp、Discord 等新的消息平台协议。
@@ -40,11 +42,11 @@ class AiocqhttpAdapter(adapter.MessageSourceAdapter):
下图展示了两种情况的处理模式:消息平台协议无 SDK、有成熟 SDK。第一种情况我们需要根据消息平台协议的文档,自行实现连接管理、网络格式数据转换成 LB 消息 Python 对象。第二种情况,消息平台有成熟的 SDK,我们只需要根据 SDK 的文档,调用 SDK 的 API 创建连接,注册事件监听器,并实现消息转换器。
-
+
在`pkg.platform.sources.aiocqhttp`文件里,我们可以看到不只有`AiocqhttpAdapter`,还有`class AiocqhttpMessageConverter(adapter.MessageConverter):` 和 `class AiocqhttpEventConverter(adapter.EventConverter):`。
- `MessageConverter` 用于进行 LangBot 消息和平台消息的互相转换。
- `EventConverter` 用于进行 LangBot 事件和平台事件的互相转换。
-TBC...
\ No newline at end of file
+TBC...
diff --git a/docs/zh/workshop/mcp-details.md b/zh/workshop/mcp-details.mdx
similarity index 83%
rename from docs/zh/workshop/mcp-details.md
rename to zh/workshop/mcp-details.mdx
index 9168ca4da..4e7f1f1f5 100644
--- a/docs/zh/workshop/mcp-details.md
+++ b/zh/workshop/mcp-details.mdx
@@ -1,4 +1,6 @@
-# MCP 生态详解
+---
+title: "MCP 生态详解"
+---
[MCP协议](https://modelcontextprotocol.io/) 是一种描述应用程序与 LLM 交互的协议,目前已经被多种产品采用。LangBot 可以作为 MCP Client 接入 MCP Server,大量扩展工具供 LLM 在与用户对话时使用。
@@ -11,16 +13,14 @@
- 基于 http 协议的 web 服务,通过 http 协议与 LangBot 通信
-:::info
-
-- 可以到 [MCP Server 列表](https://github.com/punkpeye/awesome-mcp-servers) 查看已有的 MCP Server。
+
- 在线托管的 MCP Server 可以到 [Composio MCP](https://mcp.composio.dev/) 查找。
- 自行编写 MCP Server 可以参考 [MCP 协议文档](https://modelcontextprotocol.io/quickstart/server) 和 [MCP Server 示例](https://modelcontextprotocol.io/examples)。
-:::
+
## 配置 MCP Server
查看 [系统设置文档](/zh/deploy/settings.html)
-配置完成后即可在聊天中通过`!func`命令查看已经注册的 MCP 工具,在与支持 Function Calling 的模型对话时,LangBot 会自动调用 MCP 工具。
\ No newline at end of file
+配置完成后即可在聊天中通过`!func`命令查看已经注册的 MCP 工具,在与支持 Function Calling 的模型对话时,LangBot 会自动调用 MCP 工具。
diff --git a/docs/zh/workshop/network-details.md b/zh/workshop/network-details.mdx
similarity index 76%
rename from docs/zh/workshop/network-details.md
rename to zh/workshop/network-details.mdx
index 35779c138..c3521b50e 100644
--- a/docs/zh/workshop/network-details.md
+++ b/zh/workshop/network-details.mdx
@@ -1,62 +1,56 @@
-# 网络配置详解
-
-::: info
-某些消息平台(如 QQ 个人号)需要使用独立的协议端来处理消息,如果您使用的是此类消息平台,请参考以下网络配置。
-同时,若您的 LangBot 实例需要连接其他在容器中运行的服务(如 Ollama),也可以参考以下配置,自行替换`消息平台`为`您要连接的服务`。
-:::
-
-LangBot 和部分消息平台均可采用 Docker 部署,以下是四种情况下的网络配置详解。
-
-:::info 目录
-[[toc]]
-:::
-
-## LangBot 和消息平台均运行在 Docker 容器中
-
-如果消息平台(NapCat/Lagrange)和 LangBot 均使用 Docker 启动,那么你需要配置 Docker 的网络连接。
-
-新建一个网络:
-
-```bash
-docker network create langbot-network
-```
-
-在 LangBot 目录的 `docker-compose.yaml` 文件中添加网络配置(添加到 `services.langbot` 字段下,并在 `networks` 字段下添加 `langbot-network` 网络配置):
-
-```yaml
-services:
- langbot:
- ...
- networks:
- - langbot-network
- ...
-
-networks:
- langbot-network:
- external: true
-```
-
-然后在消息平台的 `docker-compose.yaml` 文件中添加同样的网络配置(如果是直接 docker run 命令启动的,请在启动命令中添加 `--network langbot-network`)。接着在消息平台配置文件中,把 WS 反向连接地址中的 IP 地址修改为 `langbot`(例如:`ws://langbot:2280/ws`)。
-
-重启两个容器。
-
-
-
-## 仅 LangBot 运行在 Docker 容器中
-
-当只有 LangBot 采用 Docker 部署时,默认已经映射 2280 到 2290 端口到容器外。此时 LangBot 只能作为 WebSocket 服务器,接受消息平台作为客户端连接。
-
-请把消息平台设置为 ReverseWebSocket(称为 `反向 ws` 或 `WebSocket 客户端`),端口对应 LangBot 的 aiocqhttp 适配器启用的端口,连接本地 127.0.0.1 即可。
-
-
-## LangBot 和消息平台都不使用 Docker 部署
-
-根据文档配置消息平台和 LangBot 设置,两者端口设置为统一的不被占用的即可,都连接本地 127.0.0.1。
-
-## 仅消息平台运行在 Docker 容器中(不建议)
-
-:::warning
-仅支持 Linux ,或其他支持 host 模式 docker 网络的系统。
-:::
-
-目前 LangBot 的 aiocqhttp 适配器仅支持 反向 WebSocket 连接,当消息平台运行在 Docker 容器中而 LangBot 直接运行在宿主机时,必须由 消息平台作为客户端连接 LangBot。此时只能将 消息平台的 network 设置为 `host` 模式,再设置其 WS 连接地址为 127.0.0.1,端口对应 LangBot 的 aiocqhttp 适配器启用的端口。
+---
+title: "网络配置详解"
+---
+
+
+ 若您的 LangBot 实例需要连接其他在容器中运行的服务(如 Ollama),也可以参考以下配置,自行替换`消息平台`为`您要连接的服务`。
+
+
+LangBot 和部分消息平台均可采用 Docker 部署,以下是四种情况下的网络配置详解。
+
+## LangBot 和消息平台均运行在 Docker 容器中
+
+如果消息平台(NapCat/Lagrange)和 LangBot 均使用 Docker 启动,那么你需要配置 Docker 的网络连接。
+
+新建一个网络:
+
+```bash
+docker network create langbot-network
+```
+
+在 LangBot 目录的 `docker-compose.yaml` 文件中添加网络配置(添加到 `services.langbot` 字段下,并在 `networks` 字段下添加 `langbot-network` 网络配置):
+
+```yaml
+services:
+ langbot:
+ ...
+ networks:
+ - langbot-network
+ ...
+
+networks:
+ langbot-network:
+ external: true
+```
+
+然后在消息平台的 `docker-compose.yaml` 文件中添加同样的网络配置(如果是直接 docker run 命令启动的,请在启动命令中添加 `--network langbot-network`)。接着在消息平台配置文件中,把 WS 反向连接地址中的 IP 地址修改为 `langbot`(例如:`ws://langbot:2280/ws`)。
+
+重启两个容器。
+
+## 仅 LangBot 运行在 Docker 容器中
+
+当只有 LangBot 采用 Docker 部署时,默认已经映射 2280 到 2290 端口到容器外。此时 LangBot 只能作为 WebSocket 服务器,接受消息平台作为客户端连接。
+
+请把消息平台设置为 ReverseWebSocket(称为 `反向 ws` 或 `WebSocket 客户端`),端口对应 LangBot 的 aiocqhttp 适配器启用的端口,连接本地 127.0.0.1 即可。
+
+## LangBot 和消息平台都不使用 Docker 部署
+
+根据文档配置消息平台和 LangBot 设置,两者端口设置为统一的不被占用的即可,都连接本地 127.0.0.1。
+
+## 仅消息平台运行在 Docker 容器中(不建议)
+
+
+ 仅支持 Linux ,或其他支持 host 模式 docker 网络的系统。
+
+
+目前 LangBot 的 aiocqhttp 适配器仅支持 反向 WebSocket 连接,当消息平台运行在 Docker 容器中而 LangBot 直接运行在宿主机时,必须由 消息平台作为客户端连接 LangBot。此时只能将 消息平台的 network 设置为 `host` 模式,再设置其 WS 连接地址为 127.0.0.1,端口对应 LangBot 的 aiocqhttp 适配器启用的端口。
\ No newline at end of file
diff --git a/docs/zh/workshop/newapi-integration.md b/zh/workshop/newapi-integration.mdx
similarity index 88%
rename from docs/zh/workshop/newapi-integration.md
rename to zh/workshop/newapi-integration.mdx
index e05db54c2..a9a140916 100644
--- a/docs/zh/workshop/newapi-integration.md
+++ b/zh/workshop/newapi-integration.mdx
@@ -1,4 +1,6 @@
-# LangBot 接入 New API
+---
+title: "LangBot 接入 New API"
+---
New API 是新一代大模型网关与 AI 资产管理系统,旨在解决多 AI 服务商接入分散、成本难管控、服务稳定性不足等问题,核心优势集中在三点:
@@ -35,10 +37,10 @@ docker run --name new-api -d --restart always \
- 请求 URL:输入`http://服务器IP:3000/v1`
- API Key:输入 New API 中创建的令牌
-
+
2. **流水线选择使用刚才配置的模型**
-
+
-3. 接下来就可以使用 New API 中的模型了
\ No newline at end of file
+3. 接下来就可以使用 New API 中的模型了
diff --git a/docs/zh/workshop/ppio-integration.md b/zh/workshop/ppio-integration.mdx
similarity index 57%
rename from docs/zh/workshop/ppio-integration.md
rename to zh/workshop/ppio-integration.mdx
index 17e89d5a4..9c023f856 100644
--- a/docs/zh/workshop/ppio-integration.md
+++ b/zh/workshop/ppio-integration.mdx
@@ -1,5 +1,7 @@
-# 接入 PPIO 派欧云 API 的模型
+---
+title: "接入 PPIO 派欧云 API 的模型"
+---
打开 WebUI 页面,添加模型时选择[派欧云](https://ppio.cn/user/register?from=ppinfra&invited_by=QJKFYD&utm_source=github_langbot)即可
-
\ No newline at end of file
+
diff --git a/zh/workshop/production/proxy-and-ssl.mdx b/zh/workshop/production/proxy-and-ssl.mdx
new file mode 100644
index 000000000..0d65378c8
--- /dev/null
+++ b/zh/workshop/production/proxy-and-ssl.mdx
@@ -0,0 +1,127 @@
+---
+title: "配置 HTTP 反向代理或通过网关访问 LangBot"
+---
+
+LangBot 内部未支持内置 SSL 提供 HTTPS 服务,若您需要解析域名到 LangBot 实例,或需要使用 HTTPS 访问 LangBot WebUI 和各个机器人的 Webhook 地址,请参考此文档部署 NGINX 或 Caddy 实现 HTTP 反向代理。
+
+您需要将 LangBot 部署在具有公网 IP 的主机上,并购买域名,将域名解析到主机公网 IP 上。
+
+
+若您需要使用 QQ官方机器人、微信公众号、企业微信、Slack、LINE 等需要 Webhook 回调地址的机器人,请务必按照本文档配置 HTTP 反向代理。
+
+
+## Caddy
+
+Caddy 是一个现代的 HTTP 服务器,支持自动 HTTPS 证书申请和续期,支持反向代理,支持自动配置 DNS 解析。
+
+[Caddy 安装文档](https://caddy2.dengxiaolong.com/docs/install)。选择对应自己操作系统的安装步骤,进行安装。
+
+### 填写 Caddyfile
+
+本文假设使用 ubuntu 系统部署 LangBot ,那么在系统中,Caddyfile 的默认位置为 `/etc/caddy/Caddyfile`。
+使用 vim 或 nano 编辑 Caddyfile ,Caddyfile文件填写为:
+
+```json
+your.domain.com {
+ reverse_proxy 127.0.0.1:5300
+}
+```
+
+
+若您的 Caddy 和 LangBot 使用容器部署,请查看[容器网络配置详解](/zh/workshop/network-details)
+
+
+现在,您即可通过浏览器访问 `https://your.domain.com` 访问 LangBot WebUI。
+
+### 设置机器人回调地址前缀
+
+若您需要使用 QQ官方机器人、微信公众号、企业微信、Slack、LINE 等需要 Webhook 回调地址的机器人,请在 data/config.yaml 文件中设置`api.webhook_prefix`为您的域名。例如:`https://your.domain.com`。
+
+之后,在机器人管理页面,您将看到正确显示的回调地址。
+
+## NGINX
+
+NGINX 也是常用的 HTTP 服务器和反向代理工具,可以用来实现 LangBot 的 HTTPS 接入。
+
+### 安装 NGINX
+
+在 Ubuntu 上可以通过以下命令安装 NGINX:
+
+```bash
+sudo apt update
+sudo apt install nginx
+```
+
+### 准备 SSL 证书
+
+您可以使用 [Let’s Encrypt](https://letsencrypt.org/) 免费申请 SSL 证书。推荐使用 [Certbot](https://certbot.eff.org/) 工具来获取证书:
+
+```bash
+sudo apt install certbot python3-certbot-nginx
+sudo certbot --nginx
+```
+
+按照提示输入域名,证书申请与 NGINX 配置会自动完成。请参考如下内容完成 NGINX 配置。
+
+### 配置 NGINX 反向代理
+
+LangBot 的流水线调试功能需要使用 WebSocket 连接,因此需要配置 NGINX 支持 WebSocket。
+
+编辑 NGINX 配置文件 `/etc/nginx/sites-available/langbot`(可以使用 vim 或 nano 编辑器):
+
+```nginx
+# WebSocket 连接升级映射(放在 server 块之外)
+map $http_upgrade $connection_upgrade {
+ default upgrade;
+ '' close;
+}
+
+server {
+ listen 80;
+ server_name your.domain.com;
+ # 将 HTTP 流量重定向到 HTTPS
+ return 301 https://$host$request_uri;
+}
+
+server {
+ listen 443 ssl;
+ server_name your.domain.com;
+
+ ssl_certificate /etc/letsencrypt/live/your.domain.com/fullchain.pem;
+ ssl_certificate_key /etc/letsencrypt/live/your.domain.com/privkey.pem;
+
+ ssl_protocols TLSv1.2 TLSv1.3;
+ ssl_ciphers HIGH:!aNULL:!MD5;
+
+ # 反向代理到 LangBot 实例
+ location / {
+ proxy_pass http://127.0.0.1:5300;
+ proxy_set_header Host $host;
+ proxy_set_header X-Real-IP $remote_addr;
+ proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
+ proxy_set_header X-Forwarded-Proto $scheme;
+
+ # WebSocket 支持
+ proxy_http_version 1.1;
+ proxy_set_header Upgrade $http_upgrade;
+ proxy_set_header Connection $connection_upgrade;
+ proxy_read_timeout 86400;
+ }
+}
+```
+
+将 `your.domain.com` 替换为您实际的域名。
+
+启用此配置并重启 NGINX:
+
+```bash
+sudo ln -s /etc/nginx/sites-available/langbot /etc/nginx/sites-enabled/langbot
+sudo nginx -t
+sudo systemctl reload nginx
+```
+
+### 设置机器人回调地址前缀
+
+同样,在 `data/config.yaml` 配置文件中将 `api.webhook_prefix` 设置为 `https://your.domain.com`,这样机器人 Webhook 回调地址才会正确。
+
+完成上述配置后,即可通过 `https://your.domain.com` 安全访问 LangBot WebUI 和机器人 Webhook 服务。
diff --git a/docs/zh/workshop/shengsuanyun-integration.md b/zh/workshop/shengsuanyun-integration.mdx
similarity index 66%
rename from docs/zh/workshop/shengsuanyun-integration.md
rename to zh/workshop/shengsuanyun-integration.mdx
index 3b2570485..3e1511c1a 100644
--- a/docs/zh/workshop/shengsuanyun-integration.md
+++ b/zh/workshop/shengsuanyun-integration.mdx
@@ -1,4 +1,6 @@
-# 接入来自胜算云的模型
+---
+title: "接入来自胜算云的模型"
+---
胜算云是一家提供大模型和 GPU 资源的平台,支持将国内外各种大模型接入 LangBot,包括 Claude、GPT、DeepSeek、Gemini 等。
@@ -10,10 +12,10 @@
在胜算云顶部进入`大厂模型Router`,即可查看可用的模型列表,并复制模型名称。
-
+
前往 LangBot 模型管理页,添加模型(选择胜算云提供商,填入模型名称和 API Key):
-
+
-现在即可在流水线中选择使用该模型。
\ No newline at end of file
+现在即可在流水线中选择使用该模型。
diff --git a/docs/zh/workshop/tokenpony-integration.md b/zh/workshop/tokenpony-integration.mdx
similarity index 63%
rename from docs/zh/workshop/tokenpony-integration.md
rename to zh/workshop/tokenpony-integration.mdx
index 2da2a0dff..f3903d658 100644
--- a/docs/zh/workshop/tokenpony-integration.md
+++ b/zh/workshop/tokenpony-integration.mdx
@@ -1,6 +1,8 @@
-# 接入来自小马算力的模型
+---
+title: "接入来自小马算力的模型"
+---
-
+
TokenPony(小马算力)提供统一的API,可以通过单一端点访问数百个AI模型,同时自动处理回退并选择最具成本效益的选项。在 LangBot 中已完美适配,可按照以下步骤添加来自小马算力的模型。
@@ -8,11 +10,11 @@ TokenPony(小马算力)提供统一的API,可以通过单一端点访问
点击[链接](https://www.tokenpony.cn/453z1)注册小马算力账号,完成后点击右上角账户按钮,点击`API Keys`
-
+
生成并复制 API Key。
-
+
## 使用聊天模型
@@ -20,6 +22,6 @@ TokenPony(小马算力)提供统一的API,可以通过单一端点访问
前往 LangBot 模型管理页,添加模型(选择小马算力提供商,填入模型名称和 API Key):
-
+
-现在即可在流水线中选择使用该模型。
\ No newline at end of file
+现在即可在流水线中选择使用该模型。