Skip to content

Entari 0.19.0

Choose a tag to compare

@RF-Tar-Railt RF-Tar-Railt released this 19 Oct 02:36
· 21 commits to main since this release
911989f

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

  • @su226 made their first contribution in #27

Full Changelog: v0.18.6...v0.19.0