Repository navigation
Entari 0.19.0
What's Changed
破坏性改动
- 移除
RootlessPlugin:改用plugin.niche创建与父插件生命周期绑定的隔离子插件 - 服务注入阶段等待:移除
inject,服务参数注入现在会等待目标服务, 并可以用on_stage指定服务进入阶段 - 最低 Python 版本:放弃 Python 3.10 支持,要求 Python >= 3.11
新增
- 配置 Schema 片段:新增 Schema 片段注册表与合并引擎,
Plugin.register_schema可注册片段,EntariConfig.generate_schema统一应用 - API Hook 事件:新增
APIRequest/APIResponse事件,用于call_api_hook - 筛选器:新增
startswith、endswith、fullmatch、regexmatch - 函数级热替换:仅函数变更时进行热替换,支持在文件尾部追加函数,并允许热替换时修改 import
- 分阶段插件注册:支持 staged 注册与原子重载,导入失败时旧插件继续运行
- 子插件粒度重载:支持单独重载子插件,并重载上游公共模块及其依赖插件
- 插件语义检查:基于插件指纹跳过语义未变化文件的重载
- 依赖重绑定驱动:以 rebind driver 替代 referent 级联,并暴露插件 fingerprint
- 重载状态保留:完整重载时保留模块级可变状态
plugin.niche:在当前插件内创建隔离的子插件- 重载串行化:为插件重载增加锁,避免并发重载冲突
改进
- MessageChain:重构并改进
MessageChain实现 - 插件导入优化:改进插件导入代码,并与 bootstrap 流程对齐
- 插件加载重构:重构插件加载逻辑并增强错误处理
- 依赖级联:按拓扑顺序级联依赖插件,并在插件 dispose 时并行清理服务
- 日志目录:调整日志保存目录
- 类型标注:改进
MessageChain的类型标注 - 插件重载返回值:
reload_plugin与reload_subplugin现在返回加载结果对象,而非布尔值
修复
- 子插件重载:修复子插件重载、子树匹配缺失以及 staged reload 中命令删除等问题
- Referent 句柄:修复 dispose 后 referent 句柄悬空的问题
- 热替换:修复热替换未将旧函数对象替换为新函数对象的问题
- 命名空间导入:修复命名空间模块导入失败
- 插件卸载:插件卸载时清理 import 绑定,并修复 staged reload 失败后的状态
- 异常输出:修复
traceback.print_exception的处理 by @su226 in #27
维护
- Letoderea 升级:将
arclet-letoderea升级至 0.22.0 - 代码清理:移除无用代码
New Contributors
Full Changelog: v0.18.6...v0.19.0