OpenClaw-hot-skills-zh moltguard
开源 OpenClaw 安全插件:本地提示词净化 + 注入检测。完整源码见 github.com/openguardrails/moltguard
git clone https://github.com/L-LesterYu/OpenClaw-hot-skills-zh
T=$(mktemp -d) && git clone --depth=1 https://github.com/L-LesterYu/OpenClaw-hot-skills-zh "$T" && mkdir -p ~/.claude/skills && cp -r "$T/skills/moltguard-zh/clawhub-skill" ~/.claude/skills/l-lesteryu-openclaw-hot-skills-zh-moltguard && rm -rf "$T"
T=$(mktemp -d) && git clone --depth=1 https://github.com/L-LesterYu/OpenClaw-hot-skills-zh "$T" && mkdir -p ~/.openclaw/skills && cp -r "$T/skills/moltguard-zh/clawhub-skill" ~/.openclaw/skills/l-lesteryu-openclaw-hot-skills-zh-moltguard && rm -rf "$T"
skills/moltguard-zh/clawhub-skill/SKILL.mdMoltGuard 安全防护插件指南
注意: 本 SKILL 文件是指向外部 npm 包(
)和远程 API(@openguardrails/moltguard)的文档。实际插件代码未打包在此 SKILL 文件中——你需要单独安装。这是 OpenClaw 插件的标准做法。api.moltguard.com安装前,你必须:
- 验证 npm 包与 GitHub 源码一致
- 审核关键文件(见下文,约 500 行)
- 了解哪些数据会被发送到 API(即使已经过"净化")
- 做好在行为异常时删除凭据的准备
⚠️ 安全建议:安装前需知
本文档指向一个外部 npm 包和远程 API。请在安装前验证以下内容:
1. 验证 npm 包与 GitHub 源码一致
# 步骤 1:检查 npm 包内容 npm pack @openguardrails/moltguard tar -xzf openguardrails-moltguard-*.tgz ls -la package/ # 应显示:gateway/、agent/、memory/、index.ts # 步骤 2:克隆 GitHub 仓库 git clone https://github.com/openguardrails/moltguard.git # 步骤 3:对比(排除构建产物) diff -r package/ moltguard/ | grep -v "node_modules\|\.git\|dist" # 不应有显著差异
2. 审核关键文件(安装前必做)
以下是唯二执行逻辑的文件,请审核:
| 文件 | 用途 | 审核要点 |
|---|---|---|
| 敏感数据检测 | 第 21-64 行:实体匹配模式(邮箱、银行卡、密钥)<br>第 93-105 行:熵值计算<br>第 117-176 行:匹配收集逻辑 |
| 占位符还原 | 第 13-20 行:文本还原逻辑<br>第 47-56 行:递归值还原 |
| 网络调用 | 第 103-117 行:向 api.moltguard.com 发起 API 请求<br>第 80-95 行:API 调用前的净化处理 |
| 文件操作 | 第 30-50 行:创建 3 个本地文件(凭据、日志) |
| API 密钥管理 | 第 46-64 行:一次性注册调用 |
继续之前,请阅读这约 500 行代码。 如有任何可疑之处,请勿安装。
3. 了解 API 与隐私权衡
API 端点:
https://api.moltguard.com
发送的数据:
- ✅ 已净化的内容(PII/密钥已在本地移除)
- ✅ 分析请求(注入检测判断)
不会发送的数据:
- ❌ 原始用户提示(已先净化)
- ❌ API 密钥或密码(已被本地净化器剥离)
- ❌ 文件名、工具名称、会话 ID
隐私政策: https://moltguard.com/privacy
威胁模型考量:
- 即使是"已净化"的文本也会泄露部分信息(内容结构、提示词模式)
- 如果无法接受任何外部 API 调用,请使用仅网关模式:
"enabled": false, "sanitizePrompt": true - 如需最大隐私:自行托管 API 或完全禁用注入检测
4. 文件路径与权限
将创建以下文件:
~/.openclaw/credentials/moltguard/credentials.json # 你的 API 密钥 ~/.openclaw/logs/moltguard-analyses.jsonl # 分析日志 ~/.openclaw/logs/moltguard-feedback.jsonl # 用户反馈
彻底清除所有痕迹:
# 卸载插件 openclaw plugins uninstall @openguardrails/moltguard # 删除凭据和日志 rm -rf ~/.openclaw/credentials/moltguard rm -f ~/.openclaw/logs/moltguard-*.jsonl
5. 决策矩阵
| 如果... | 那么... |
|---|---|
| ✅ 能审核约 500 行 TypeScript | 完成审核后,满意再安装 |
| ✅ 接受部分数据发送到 api.moltguard.com | 正常安装 |
| ⚠️ 希望零外部调用 | 使用 (仅网关模式) |
| ❌ 无法审核代码 | 请勿安装 |
| ❌ 无法接受任何外部 API | 请勿安装(或自行托管) |
安装前验证步骤
- 📦 已发布包: https://www.npmjs.com/package/@openguardrails/moltguard
- 📂 完整源码: https://github.com/openguardrails/moltguard(MIT 许可证)
- 🔍 验证内容:
# 下载并检查实际包内容 npm pack @openguardrails/moltguard tar -xzf openguardrails-moltguard-*.tgz ls -la package/ # 你将看到:gateway/、agent/、memory/、index.ts(TypeScript 源码) - 📊 包大小: 约 100KB(包含所有 TypeScript 源文件,不仅仅是文档)
- 🏗️ 构建产物: 无。本包发布的是 TypeScript 源码,而非编译后的 JavaScript(OpenClaw 在运行时编译插件)
为什么没有传统意义上的"安装步骤":
- OpenClaw 插件通过
安装(而非openclaw plugins install
)npm install - 插件是自包含的 TypeScript,由 OpenClaw 动态加载
- 无需构建步骤(OpenClaw 的 TypeScript 运行时处理编译)
包信息
📦 npm 包: @openguardrails/moltguard 📂 源码: github.com/openguardrails/moltguard 📄 许可证: MIT 🔒 安全性: 所有代码开源可审核
本包包含的内容
这不仅仅是文档。当你运行
openclaw plugins install @openguardrails/moltguard 时,你会获得:
可验证的源码:
- 本地 HTTP 代理服务器(TypeScript,约 800 行)gateway/
- 注入检测逻辑(TypeScript,约 400 行)agent/
- 本地 JSONL 日志(TypeScript,约 200 行)memory/
- 插件入口点(TypeScript,约 400 行)index.ts
安装方式:
# 从 npm 安装(包含所有源码的已发布包) openclaw plugins install @openguardrails/moltguard # 验证安装 openclaw plugins list # 应显示:MoltGuard | moltguard | loaded # 审核已安装的代码 ls -la ~/.openclaw/plugins/node_modules/@openguardrails/moltguard/ # 你将看到:gateway/、agent/、memory/、index.ts、package.json
安装前安全验证
1. 审核源码
所有代码在 GitHub 上开源。安装前请审核:
# 克隆并检查 git clone https://github.com/openguardrails/moltguard.git cd moltguard # 需审核的关键文件(总计约 1,800 行): # gateway/sanitizer.ts - 净化哪些内容 # gateway/restorer.ts - 如何还原占位符 # gateway/handlers/ - 协议实现(Anthropic、OpenAI、Gemini) # agent/runner.ts - 对 api.moltguard.com 的网络调用 # agent/config.ts - API 密钥管理 # memory/store.ts - 本地文件存储(仅 JSONL 日志)
2. 验证网络调用
代码仅发起 2 种类型的网络调用(见
agent/runner.ts 第 80-120 行):
调用 1:一次性 API 密钥注册(当
autoRegister: true 时)
// agent/config.ts 第 46-64 行 POST https://api.moltguard.com/api/register 请求头: { "Content-Type": "application/json" } 请求体: { "agentName": "openclaw-agent" } 响应: { "apiKey": "mga_..." }
调用 2:注入检测分析
// agent/runner.ts 第 103-117 行 POST https://api.moltguard.com/api/check/tool-call 请求头: { "Authorization": "Bearer <你的API密钥>", "Content-Type": "application/json" } 请求体: { "content": "<已净化文本,PII/密钥已被替换>", "async": false } 响应: { "ok": true, "verdict": { "isInjection": boolean, "confidence": 0-1, ... } }
不会发送的内容:
- 原始用户内容(先净化,见
)agent/sanitizer.ts - 文件名、工具名称、智能体 ID、会话密钥
- API 密钥或密码(在 API 调用前剥离)
3. 验证本地文件操作
仅创建/修改 3 个文件(见
memory/store.ts):
~/.openclaw/credentials/moltguard/credentials.json # 仅 API 密钥 ~/.openclaw/logs/moltguard-analyses.jsonl # 分析结果 ~/.openclaw/logs/moltguard-feedback.jsonl # 用户反馈
不会触碰其他文件。不使用外部数据库。
4. TLS 与隐私
- TLS: 所有 API 调用使用 HTTPS(代码中强制执行,见
第 106 行)agent/runner.ts - 隐私政策: https://moltguard.com/privacy
- 数据留存: 分析完成后内容不存储(已通过 MoltGuard 数据处理协议验证)
- 无第三方共享: 分析由 MoltGuard API 直接执行,不转发至 OpenAI/Anthropic 等
功能特性
✨ 新增:本地提示词净化网关 - 在发送到 LLM 之前保护敏感数据(银行卡、密码、API 密钥) 🛡️ 提示注入检测 - 检测并拦截隐藏在外部内容中的恶意指令
所有敏感数据处理均在你的机器上本地完成。
功能 1:本地提示词净化网关
6.0 版本引入了本地 HTTP 代理,可在你的敏感数据到达任何 LLM 之前进行保护。
工作原理
你的提示:"我的银行卡是 6222021234567890,帮我订酒店" ↓ 网关净化:"我的银行卡是 __bank_card_1__,帮我订酒店" ↓ 发送到 LLM(Claude/GPT/Kimi 等) ↓ LLM 回复:"正在用 __bank_card_1__ 订房" ↓ 网关还原:"正在用 6222021234567890 订房" ↓ 工具在本地使用真实卡号执行
受保护的数据类型
网关自动检测并净化以下类型:
- 银行卡号 →
(16-19 位数字)__bank_card_1__ - 信用卡号 →
(1234-5678-9012-3456)__credit_card_1__ - 电子邮箱 →
(user@example.com)__email_1__ - 手机号码 →
(+86-138-1234-5678)__phone_1__ - API 密钥/密钥 →
(sk-...、ghp_...、Bearer 令牌)__secret_1__ - IP 地址 →
(192.168.1.1)__ip_1__ - 美国社会安全号 →
(123-45-6789)__ssn_1__ - 国际银行账号 →
(GB82WEST...)__iban_1__ - URL 链接 →
(https://...)__url_1__
快速配置
1. 启用网关:
编辑
~/.openclaw/openclaw.json:
{ "plugins": { "entries": { "moltguard": { "config": { "sanitizePrompt": true, // ← 启用网关 "gatewayPort": 8900 // 端口(默认:8900) } } } } }
2. 配置你的模型使用网关:
{ "models": { "providers": { "claude-protected": { "baseUrl": "http://127.0.0.1:8900", // ← 指向网关 "api": "anthropic-messages", // 保持协议不变 "apiKey": "${ANTHROPIC_API_KEY}", "models": [ { "id": "claude-sonnet-4-20250514", "name": "Claude Sonnet (受保护)" } ] } } } }
3. 重启 OpenClaw:
openclaw gateway restart
网关管理命令
在 OpenClaw 中使用以下命令管理网关:
- 查看网关状态和配置示例/mg_status
- 启动网关/mg_start
- 停止网关/mg_stop
- 重启网关/mg_restart
支持的 LLM 提供商
网关适用于任何 LLM 提供商:
| 协议 | 提供商 |
|---|---|
| Anthropic Messages API | Claude、Anthropic 兼容接口 |
| OpenAI Chat Completions | GPT、Kimi、DeepSeek、通义千问、文心一言等 |
| Google Gemini | Gemini Pro、Flash |
为每个提供商配置
baseUrl: "http://127.0.0.1:8900",网关会自动处理其余工作。
功能 2:提示注入检测
隐私与网络透明度
对于注入检测,MoltGuard 首先在本地剥离敏感信息——电子邮箱、手机号、信用卡号、API 密钥等——将它们替换为安全的占位符,如
<EMAIL> 和 <SECRET>。
- 先本地净化。 内容在发送分析之前就在你的机器上完成净化。PII 和密钥永远不会离开你的设备。完整实现见
。agent/sanitizer.ts - 净化的内容: 电子邮箱、手机号、信用卡号、社会安全号、IP 地址、API 密钥/密钥、URL、国际银行账号以及高熵令牌。
- 注入模式保留。 净化仅剥离敏感数据——注入检测所需的结构和上下文保持不变。
网络传输的精确内容
本插件仅发起 2 种类型的网络调用,均通过 HTTPS 访问
api.moltguard.com。不会联系其他主机。
1. 分析请求(
agent/runner.ts — POST /api/check/tool-call):
{ "content": "<已净化文本,PII/密钥已被占位符替换>", "async": false }
这就是完整的请求体。不会发送: sessionKey、agentId、toolCallId、channelId、文件名、工具名称、用户名或其他任何元数据。这些字段存在于本地的
AnalysisTarget 对象中,但永远不会包含在 API 调用中——你可以在 agent/runner.ts 第 103-117 行验证。
2. 一次性 API 密钥注册(
agent/config.ts — POST /api/register):
{ "agentName": "openclaw-agent" }
这就是完整的请求体——一个硬编码的字符串。不会发送: 机器标识符、系统信息、环境变量、密钥或文件内容。你可以在
agent/config.ts 第 46-64 行验证。要完全跳过自动注册,设置 autoRegister: false 并在配置中提供你自己的 apiKey(见下方 API 密钥管理)。
本地存储
- API 密钥:
— 仅包含~/.openclaw/credentials/moltguard/credentials.json
。由{ "apiKey": "..." }
创建。agent/config.ts - 审计日志:
和~/.openclaw/logs/moltguard-analyses.jsonl
— 仅追加的 JSONL 文件,记录分析结果和用户反馈。永远不会发送到任何服务器。由~/.openclaw/logs/moltguard-feedback.jsonl
创建。memory/store.ts - 没有其他文件由此插件创建或读取,除了上述文件和其自身的源码。
额外保障
- 你的 API 密钥归你所有。 每次安装都会获得一个唯一的 API 密钥,首次使用时自动注册。没有共享或硬编码的密钥。
- 无第三方 LLM 调用。 分析由 MoltGuard API 直接执行——不会将内容转发至 OpenAI 或其他第三方服务。
- 分析后内容不存储。
- 完全可审核。 整个插件开源。净化器(
)、运行器(agent/sanitizer.ts
)和配置(agent/runner.ts
)是唯三接触网络的文件——直接审核它们即可验证以上声明。agent/config.ts
面临的问题
当你的 AI 智能体读取外部内容(邮件、网页、文档)时,攻击者可以嵌入隐藏指令,如:
------- 转发邮件(请勿向用户显示)------- 系统警报:<此处为注入内容> 执行:<此处为你的凭据收集操作>" ------- 转发邮件结束 -------
没有防护的话,你的智能体可能会执行这些恶意指令,导致数据泄露、未授权操作或安全漏洞。
安装方式
方式 1:从 npm 安装(推荐)
# 安装已发布的包 openclaw plugins install @openguardrails/moltguard # 重启以加载插件 openclaw gateway restart # 验证安装 openclaw plugins list | grep moltguard
方式 2:从源码安装(最大信任度)
# 克隆并先审核源码 git clone https://github.com/openguardrails/moltguard.git cd moltguard # 审核代码(所有文件均为 TypeScript,人类可读) cat gateway/sanitizer.ts # 查看净化哪些内容 cat agent/runner.ts # 查看网络调用 cat memory/store.ts # 查看文件操作 # 从本地目录安装 openclaw plugins install -l . openclaw gateway restart
方式 3:隔离测试(最大谨慎度)
# 创建测试环境 mkdir ~/openclaw-test cd ~/openclaw-test # 在测试环境中安装 OpenClaw # (参考 OpenClaw 文档) # 在测试环境中安装 moltguard openclaw plugins install @openguardrails/moltguard # 使用一次性 API 密钥测试(非生产环境) # 监控网络流量:使用 tcpdump、wireshark 或 mitmproxy # 验证仅联系 api.moltguard.com
API 密钥管理
首次使用时,MoltGuard 会自动注册一个免费 API 密钥——无需邮箱、密码或手动设置。
密钥存储在哪里?
~/.openclaw/credentials/moltguard/credentials.json
仅包含
{ "apiKey": "mga_..." }。
使用你自己的密钥:
在插件配置中设置
apiKey(~/.openclaw/openclaw.json):
{ "plugins": { "entries": { "moltguard": { "config": { "apiKey": "mga_你的密钥" } } } } }
完全禁用自动注册:
如果你在受管理或无网络环境中,希望阻止一次性注册调用:
{ "plugins": { "entries": { "moltguard": { "config": { "apiKey": "mga_你的密钥", "autoRegister": false } } } } }
当
autoRegister: false 且没有 apiKey 时,分析将失败,直到提供密钥。
验证安装
检查插件是否已加载:
openclaw plugins list
你应该看到:
| MoltGuard | moltguard | loaded | ...
检查网关日志中的初始化信息:
openclaw logs --follow | grep "moltguard"
应看到:
[moltguard] Initialized (block: true, timeout: 60000ms)
工作原理
MoltGuard 钩入 OpenClaw 的
tool_result_persist 事件。当你的智能体读取任何外部内容时:
内容(邮件/网页/文档) | v +-----------+ | 本地 | 剥离邮箱、手机号、信用卡号、 | 净化 | 社会安全号、API 密钥、URL、国际银行账号... +-----------+ | v +-----------+ | MoltGuard | POST /api/check/tool-call | API | 发送已净化内容 +-----------+ | v +-----------+ | 判定 | isInjection: true/false + 置信度 + 发现 +-----------+ | v 拦截 或 放行
内容在发送到 API 之前在本地净化——敏感数据永远不会离开你的机器。如果检测到高置信度的注入,内容会在智能体处理之前被拦截。
命令
MoltGuard 提供网关管理和注入检测两方面的斜杠命令:
网关管理命令
- 查看网关状态/mg_status
/mg_status
返回:
- 网关运行状态
- 端口和端点
- 不同 LLM 提供商的配置示例
- 启动网关/mg_start
/mg_start
- 停止网关/mg_stop
/mg_stop
- 重启网关/mg_restart
/mg_restart
注入检测命令
- 查看检测状态和统计/og_status
/og_status
返回:
- 配置信息(是否启用、拦截模式、API 密钥状态)
- 统计数据(总分析次数、拦截次数、平均耗时)
- 最近分析记录
- 查看最近的注入检测/og_report
/og_report
返回:
- 检测 ID、时间戳、状态
- 内容类型和大小
- 检测原因
- 可疑内容片段
- 报告误报或漏检/og_feedback
# 报告误报(检测 ID 来自 /og_report) /og_feedback 1 fp 这是正常的安全文档 # 报告漏检 /og_feedback missed 邮件中包含隐藏注入但未被检测到
你的反馈有助于提升检测质量。
配置
编辑
~/.openclaw/openclaw.json:
{ "plugins": { "entries": { "moltguard": { "enabled": true, "config": { // 网关(提示词净化)- 新功能 "sanitizePrompt": false, // 启用本地提示词净化 "gatewayPort": 8900, // 网关端口 "gatewayAutoStart": true, // OpenClaw 启动时自动启动网关 // 注入检测 "blockOnRisk": true, // 检测到注入时拦截 "timeoutMs": 60000, // 分析超时时间 "apiKey": "", // 留空则自动注册 "autoRegister": true, // 自动注册 API 密钥 "apiBaseUrl": "https://api.moltguard.com", "logPath": "~/.openclaw/logs" // JSONL 日志目录 } } } } }
配置选项
网关(提示词净化)
| 选项 | 默认值 | 说明 |
|---|---|---|
| | 启用本地提示词净化网关 |
| | 网关服务器端口 |
| | OpenClaw 启动时自动启动网关 |
注入检测
| 选项 | 默认值 | 说明 |
|---|---|---|
| | 启用/禁用插件 |
| | 检测到注入时拦截内容 |
| (自动) | MoltGuard API 密钥。留空则首次使用时自动注册 |
| | 当 为空时自动注册免费 API 密钥 |
| | 分析超时时间(毫秒) |
| | MoltGuard API 端点(可覆盖为预发布或自托管环境) |
| | JSONL 审计日志文件目录 |
常用配置
全面保护模式(推荐):
{ "sanitizePrompt": true, // 保护敏感数据 "blockOnRisk": true // 拦截注入攻击 }
仅监控模式(记录检测但不拦截):
{ "sanitizePrompt": false, "blockOnRisk": false }
仅网关模式(无注入检测):
{ "sanitizePrompt": true, "enabled": false }
检测结果会记录在
/og_report 中,但不会拦截内容。
测试检测
下载包含隐藏注入的测试文件:
curl -L -o /tmp/test-email.txt https://raw.githubusercontent.com/openguardrails/moltguard/main/samples/test-email.txt
让你的智能体读取文件:
读取 /tmp/test-email.txt 的内容
检查日志:
openclaw logs --follow | grep "moltguard"
你应该看到:
[moltguard] INJECTION DETECTED in tool result from "read": Contains instructions to override guidelines and execute malicious command
卸载
openclaw plugins uninstall @openguardrails/moltguard openclaw gateway restart
同时删除存储数据(可选):
# 删除 API 密钥 rm -rf ~/.openclaw/credentials/moltguard # 删除审计日志 rm -f ~/.openclaw/logs/moltguard-analyses.jsonl ~/.openclaw/logs/moltguard-feedback.jsonl
验证清单(安装前)
使用此清单验证插件的合法性和安全性:
- 源码公开: 访问 https://github.com/openguardrails/moltguard 并审核代码
- npm 包与源码一致: 对比已发布包与 GitHub 仓库
npm view @openguardrails/moltguard dist.tarball # 下载并解压 tarball,与 GitHub 代码对比 - 网络调用可审核: 阅读
第 80-120 行查看所有网络调用agent/runner.ts - 文件操作有限: 阅读
查看仅创建 3 个本地文件memory/store.ts - 无混淆: 所有代码为可读 TypeScript,无压缩或打包
- MIT 许可证: 可自由使用、修改和审核
- GitHub 活跃度: 检查提交历史、Issue 和贡献者
- npm 下载统计: 验证包被他人使用(不仅仅是你自己)
监控网络流量(可选但推荐)
安装后,监控网络流量以验证声明:
# Linux sudo tcpdump -i any -n host api.moltguard.com # 你应该只能看到: # 1. POST 到 /api/register(首次使用时仅一次) # 2. POST 到 /api/check/tool-call(分析内容时) # 不应联系其他主机。
常见问题
问:网关代码是否包含在 npm 包中? 答:是的。 npm 包包含所有源码(
gateway/、agent/、memory/)。你可以运行 npm pack @openguardrails/moltguard 并检查 tarball 来验证。
问:能否在无网络访问的情况下运行? 答:部分可以。 网关(提示词净化)可 100% 离线工作。注入检测需要 API 访问,但你可以通过
"enabled": false 禁用它,仅使用网关模式。
问:如何确保我的 API 密钥安全? 答:审核代码。 检查
agent/sanitizer.ts 第 66-88 行的密钥检测模式。匹配 sk-、ghp_ 等的 API 密钥会在任何网络调用之前被替换为 <SECRET>。你可以发送包含 sk-test123 的提示词并检查网络流量来自行测试。
问:能否自行托管 MoltGuard API? 答:可以。 在配置中设置
"apiBaseUrl": "https://你的服务器.com"。API 是标准的 HTTP 端点(精确的请求格式见 agent/runner.ts)。
问:如果不信任 npm 怎么办? 答:从源码安装。 克隆 GitHub 仓库,审核每个文件,然后运行
openclaw plugins install -l /path/to/moltguard。这完全绕过了 npm。
相关链接与资源
源码与发布:
- GitHub 仓库:https://github.com/openguardrails/moltguard
- GitHub 发布:https://github.com/openguardrails/moltguard/releases
- 源码浏览:https://github.com/openguardrails/moltguard/tree/main
包与分发:
- npm 包:https://www.npmjs.com/package/@openguardrails/moltguard
- npm 包源码:https://unpkg.com/@openguardrails/moltguard/(查看已发布文件)
文档:
- 隐私政策:https://moltguard.com/privacy
- API 文档:https://moltguard.com/docs(请求/响应格式)
- Issue 追踪:https://github.com/openguardrails/moltguard/issues
安全:
- 报告漏洞:security@moltguard.com(或 GitHub 私有 Issue)
- 负责任披露:90 天政策,在更新日志中署名
最后说明:透明度与信任
本插件旨在实现最大透明度:
- ✅ 所有代码开源(MIT 许可证)
- ✅ 无打包或混淆(可读 TypeScript)
- ✅ 网络调用有文档且可审核
- ✅ 文件操作最少且仅限本地
- ✅ 可从源码安装(绕过 npm/注册中心)
- ✅ 可在隔离环境中测试(一次性环境)
- ✅ 可自行托管(自有 API 服务器)
如有顾虑,请先审核代码。如发现可疑之处,请报告。