Skip to content

Releases: ciskonc/ClashOmega

v1.4.1 - Clash 远程管理模块 + mihomo 崩溃防护

Choose a tag to compare

@ciskonc ciskonc released this 03 Jul 21:44

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 / 自定义)

Choose a tag to compare

@ciskonc ciskonc released this 03 Jul 19:40

v1.4.0 — 控制台面板选择器(metacubexd / Yacd Meta / Zashboard / 自定义)

新功能

  • 「高级」子标签页新增「控制台面板」选择器,4 选 1 单选按钮:
  • 统一占位符替换机制:%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 网页面板)

Choose a tag to compare

@ciskonc ciskonc released this 03 Jul 19:31

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 恢复占位符

安装方式

  1. 下载 ClashOmega-v1.3.9.zip 并解压
  2. Chrome 访问 chrome://extensions/,开启开发者模式
  3. 「加载已解压的扩展程序」,选择 extension/ 目录
  4. (可选)双击 native-host/install.bat 安装 Native Host

详见 CHANGELOG.md

v1.3.8 - 设置页版本号显示与 GitHub 更新检测

Choose a tag to compare

@ciskonc ciskonc released this 28 Jun 13:10

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-srchost_permissions: *://*/* 已覆盖 GitHub API,无需修改 CSP

完整变更日志CHANGELOG.md

v1.3.7 - 保存设置后状态刷新 + 固定扩展 ID

Choose a tag to compare

@ciskonc ciskonc released this 26 Jun 19:06

⚠ 升级提醒

从 v1.3.6 及以下升级到 v1.3.7+ 必须重新运行 native-host/install.ps1

  1. 扩展 ID 已通过 manifest.jsonkey 字段固定为 llfbhodadhnfobbbkipelhknkjdflggm
  2. Native Host 的 allowed_origins 也已同步更新为固定 ID
  3. 若不重新运行 install.ps1,Native Host 会因旧 ID 与新 ID 不匹配而无法启动
  4. 运行 install.ps1 时直接回车即可使用默认固定 ID,无需手动查找

Bug 修复

  • 保存设置后 UI 不刷新:新增 refreshPopupStatus() 函数,保存设置后显式刷新模式切换按钮、Clash 状态点、系统代理状态、clash 按钮 disabled 状态、设置页 Clash API 状态指示器
  • initPopup() 无参数调用崩溃:支持无参数调用,内部默认获取 layout 和 settings
  • 回退探测被会话缓存污染getStatussetMode 的回退探测排除项从 getApiConfig().baseUrl(可能被缓存污染)改为 settings.clashApiUrl(用户配置端口),避免可用端口被错误排除
  • 保存设置后重复调用 getStatus 导致状态错乱:用 latestStatus 变量贯穿整个保存流程,回退分支复用 statusResult,不再重复调用 getStatus

扩展 ID 固定

  • 通过 manifest.jsonkey 字段固定扩展 ID 为 llfbhodadhnfobbbkipelhknkjdflggm
  • native-host/com.clash.omega.jsonallowed_origins 写死固定 ID
  • install.ps1 默认 ExtId 设为固定 ID,用户直接回车即可安装,无需手动查找扩展 ID

Full Changelog: v1.3.6...v1.3.7