扩展包与商店 v1.6.0
扩展包是以 .sealpack 为后缀的安装包,可以同时携带 JavaScript 脚本、牌堆、自定义回复、帮助文档和规则模板。包内的 info.toml 声明名称、版本、海豹版本要求、依赖、权限和内容清单。
扩展包会执行第三方内容
扩展包可能发送网络请求、读写文件、启动 HTTP 服务,声明“危险操作”权限的包还可能执行外部程序。安装前应确认作者和来源,并在预览中检查权限、依赖和文件列表。
商店展示和权限声明不能代替代码审查。不要在生产骰子上安装来历不明的 .sealpack 文件。
打开扩展包管理
在 WebUI 中进入「扩展功能 - 扩展包」。页面包含“已安装包”和“商店”,并提供上传安装、URL 安装和重载入口。
已安装包有以下状态:
- 已安装:文件已保存,但内容尚未启用。
- 已启用:包被允许参与下一次对应内容的加载。
- 已禁用:包内容不再加载,临时缓存会被清理。
- 错误:清单、依赖、版本或加载过程存在错误,应先查看详情和核心日志。
“安装”和“启用”是两个步骤。启用或禁用后,页面会显示待重载内容;完成重载后变更才会完整应用。
安装扩展包
从商店安装
在“商店”中打开扩展包详情,先检查版本、作者、说明、依赖、权限和文件。点击安装后仍会显示安装预览;确认内容无误后,可以选择“安装后启用”和“安装并启用后自动重载”。
“从清单安装”可以一次处理多个精确版本的扩展包,并逐项显示安装、启用和失败状态。批量安装前仍应逐个核对来源和权限。
上传 .sealpack
在“上传安装”中选择本地 .sealpack 文件。海豹会先解析清单并展示将安装的文件、版本变化、权限和选项,确认后才执行安装。
从 URL 安装
在“URL 安装”中填写直接指向 .sealpack 文件的地址。远程内容可能随时变化,应只使用可信作者提供的固定版本地址,并仔细核对安装预览。
海豹会检查包格式、路径、版本约束和商店提供的哈希信息。检查通过只表示文件结构符合要求,不代表其中的脚本逻辑可信。
依赖与版本
扩展包可以声明:
- 适用的最低和最高海豹版本;
- 依赖的其他扩展包 ID;
- 依赖包需要满足的语义化版本范围。
依赖缺失或版本不符时,扩展包不能正常启用。商店或清单安装可以按依赖关系批量处理;手工上传时,应根据预览提示先安装正确版本的依赖。禁用或卸载被其他包依赖的扩展包前,也要检查受影响的包。
启用、禁用与重载
在“已安装包”中可以启用或禁用单个包。状态变化后,点击页面顶部“重载扩展”,或从下拉菜单只重载指定内容:
- 脚本;
- 牌堆;
- 自定义回复;
- 帮助文档;
- 规则模板。
只改动一种内容时,按类型重载可以减少等待时间。帮助文档和大量 JavaScript 插件的重载可能较慢;重载期间不要连续重复点击,也不要重启核心。
禁用包会清理运行缓存,但不会删除 .sealpack 源文件和用户数据。重新启用并重载后,内容会从包中重建。
卸载与用户数据
卸载时可以选择:
full - 完全卸载:删除包文件、运行缓存、配置和用户数据。keep_data - 保留数据:删除包文件和运行缓存,保留用户配置及运行数据,便于以后重新安装同一包。
扩展包的用户数据位于 data/extensions/<作者>/<包名>/_userdata/,其中可能包括 config.json 和插件自行保存的数据。重要数据应在卸载前备份;“完全卸载”不可通过 WebUI 撤销。
上传或商店安装的源包通常保存在 data/packages/,解压后的运行缓存位于 cache/packages/。如果源 .sealpack 丢失,页面会显示“仅缓存安装”;应放回源文件并刷新,而不是长期依赖缓存。
权限说明
安装预览会显示包在 info.toml 中声明的权限:
- 网络:允许发起 HTTP 请求;包可以进一步声明允许访问的域名白名单。
- 文件读取:允许读取声明路径内的文件。未声明的读取请求会被包沙箱拒绝。
- 文件写入:允许写入声明路径;未额外声明时默认只允许写入包自己的
_userdata目录。 - 危险操作:允许执行外部程序等高风险行为。只应授予经过代码审查的扩展包。
- HTTP 服务:允许扩展包监听 HTTP 服务。启用前应检查监听地址、端口、防火墙和反向代理配置。
- 扩展间通信:允许与清单列出的其他扩展包通信。
权限声明用于限制包通过扩展包接口发起的操作,但不是完整的恶意代码防护边界。涉及“危险操作”、广泛文件权限或不受限网络访问时,应在隔离环境中先行验证。
与其他扩展功能的关系
扩展包是内容的分发和生命周期管理层:
- 包内脚本加载后成为 JavaScript 扩展,并通过
.ext管理群内启用状态。 - 包内牌堆由
.draw和文案中的#{DRAW-牌组名}使用。 - 包内自定义回复与本地回复共同参与匹配;包被禁用后,相关回复在重载后停止生效。
- 包内帮助文档进入
.help和.find的搜索索引。 - 包内规则模板可以注册游戏系统、属性别名、默认骰面和群名片模板,并可由
.set <规则名>选用。
手工上传的本地文件仍在各自的牌堆、回复、帮助文档和 JS 页面管理。由扩展包提供的内容应优先通过扩展包页面升级、禁用或卸载,避免直接修改缓存文件;缓存会在重载或升级时重建。