Skip to content

Zephyr v2.3.0

Choose a tag to compare

@github-actions github-actions released this 24 May 08:55
15cadaa

Zephyr v2.3.0 — Override 覆写系统 & 统一设置存储 & 安全加固

新增完整的 Override 覆写系统(Prism DSL + JavaScript 脚本双引擎,支持拖拽排序、作用域管理、导出/导入、远程覆写);新增代理组选择器下拉菜单;统一全局偏好设置到 settings.json(mode / TUN / port / IPv6 / allow-lan 等跨订阅持久化,启动时注入运行时配置);安全修复深链路绕过、YAML DoS、沙箱审计日志和路径脱敏;新增 Release 模式单实例检测;修复 MATCH/FINAL 规则模板替换;修复 i18n 硬编码英文通知;升级依赖。


🆕 新功能

Override 覆写系统

新增完整的配置覆写系统,支持 Prism DSL(YAML)和 JavaScript 脚本两种格式,共享统一的管道、作用域和排序机制。

代理组选择器下拉菜单

在代理列表页标题栏新增代理组选择器下拉菜单,支持一键切换主代理组。

统一设置存储(settings.json

将分散在 localStorage 和 YAML profile 中的全局偏好设置统一迁移到后端 settings.json,通过 patch_settings 原子命令进行部分更新,消除 Read-Modify-Write 竞态条件。

单实例检测(Release 模式)

新增 tauri-plugin-single-instance 依赖,在 Release 模式下检测已有实例并发送 focus 事件,防止重复启动。


🔒 安全修复

深链路绕过修复

修复深链路(deep link)绕过验证的安全问题。

YAML DoS 防护

修复 YAML 解析器对恶意构造的 YAML 内容的拒绝服务攻击(通过 validate_custom_args 增强输入验证)。

沙箱审计日志

为 QuickJS 沙箱增加审计日志记录,增强覆写脚本执行的可观测性。

路径脱敏

在日志输出中对文件路径进行脱敏处理,防止敏感路径信息泄露。


🐛 Bug 修复

Smart 评分异步持久化(SmartState)

替换 smart_score 命令中的同步磁盘 I/O 为 WAL + 阈值刷盘的异步持久化架构,缓解测速期间因每节点全量序列化 + 写文件导致的 UI 卡顿。

MATCH/FINAL 规则模板替换

修复规则提取时 MATCH/FINAL 规则(仅 2 字段格式 MATCH,Proxy)未被正确替换为 {{proxy}} 的问题。rule_library.rstypes.rs 中新增 is_match_final 判断,使用 policy_index = 1 正确定位策略字段。

i18n 硬编码英文通知

  • plugins-smart.js 中 "Best node" / "No nodes available" 通知改为使用 t('notifBestNode') / t('notifNoNodesForSelection') i18n 键
  • proxies.js 中 "Switched to best node" 通知改为使用 t('notifSwitchedBest') i18n 键
  • 新增英文/中文/日文三语翻译

连接卡片进程名字体

connections.js 中进程名 <span> 增加 text-xs 类,缩小字体避免与连接信息视觉冲突。

Best 按钮标签

index.html 中 "Best" 按钮移除 data-i18n="selectBest" 属性,固定显示英文 "Best"(与通知 i18n 分离)。

通知长文本截断

notifications.js 中通知标题增加 line-clamp-2,消息体增加 line-clamp-3,最大宽度从 400px 扩展到 480px。新增 title 属性显示完整路径 tooltip。


🎨 UI / UX 改进

新增 CSS 变量

亮色和暗色模式均新增 --text-muted / --bg-secondary / --bg-tertiary 变量,用于编辑器和通知组件。

Prism 变量解析日志

PrismHost.get_variables() 新增 debug 日志输出解析后的 proxy 变量和代理组列表,便于诊断跨订阅规则错误。


🏗 架构改进

Override 后端架构

新增完整的覆写后端模块。

Settings 原子更新

新增 patch_settings Tauri 命令,使用宏展开实现 14 个字段的原子部分更新,替代前端 GET + 修改 + SAVE 的竞态模式。

前端模块化

  • 新增 settings-helpers.js:统一的设置读写 API,串行队列保证写入顺序
  • prism.js 新增 overrideExport() / overrideImport() / waitForMihomoReady() 导出
  • lifecycle.jsswitchToConfig 增加 overrideApplyAll + 缓存失效 + 代理组重新渲染