Releases: ciskonc/ClashOmega
Releases · ciskonc/ClashOmega
Release list
v1.4.1 - Clash 远程管理模块 + mihomo 崩溃防护
v1.4.1 — Clash 远程管理模块 + mihomo 崩溃防护
一、新功能:Clash 远程管理模块
主页新增独立模块(默认隐藏),与「浏览器代理模式切换」并列分层显示,三按钮组 [规则] [全局] [直连] 切换 Clash 内核代理模式。
- 通过 Clash API
PATCH /configs {mode}实时切换 mihomo 内核 mode - 默认
clashRemoteEnabled=false,需在「设置 → 连接配置」中手动启用 - LAYOUT_VERSION 3 → 4:clash-remote 模块自动加入默认布局
- 「代理模式切换」改名「浏览器代理模式切换」以避免概念混淆
- 9 个新翻译键(zh_CN / en / ja)
二、关键修复(实测发现并解决)
| 问题 | 修复 |
|---|---|
| 切换 mode 后旧连接仍走旧代理 | switchClashMode 成功后调用 DELETE /connections 关闭所有活跃连接 |
| 重启 Clash 后按钮不跳回「规则」 | initPopup 在 await settings 后主动调用 setClashRemoteModuleVisible + renderClashRemoteMode |
| 保存设置后主页不显示模块 | buildTabLayout 重建布局后立即调用 setClashRemoteModuleVisible |
| 「全局」按钮切了不生效(走伪节点) | pickFirstRealProxyNode 过滤 server 为空的伪节点;新增 pickPreferredGlobalNode 优先指向 Selector 类型代理组(通常是「节点选择」组) |
| 重启 Clash 导致 mihomo fatal 退出 | restartClash 新增 Step 0 isMihomoAlive 预检 + Step 2.5 validateRulesAgainstGroups 丢弃引用不存在代理组的规则 |
三、伪节点问题背景
部分机场在订阅开头插入"剩余流量:xxx GB"伪节点(server 字段为空),用于在 Clash UI 显示流量信息。mihomo 隐式 GLOBAL 组会把这些伪节点也加入候选,GLOBAL 默认选中第一个伪节点导致所有流量走伪节点(连接失败后 fallback 到列表首个真实节点,表现为切到 global 后 ip111 显示东京而非节点选择组的香港/新加坡)。
修复后切 global 时:
- 自动跳过伪节点 + 代理组
- GLOBAL 默认指向「🚀 节点选择」组
- 流量跟随用户在节点选择组中切换的节点
- 后续用户切换节点选择组中的节点时,GLOBAL 自动跟随,无需重新点「全局」按钮
四、mihomo 崩溃问题背景
当规则引用的代理组在当前 proxy-groups 中不存在时(例如配置文件被裁剪或某代理组被删除),mihomo 启动时会 fatal 退出:
level=fatal msg="Parse config error: rules[N] [RULE-SET,xxx,SOME_GROUP] error: proxy [SOME_GROUP] not found"
ClashOmega 的「重启 Clash」按钮通过 HTTP API 与 mihomo 通信,但 mihomo 已死时任何 HTTP API 都不可达,导致死循环失败。修复后:
- Step 0 检测 mihomo 是否存活,已死时返回明确提示让用户去 Clash Verge Rev GUI 重启
- Step 2.5 在写入快照前校验规则,丢弃引用不存在代理组的规则,保证写入的快照可被 mihomo 正常加载
五、文件清单
| 文件 | 变更 |
|---|---|
| extension/manifest.json | 1.4.0 → 1.4.1 |
| extension/background.js | restartClash 加 Step 0 + Step 2.5,restartClash 重置 mode |
| extension/lib/clash-api.js | 新增 isMihomoAlive / validateRulesAgainstGroups / pickPreferredGlobalNode,伪节点过滤,closeAllConnections |
| extension/popup/popup.js | 模块显示修复 + initPopup 刷新 + renderClashRemoteMode |
| extension/popup/popup.html | Clash 远程管理模块 UI |
| extension/locales/{zh_CN,en,ja}.json | 9 个新翻译键 |
| docs/index.html | 着陆页 v1.4.1 |
| README.md / README_EN.md | 版本号同步 |
| CHANGELOG.md | v1.4.1 详细变更记录 |
六、升级须知
- 老用户升级后 LAYOUT_VERSION 自动从 3 升级到 4,自定义布局会被重置为默认(新增 clash-remote 模块)
- 升级后需在「设置 → 连接配置」中手动启用「Clash 远程管理」开关
- 升级后需重新加载扩展(chrome://extensions/ → 重新加载),刷新 service worker
详见 CHANGELOG.md
v1.4.0 - 控制台面板选择器(metacubexd / Yacd Meta / Zashboard / 自定义)
v1.4.0 — 控制台面板选择器(metacubexd / Yacd Meta / Zashboard / 自定义)
新功能
- 「高级」子标签页新增「控制台面板」选择器,4 选 1 单选按钮:
- metacubexd(默认):https://metacubex.github.io/metacubexd/
- Yacd Meta:https://yacd.metacubex.one/
- Zashboard:https://board.zash.run.place/
- 自定义:用户填入 URL 模板
- 统一占位符替换机制:
%host/%port/%secret在运行时被 Clash API 实际值替换 - 自定义 URL 输入框仅当选择「自定义」时启用,切换时自动聚焦
- placeholder 提供示例:
https://example.com/#/setup?hostname=%host&port=%port&secret=%secret - 自定义为空时回退到 metacubexd,避免打开空白页
- zh_CN / en / ja 三语言完整翻译
URL 拼接逻辑
metacubexd: .../#/setup?http=true&hostname=%host&port=%port&secret=%secret
yacd: /?hostname=%host&port=%port&secret=%secret
zashboard: .../#/setup?http=true&hostname=%host&port=%port&secret=%secret
注意 yacd 使用查询参数,metacubexd 和 zashboard 使用 hash 路由。
文件清单
| 文件 | 变更 |
|---|---|
| extension/popup/popup.html | 高级标签页新增 4 radio + 自定义 URL 输入框 |
| extension/popup/popup.css | 新增 .settings-dashboard-options 等样式 |
| extension/popup/popup.js | DASHBOARD_PRESETS 常量 + openWebDashboard 重写 + settings 加载/保存 |
| extension/background.js | 默认 settings 添加 dashboardType/dashboardCustomUrl |
| extension/locales/{zh_CN,en,ja}.json | 4 个翻译键 |
| extension/manifest.json | 1.3.9 -> 1.4.0 |
向后兼容
- 旧版 settings(无 dashboardType 字段)打开 popup 时自动默认 metacubexd
- 保存设置后自动补全字段
详见 CHANGELOG.md
v1.3.9 - 控制台按钮(metacubexd 网页面板)
v1.3.9 — 控制台按钮(metacubexd 网页面板)
新功能
- 顶部操作栏新增「控制台」按钮,位于「重启 Clash」左侧
- 仅在 Clash 连接成功后显示,避免无意义的跳转
- 点击后在新标签页打开 metacubexd 网页面板,自动填入 hostname/port/secret
Bug 修复
- 修复
native-host/com.clash.omega.json路径污染(恢复占位符) - 顶部状态行
nowrap,防止 Clash 状态文本过长折行 - popup 宽度 440px → 470px,容纳新按钮
文件清单
| 文件 | 变更 |
|---|---|
| extension/popup/popup.html | 顶部操作栏新增控制台按钮 |
| extension/popup/popup.css | popup 宽度+nowrap |
| extension/popup/popup.js | openWebDashboard() + 按钮显隐 |
| extension/locales/{zh_CN,en,ja}.json | web_dashboard 翻译 |
| native-host/install.bat | 新增 BAT 安装封装 |
| native-host/com.clash.omega.json | 恢复占位符 |
安装方式
- 下载
ClashOmega-v1.3.9.zip并解压 - Chrome 访问
chrome://extensions/,开启开发者模式 - 「加载已解压的扩展程序」,选择
extension/目录 - (可选)双击
native-host/install.bat安装 Native Host
详见 CHANGELOG.md
v1.3.8 - 设置页版本号显示与 GitHub 更新检测
v1.3.8 (2026-06-28)
设置页新增版本号显示与 GitHub 更新检测。
一、新功能
- 设置页"关于 ClashOmega"旁显示当前版本号:从
chrome.runtime.getManifest().version读取,无需网络请求即可立即显示 - GitHub 更新检测:异步请求
https://api.github.com/repos/ciskonc/ClashOmega/releases/latest,与当前版本比较- 有新版本:版本号变红色,显示「有新版本可用 vX.X.X」提示链接(点击跳转 releases/latest)
- 已是最新:版本号变绿色,鼠标悬停提示「已是最新版本」
- 网络失败/限速:静默降级为仅显示当前版本号,不影响主流程
- 语义化版本比较:剥离
v前缀,按major.minor.patch数字比较 - 24 小时缓存:
chrome.storage.local._versionCheckCache,避免每次打开 popup 都请求 GitHub API(未授权限速 60 次/小时/IP) - 非阻塞调用:
checkVersionUpdate()在 DOMContentLoaded 末尾调用,不await,版本检测失败不影响 popup 主功能渲染
二、文件变更清单
| 文件 | 变更 |
|---|---|
extension/popup/popup.html |
.settings-about 扩展为两行结构:上行「关于链接 + 版本号」,下行「更新提示」(默认隐藏) |
extension/popup/popup.css |
新增 .settings-about-row / .version-info(三态色:loading/latest/error)/ .update-hint(MD3 primary-container 背景 + hover 反色)样式,玻璃拟态主题适配 |
extension/popup/popup.js |
新增 checkVersionUpdate() + compareSemver() 函数;DOMContentLoaded 末尾非阻塞调用 |
extension/locales/zh_CN.json |
新增 version_loading / version_update_available / version_latest |
extension/locales/en.json |
同上 |
extension/locales/ja.json |
同上 |
三、关键决策
- 选择 GitHub Releases API 而非 tags API:Releases API 返回最新发布版本(过滤预发布),tags API 返回最新标签(可能含开发标签)
- 24 小时缓存而非不缓存:GitHub 未授权 API 限速 60 次/小时/IP,缓存避免频繁打开 popup 触发限速
- 降级策略:网络失败时若有旧缓存(已过期)仍尝试比较,无旧缓存则仅显示当前版本号
- CSP 检查:manifest.json CSP 不限制
connect-src,host_permissions: *://*/*已覆盖 GitHub API,无需修改 CSP
完整变更日志:CHANGELOG.md
v1.3.7 - 保存设置后状态刷新 + 固定扩展 ID
⚠ 升级提醒
从 v1.3.6 及以下升级到 v1.3.7+ 必须重新运行 native-host/install.ps1:
- 扩展 ID 已通过
manifest.json的key字段固定为llfbhodadhnfobbbkipelhknkjdflggm - Native Host 的
allowed_origins也已同步更新为固定 ID - 若不重新运行 install.ps1,Native Host 会因旧 ID 与新 ID 不匹配而无法启动
- 运行 install.ps1 时直接回车即可使用默认固定 ID,无需手动查找
Bug 修复
- 保存设置后 UI 不刷新:新增
refreshPopupStatus()函数,保存设置后显式刷新模式切换按钮、Clash 状态点、系统代理状态、clash 按钮 disabled 状态、设置页 Clash API 状态指示器 initPopup()无参数调用崩溃:支持无参数调用,内部默认获取 layout 和 settings- 回退探测被会话缓存污染:
getStatus和setMode的回退探测排除项从getApiConfig().baseUrl(可能被缓存污染)改为settings.clashApiUrl(用户配置端口),避免可用端口被错误排除 - 保存设置后重复调用 getStatus 导致状态错乱:用
latestStatus变量贯穿整个保存流程,回退分支复用statusResult,不再重复调用 getStatus
扩展 ID 固定
- 通过
manifest.json的key字段固定扩展 ID 为llfbhodadhnfobbbkipelhknkjdflggm native-host/com.clash.omega.json的allowed_origins写死固定 IDinstall.ps1默认 ExtId 设为固定 ID,用户直接回车即可安装,无需手动查找扩展 ID
Full Changelog: v1.3.6...v1.3.7