插件以 .seplugin 包分发。打包工具会校验清单、计算 files 中每个文件的 SHA-256,并在有发布者密钥时为清单签名。不要用普通 ZIP 改后缀、手写哈希或伪造签名来代替打包。
在桌面端打包
桌面端的「插件创建模式」提供完整的开发闭环:
- 选择源码目录:选择包含
plugin.json和payload/的<插件目录>。 - 校验项目:执行清单 schema、封闭文件集、图标、界面词表和技能文件的全部检查,失败时返回结构化错误码。
- 打包项目:输出
.seplugin。 - 启动预览 / 安装到预览环境:直接安装调试,不需要手动分发包。
在对话中,Agent 也可以调用宿主的打包工具 plugin_pack 完成同样的事:参数为 source_dir(源码目录)和 output_path(以 .seplugin 结尾的输出路径)。只想校验时,把 output_path 指向一个临时文件即可。
打包时校验什么
- 清单符合 v3 schema;没有未知的贡献类型、权限、Worker 或服务;
- 界面、技能、Worker 的入口文件存在;
files封闭且哈希正确;没有重复的 ZIP 条目、路径跳转或符号链接。安装时文件集不符报PLUGIN_PACKAGE_UNREADABLE,资源哈希不符报PLUGIN_FILE_HASH_MISMATCH;skills只接受 1 项,超过时报PLUGIN_MANIFEST_INVALID;- 包大小、文件数、单个文件和解压后的大小都在限制内;
- 图标是 200×200 的 PNG,不超过 500 KiB;
- 界面词表格式正确,技能文件符合规范;
- 权限组合合法(见组合约束)。
签名
签名算法是 Ed25519。签名内容是一个固定的域分离前缀加上清单(不含签名字段)经 JCS 规范化后的 JSON;publisher_key_id 是发布者公钥的 SHA-256。
- 在桌面端打包时,宿主用本机的发布者密钥签名。私钥只保存在本机,不会导出到目录、参数、日志或 Agent 上下文中。
- 签名后修改
payload/中的任何文件,都会让哈希和签名失效,必须重新打包。 signature和publisher_key_id由打包器写入,清单里不要手写。
来源与信任
| 来源 | 判定 | 安装条件 |
|---|---|---|
| 官方(Official) | 用官方公钥验签通过 | 直接安装预览。 |
| 开发者(Developer) | 其他所有包,包括用本机发布者密钥签名的包和未签名包 | 需要在「设置 → 插件 → 安装与签名」中打开「允许安装未签名插件」,并在安装预览中勾选确认“我了解该插件来源未经密码学验证”。 |
官方签名只代表来源,不会自动授予任何权限,也不会自动批准受信任 Worker 或本电脑模式。部分能力(如 ai_runtime)只对官方来源开放。
安装流程
- 用户双击
.seplugin,或在插件页选择「安装插件」,打开安装预览。 - 宿主把包解到临时目录,校验 schema、平台、最低版本、文件哈希和签名。
- 安装预览展示来源、必需权限、可选 Workspace 权限、声明的网络访问、受信任 Worker,以及安装后再授权的 Worker 权限。
- 用户确认后,宿主原子替换旧版本并登记。新安装的插件默认停用。
升级时如果发布者变了,安装会以 PLUGIN_PUBLISHER_CHANGED 拒绝。同一插件的数据(KV、Blob)在 plugin_id 和 workspace_id 不变的情况下一般会保留。
全局 Worker 服务包
全局 Worker 服务使用独立的 .seworker 包,需要先单独安装并启用,依赖它的插件才能解析到。插件不能自行下载或安装服务。
发布前检查
- 校验包,确认没有错误。
- 在安装预览中检查来源、权限、网络声明和受信任 Worker 是否符合预期。
- 启用插件,打开工作区,确认
ready、KV 读写和快照发布正常。 - 如声明了拖放,测试文件拖入;如绑定了 Agent,测试读取和动作,确认快照版本增长。
- 测试 Worker 调用和取消。
- 撤销权限、停用、卸载,确认插件能正确处理并且没有残留。
只完成了源码、还没有生成可验证的
.seplugin 时,请如实说明“尚未形成可安装包”,不要把源码目录当作发布产物。