Repository navigation
EasyBot v0.0.34
Added
-
插件市场(P6) — 通过 GitHub Releases 分发第三方适配器插件,
easybot plugin
子命令 + REST API + 管理后台完整管理:- 安装流水线 —
easybot plugin install [publisher/]name:按宿主 6-target
triple 匹配产物 → ABI 预检(sdk_version)→requires.easybotsemver range
校验 → 信任确认 → 下载 → SHA256 比对 + ed25519 验签 → 原子落位(含合成
plugin.yaml+plugin.sig.json)。--file <dir>离线安装走同流水线跳过下载。 - 多注册表(Taps) —
plugins.registries列表合并多源 catalog,插件名支持
publisher/name限定,5min 缓存。官方目录默认源为
EasyIndie/EasyBot-Plugins(catalog.json)。 - 信任管理(VS Code 1.97 语义) — 信任按发布者粒度存
plugins/.trust;
--yes不自动信任,显式plugin trust <publisher> --public-key <k>才加入。 - 更新语义 —
plugin update显式触发、默认 pin 当前版本,--latest/--channel
才跨版本(防更新攻击)。 - 启停语义 —
disable立即 stop+unregister;enable下次启动生效(v1 不做热
dlopen);孤儿会话/消息由现有 TTL 保留策略兜底。 - CLI —
easybot plugin new/list/search/info/install/uninstall/enable/disable/ update/trust/inspect。 - REST API —
GET /plugins(含加载失败清单)、GET /plugins/catalog、
POST /plugins/install、DELETE /plugins/{name}、
POST /plugins/{name}/enable|disable(PluginsRead/PluginsManage权限)。 - 管理后台 — 🧩 Plugins tab:已装表(含失败行与原因)、市场目录(发布者徽标 +
搜索)、安装/卸载/启停、首次第三方信任确认。
- 安装流水线 —
-
生产模式插件签名门禁(行为变更) —
--production/EASYBOT_ENV=production
启动时扫描plugins/目录,未签名插件且未设plugins.allowUntrusted: true则拒绝
启动。此前手放的未签名插件在生产模式可加载;现在需走市场安装(带签名)或显式
allowUntrusted。dev 环境不受影响(lenient:有签名验、无签名 warn)。 -
开发者工作流(DX) —
- 脚手架 —
easybot plugin new <name>生成独立可构建的插件工程(SDK git tag
依赖,无需 clone 主仓),含src/lib.rs骨架、plugin.yaml、单元测试、
PluginTestHost 集成测试、plugin-publish.yml发布模板。 - 测试宿主 — SDK
testingfeature 提供PluginTestHost内存宿主,离线跑通
attach → init → connect → send → 事件流,配recv_event/inbound_text等构造器。 - 发布者 CI 模板 —
.github/workflows/plugin-publish.yml(自包含,仅公开 action- 40 位 SHA 固定):6-target 交叉编译 + gitleaks 扫描 +
easybot-plugin-sign
ed25519 签名 + 组装easybot-plugin.json+ Release。
- 40 位 SHA 固定):6-target 交叉编译 + gitleaks 扫描 +
- 示例 —
plugins/example-hello-adapter/入门 echo 适配器(workspace 成员,
CI 持续编译验证脚手架产出形状)。 - 文档 —
docs/02 plugin-dev.md重拆为docs/plugin-quickstart.md(15 分钟教程)、
docs/plugin-guide.md(完整参考)、docs/plugin-methodology.md(方法论);新建
docs/SECURITY.md(信任模型)与docs/docker-compose.plugin-dev.yml(Docker 联调)。
- 脚手架 —
-
easybot-plugin-sign独立工具 —gen-keypair/sign(ed25519),仅发布者
CI 使用,主程序不持私钥。sign --sig-json <path>额外写出离线分发用的
plugin.sig.json(install --file读取此格式验签),--name显式指定插件名
(kebab-case 插件必须——库名推导是下划线 crate 名)。
Changed
plugin.yaml支持enabled字段 —Option<bool>,缺省启用,向后兼容。PluginLoader支持PluginLoadPolicy— lenient(dev 默认)/ strict(prod),
新增DisabledPlugin/SignatureVerificationFailed错误变体,加载时对plugin.sig.json
重新验签。AdapterRegistry::unregister— 卸载/禁用插件时移除平台工厂。- 配置 —
GatewayConfig新增plugins:段(directory/autoLoad/
verifySignatures/allowUntrusted/trustedPublishers/registries),
easybot --init展开默认值。 - 配置字段接线 —
plugins.directory(插件目录,相对/绝对路径)、
plugins.autoLoad(启动自动加载)、plugins.verifySignatures(关闭签名校验)
现全部生效;目录由resolve_plugins_dir统一解析,生产门禁 / 加载 / CLI 一致。 - 生产模式加载策略 — 生产启动时
PluginManager使用 strict 加载策略(强制签名- 发布者信任,信任 = 配置
trustedPublishers∪ 用户.trust);plugins.allowUntrusted: true时退化为"有签名验、无签名放行"。dev 恒 lenient 不受影响。
- 发布者信任,信任 = 配置
Fixed
- 信任语义落地(对齐文档) —
plugin install --yes/ APItrust: true现与文档
一致,不再自动把发布者写入.trust(此前实现会写入)——一次性确认仅放行本次
安装;plugin update在发布者更换签名密钥(密钥轮换/泄露)时返回needs_trust,
需显式plugin trust重新信任。 - 安装下载加固(安全) —
artifact.url仅允许 https + GitHub 主机(防 SSRF /
host 混淆);artifact.library与plugin.yaml的library仅允许裸文件名
(防路径穿越,下载前拒绝);--file离线安装同步校验requires.easybot兼容范围。 - 生产启动扫描跳过禁用插件 —
enabled:false的插件不加载、无需验签,不再被
生产门禁误拒。 install --file缺省库名按宿主 triple 推导 — 此前传字面量"host"(既不含
windows也不含apple),macOS/Windows 上离线安装落位为.so扩展名错误、
加载期重验签失效;现按current_target_triple()推导。- 缺省库名按下划线 crate 名推导 — cargo cdylib 产物是下划线 crate 名
(kebab-case 包名 → 下划线,如libhello_adapter.dylib),推导(manifest.library_path
/default_library_name)与发布 CI 的library字段原先用连字符名,导致 kebab-case
插件手动安装 /--file安装后加载找不到库;三者统一为下划线约定。