Zephyr v2.3.0
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 脚本两种格式,共享统一的管道、作用域和排序机制。
- 详见完整文档:override-system-guide.md,包含架构总览、DSL 详解、JS API、示例脚本集合和 FAQ
代理组选择器下拉菜单
在代理列表页标题栏新增代理组选择器下拉菜单,支持一键切换主代理组。
统一设置存储(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.rs 和 types.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.js中switchToConfig增加overrideApplyAll+ 缓存失效 + 代理组重新渲染