mihomo-cli 3.4.0 → 3.6.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +33 -0
- package/README.md +5 -4
- package/dist/index.js +1058 -1003
- package/package.json +2 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,38 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## [3.6.0] - 2026-08-15
|
|
4
|
+
|
|
5
|
+
### 修复
|
|
6
|
+
|
|
7
|
+
- **`sub add` 重名时误删既有同名订阅** - 回滚逻辑包住了入库步骤,添加重名订阅时「已存在」错误同样触发 `removeSubscription`,把用户既有的同名订阅(含缓存与配置文件)删掉。现入库移出 try 块,回滚仅覆盖「入库成功后下载失败」
|
|
8
|
+
- **`start` 拼错模式名静默按 Mixed 启动** - `mihomo start tn` 之类只判 `=== 'tun'`,拼错不报错,用户会误以为已切到 TUN。现校验模式参数并报错,参数校验先于内核/订阅环境检查
|
|
9
|
+
- **pidFile 运行判定可被 PID 复用欺骗** - 只检查 pid 存活,系统重启后残留 pid 文件里的 pid 可能已被无关进程复用,被误判成运行中的 mihomo。现同时校验进程命令行包含内核路径(与测速实例防护同口径)
|
|
10
|
+
- **数据层预期错误打印堆栈** - 订阅名称非法/重名、未找到订阅配置、无有效节点、内核/配置缺失等用户可见的预期错误仍抛裸 `Error`,经统一收口后打印堆栈。现全部迁移为 `CliError`
|
|
11
|
+
|
|
12
|
+
### 新增
|
|
13
|
+
|
|
14
|
+
- **did-you-mean 纠错** - 未知命令与 `sub`/`daemon` 未知子命令按前缀 + 编辑距离给出纠错建议(如 `mihomo strt` -> `是否想输入: start / stop?`)
|
|
15
|
+
- **`update` 更新前检查最新版** - 先查 npm registry,已是最新版本则跳过重装;查询失败(15s 超时)降级为直接安装
|
|
16
|
+
- **`status` 显示订阅流量与到期** - 复用订阅缓存的响应头数据,有则展示
|
|
17
|
+
- **场景化提醒** - `ui` 在 mihomo 未运行时提示先启动;`kernel` 更新成功后运行中实例提示需重启生效
|
|
18
|
+
|
|
19
|
+
### 内部
|
|
20
|
+
|
|
21
|
+
- **utils 按职责拆分** - `colors.ts`(颜色)、`errors.ts`(CliError/TimeoutError/withTimeout)、`http.ts`(HTTP 客户端)独立成模块;`isProcess*` 进程探测归入 `process.ts`,`isProxyValid` 归入其唯一消费者 `test-instance.ts`;`VERSION`/`PKG_NAME` 移入 `constants.ts`。`utils.ts` 只留无副作用的纯函数(sleep、转义、格式化、flag 解析、纠错建议)
|
|
22
|
+
- **补充单元测试** - 新增 `suggestSimilar`(did-you-mean)单测,总计 55 个
|
|
23
|
+
|
|
24
|
+
## [3.5.0] - 2026-08-15
|
|
25
|
+
|
|
26
|
+
### 变更
|
|
27
|
+
|
|
28
|
+
- **统一错误处理机制** - 命令层与数据层的预期错误改为抛出领域错误 `CliError`,由入口 `main().catch` 单点渲染(错误前缀 + 多行提示 + 退出码)并执行清理。此前命令层散落几十处 `console.error + process.exit`,错误从不冒泡到统一收口、可能绕过退出前清理。现仅信号处理器与日志 `tail` 事件回调保留直接退出(进程生命周期末端,无法收口)。所有错误前缀统一为红色(`NO_COLOR`/非 TTY 下自动降级为纯文本),动词化提示(如「配置错误」「启用保活失败」)予以保留
|
|
29
|
+
- **数据层去除 UI 副作用** - `pickSingleSubscription` 等数据层函数不再直接打印和退出进程,改为抛错由命令层收口,函数返回类型恢复诚实、可复用
|
|
30
|
+
|
|
31
|
+
### 内部
|
|
32
|
+
|
|
33
|
+
- **命令子命令分发同构化** - `subscription`/`overwrite`/`directory`/`daemon` 的手写 `if (action === ...)` 分支链改为与顶层命令注册表同构的表驱动分发(`dispatchSubcommand` + 子命令表),并抽取 `requireRunning`/`restartToApply`/`requireActiveSubscription`/`resolveSubscription` 等公共 helper 消除重复。命令行为、帮助输出与退出码均无变化
|
|
34
|
+
- **补充单元测试** - 为覆写合并(`parseOverrideKey`/`deepMergeWithOverrides`/作用域匹配)、配置校验(级联删除/规则目标)、节点名归一化、URL 遮蔽等高危纯函数补充 49 个单测,使用 Node 内置 `node:test` 经 tsx 运行,零新增依赖(`npm test`)
|
|
35
|
+
|
|
3
36
|
## [3.4.0] - 2026-08-15
|
|
4
37
|
|
|
5
38
|
### 修复
|
package/README.md
CHANGED
|
@@ -13,10 +13,11 @@
|
|
|
13
13
|
- 🚀 **进程管理** - 启动/停止/切换模式,自动清理残留进程
|
|
14
14
|
- 🛡️ **进程保活** - 基于 launchd(root),崩溃/开机自动拉起,代理后台常驻(`daemon on`)
|
|
15
15
|
- 🔄 **双模式支持** - Mixed 模式和 TUN 透明代理模式
|
|
16
|
-
- 📊 **状态监控** -
|
|
16
|
+
- 📊 **状态监控** - 查看运行状态、内存占用、订阅流量与到期时间
|
|
17
17
|
- 📝 **日志管理** - 实时日志 + 历史日志归档(自动轮转,保留7天)
|
|
18
18
|
- 🎨 **Web UI** - 一键打开 Web 控制面板 (zash/metacubexd/yacd)
|
|
19
19
|
- 🔄 **内核更新** - 自动检查更新,支持 GitHub 镜像加速
|
|
20
|
+
- 💡 **容错提示** - 命令/子命令拼错时给出 did-you-mean 纠错建议
|
|
20
21
|
- ⌨️ **命令别名** - `mihomo` / `mhm` / `mh` 均可调用
|
|
21
22
|
|
|
22
23
|
## 安装
|
|
@@ -86,7 +87,7 @@ mihomo ui yacd # YACD
|
|
|
86
87
|
| --------------------------- | ---------------------------------------------------------------------------- |
|
|
87
88
|
| `mihomo start [tun\|mixed]` | 启动/重启/切换代理模式(`-s` 跳过更新,`-u` 更新超时,`-r` 清理轮次,`-t` 超时,`-j` 并发,`--no-clean` 跳过启动自动清理) |
|
|
88
89
|
| `mihomo stop` | 停止代理 |
|
|
89
|
-
| `mihomo status` |
|
|
90
|
+
| `mihomo status` | 查看运行状态(含订阅流量、到期时间) |
|
|
90
91
|
| `mihomo log` | 实时查看日志 (`-o` 用系统编辑器打开) |
|
|
91
92
|
| `mihomo logs` | 列出所有日志(当前 + 历史归档) |
|
|
92
93
|
| `mihomo logs <编号>` | 查看指定日志(`0`=当前日志,`1+`=归档日志,支持 `-n N` 指定行数、`-o` 打开) |
|
|
@@ -119,9 +120,9 @@ mihomo ui yacd # YACD
|
|
|
119
120
|
|
|
120
121
|
| 命令 | 说明 |
|
|
121
122
|
| --------------------------------- | ------------------------------------------------------------------- |
|
|
122
|
-
| `mihomo kernel [--mirror [镜像]]` | 更新内核(默认直连,`--mirror`
|
|
123
|
+
| `mihomo kernel [--mirror [镜像]]` | 更新内核(默认直连,`--mirror` 使用镜像;更新后运行中实例需重启生效) |
|
|
123
124
|
| `mihomo daemon [on\|off\|status]` | 进程保活:开机自启 + 崩溃自动重启(仅 Mixed 模式,on/off 需管理员密码) |
|
|
124
|
-
| `mihomo update` | 更新 mihomo-cli
|
|
125
|
+
| `mihomo update` | 更新 mihomo-cli(先查 npm 最新版,已是最新则跳过重装) |
|
|
125
126
|
| `mihomo ui [zash\|dash\|yacd]` | 打开 Web UI |
|
|
126
127
|
| `mihomo dir` | 显示数据目录位置 |
|
|
127
128
|
| `mihomo dir open [target]` | 打开指定目录(`root`, `subs`, `logs`, `kernel` 等) |
|