mihomo-cli 1.0.0-alpha.1 → 1.0.2
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 +92 -0
- package/README.md +96 -105
- package/index.js +436 -78
- package/package.json +14 -5
- package/src/config.js +129 -24
- package/src/kernel.js +6 -65
- package/src/process.js +151 -9
- package/src/subscription.js +159 -15
package/CHANGELOG.md
ADDED
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
# Changelog
|
|
2
|
+
|
|
3
|
+
## [1.0.2] - 2026-04-05
|
|
4
|
+
|
|
5
|
+
### 修复
|
|
6
|
+
|
|
7
|
+
- **版本号同步**:`index.js` 不再硬编码版本号,改为从 `package.json` 读取
|
|
8
|
+
- 修复 `1.0.1` 发布后 `--version` 仍显示 `1.0.0-alpha.1` 的问题
|
|
9
|
+
|
|
10
|
+
## [1.0.1] - 2026-04-05
|
|
11
|
+
|
|
12
|
+
### 新增功能
|
|
13
|
+
|
|
14
|
+
#### 订阅管理增强
|
|
15
|
+
- **订阅信息解析**:自动解析 `subscription-userinfo` 响应头
|
|
16
|
+
- 显示已用流量 / 总流量 / 到期时间
|
|
17
|
+
- 从 `content-disposition` 提取用户名
|
|
18
|
+
- 保存 `profile-update-interval`、`profile-web-page-url`
|
|
19
|
+
|
|
20
|
+
- **数据分离存储**:
|
|
21
|
+
- 静态配置(name, url, updatedAt)→ `settings.json`
|
|
22
|
+
- 动态数据(流量、用户名、页面URL)→ `subs-cache.json`
|
|
23
|
+
|
|
24
|
+
- **自动更新过期订阅**:
|
|
25
|
+
- 默认间隔 12 小时(或订阅服务端指定的 `profile-update-interval`)
|
|
26
|
+
- `start` 命令、`sub list` 命令时自动触发检查
|
|
27
|
+
- 并行更新所有过期订阅,失败时使用本地缓存
|
|
28
|
+
|
|
29
|
+
- **订阅命令增强**:
|
|
30
|
+
- `sub use <name>`:设置默认订阅(支持模糊匹配)
|
|
31
|
+
- `sub web [name]`:打开订阅页面(无参打开默认)
|
|
32
|
+
- `sub update`:无参时更新所有订阅
|
|
33
|
+
- **模糊匹配**:精确匹配 → 前缀匹配 → 包含匹配,多匹配时提示
|
|
34
|
+
|
|
35
|
+
#### 日志管理
|
|
36
|
+
- **日志轮转**:每次启动前自动归档当前日志
|
|
37
|
+
- 命名格式:`mihomo.YYYY-MM-DD_HH-MM-SS.log`
|
|
38
|
+
- **自动清理**:默认保留 7 天日志
|
|
39
|
+
- **新命令**:
|
|
40
|
+
- `logs`:列出当前和归档日志(按时间排序)
|
|
41
|
+
- `logs <编号>`:查看指定归档日志
|
|
42
|
+
- `-n N`:指定显示行数(默认 100)
|
|
43
|
+
- `-o`:用系统默认编辑器打开
|
|
44
|
+
- `log -o`:用系统编辑器打开当前日志
|
|
45
|
+
|
|
46
|
+
#### 内核更新增强
|
|
47
|
+
- **镜像参数支持**:
|
|
48
|
+
- `kernel hk.gh-proxy.org`:使用指定镜像
|
|
49
|
+
- `kernel --mirror <url>`:显式指定镜像
|
|
50
|
+
- `kernel --no-mirror` / `--direct`:直连,不使用镜像
|
|
51
|
+
- **镜像配置持久化**:
|
|
52
|
+
- `getGitHubMirror()` / `setGitHubMirror()`
|
|
53
|
+
- 默认:`https://v6.gh-proxy.org/`
|
|
54
|
+
- 可用镜像列表在命令中列出
|
|
55
|
+
- 空字符串 `""` 或 `false` 表示禁用镜像
|
|
56
|
+
|
|
57
|
+
#### 命令别名
|
|
58
|
+
新增以下命令别名,任意一个均可调用:
|
|
59
|
+
- `mihomo`
|
|
60
|
+
- `mmc`
|
|
61
|
+
- `mh`
|
|
62
|
+
|
|
63
|
+
#### 启动流程改进
|
|
64
|
+
- `start` 命令现在包含完整的重启/切换逻辑:
|
|
65
|
+
- 先检查并自动更新过期订阅
|
|
66
|
+
- 再完全停止现有进程(即使没进程也清理运行时文件)
|
|
67
|
+
- 最后启动新进程
|
|
68
|
+
- **移除** `restart` 命令(`start` 已包含)
|
|
69
|
+
- **移除** `clean` 命令(`stop` 已包含清理)
|
|
70
|
+
|
|
71
|
+
### 改进
|
|
72
|
+
- 配置模块 `parseYamlOrJson()`:统一的 YAML/JSON 解析
|
|
73
|
+
- 订阅列表 `sub list` 显示:
|
|
74
|
+
- 默认订阅标记 `[默认]`
|
|
75
|
+
- 更新时间 / 更新间隔
|
|
76
|
+
- 用户名(如有)
|
|
77
|
+
- 流量使用:已用 / 总量 + 百分比
|
|
78
|
+
- 到期时间
|
|
79
|
+
- 订阅页面 URL
|
|
80
|
+
- `rmrf()` 改用原生 `fs.rmSync(recursive: true, force: true)`
|
|
81
|
+
- 启动脚本日志改为追加模式 (`>>`) 而非覆盖
|
|
82
|
+
|
|
83
|
+
### 移除
|
|
84
|
+
- 移除 `geodata` 相关功能:
|
|
85
|
+
- `GEODATA_REPO`、`GEODATA_FILES` 常量
|
|
86
|
+
- `downloadGeodata()` 函数
|
|
87
|
+
- `downloadFile()` 内联函数
|
|
88
|
+
|
|
89
|
+
## [1.0.0-alpha.1] - 2026-04-05
|
|
90
|
+
|
|
91
|
+
- 初始版本发布
|
|
92
|
+
- 基础功能:启动/停止、订阅管理、内核更新、Web UI
|
package/README.md
CHANGED
|
@@ -1,17 +1,19 @@
|
|
|
1
1
|
# mihomo-cli
|
|
2
2
|
|
|
3
|
-
一个基于命令行的 mihomo (Clash.Meta)
|
|
3
|
+
一个基于命令行的 mihomo (Clash.Meta) 客户端,专为 macOS 设计。Windows / Linux 正在适配中,敬请期待。
|
|
4
4
|
|
|
5
5
|
## 功能特性
|
|
6
6
|
|
|
7
|
-
- 🌐 **订阅管理** -
|
|
8
|
-
-
|
|
7
|
+
- 🌐 **订阅管理** - 添加/更新订阅,支持流量统计和到期时间显示
|
|
8
|
+
- 🔄 **自动更新** - 启动时自动检查并更新过期订阅
|
|
9
|
+
- 🔍 **模糊匹配** - `sub use` / `sub web` 支持订阅名称模糊匹配
|
|
10
|
+
- 🚀 **进程管理** - 启动/停止/切换模式,自动清理残留进程
|
|
9
11
|
- 🔄 **双模式支持** - Mixed 模式和 TUN 透明代理模式
|
|
10
12
|
- 📊 **状态监控** - 查看运行状态、内存、CPU 占用
|
|
11
|
-
- 📝
|
|
13
|
+
- 📝 **日志管理** - 实时日志 + 历史日志归档(自动轮转,保留7天)
|
|
12
14
|
- 🎨 **Web UI** - 一键打开 Web 控制面板 (zash/metacubexd/yacd)
|
|
13
|
-
- 🔄 **内核更新** -
|
|
14
|
-
-
|
|
15
|
+
- 🔄 **内核更新** - 自动检查更新,支持 GitHub 镜像加速
|
|
16
|
+
- ⌨️ **命令别名** - `mihomo` / `mmc` / `mh` 均可调用
|
|
15
17
|
|
|
16
18
|
## 安装
|
|
17
19
|
|
|
@@ -24,49 +26,51 @@ npm install -g mihomo-cli
|
|
|
24
26
|
### 方式二:源码安装
|
|
25
27
|
|
|
26
28
|
```bash
|
|
27
|
-
# 克隆仓库
|
|
28
29
|
git clone https://github.com/yourname/mihomo-cli.git
|
|
29
30
|
cd mihomo-cli
|
|
30
|
-
|
|
31
|
-
# 安装依赖
|
|
32
31
|
npm install
|
|
33
|
-
|
|
34
|
-
# 全局链接(可选)
|
|
35
32
|
npm link
|
|
36
33
|
```
|
|
37
34
|
|
|
38
|
-
### 方式三:使用预编译二进制
|
|
39
|
-
|
|
40
|
-
从 [Releases](https://github.com/yourname/mihomo-cli/releases) 页面下载对应平台的二进制文件。
|
|
41
|
-
|
|
42
35
|
## 快速开始
|
|
43
36
|
|
|
44
37
|
### 1. 下载内核
|
|
45
38
|
|
|
46
39
|
```bash
|
|
47
|
-
|
|
40
|
+
# 使用默认镜像
|
|
41
|
+
mihomo kernel
|
|
42
|
+
|
|
43
|
+
# 或指定镜像
|
|
44
|
+
mihomo kernel hk.gh-proxy.org
|
|
45
|
+
|
|
46
|
+
# 或直连(不使用镜像)
|
|
47
|
+
mihomo kernel --no-mirror
|
|
48
48
|
```
|
|
49
49
|
|
|
50
50
|
### 2. 添加订阅
|
|
51
51
|
|
|
52
52
|
```bash
|
|
53
|
-
mihomo
|
|
53
|
+
mihomo sub add "https://your-subscription-url" "my-proxy"
|
|
54
54
|
```
|
|
55
55
|
|
|
56
56
|
### 3. 启动代理
|
|
57
57
|
|
|
58
58
|
```bash
|
|
59
59
|
# Mixed 模式(默认)
|
|
60
|
-
mihomo
|
|
60
|
+
mihomo start
|
|
61
61
|
|
|
62
|
-
# TUN
|
|
63
|
-
mihomo
|
|
62
|
+
# 切换到 TUN 模式(透明代理,需要管理员权限)
|
|
63
|
+
mihomo start tun
|
|
64
|
+
|
|
65
|
+
# 再次执行 start = 重启 / 切换模式
|
|
64
66
|
```
|
|
65
67
|
|
|
66
68
|
### 4. 打开 Web UI
|
|
67
69
|
|
|
68
70
|
```bash
|
|
69
|
-
mihomo
|
|
71
|
+
mihomo ui # 默认 zash
|
|
72
|
+
mihomo ui dash # metacubexd
|
|
73
|
+
mihomo ui yacd # YACD
|
|
70
74
|
```
|
|
71
75
|
|
|
72
76
|
## 命令参考
|
|
@@ -75,30 +79,42 @@ mihomo-cli ui
|
|
|
75
79
|
|
|
76
80
|
| 命令 | 说明 |
|
|
77
81
|
|------|------|
|
|
78
|
-
| `mihomo
|
|
79
|
-
| `mihomo
|
|
80
|
-
| `mihomo
|
|
81
|
-
| `mihomo
|
|
82
|
-
| `mihomo
|
|
83
|
-
| `mihomo
|
|
82
|
+
| `mihomo start [tun\|mixed]` | 启动/重启/切换代理模式 |
|
|
83
|
+
| `mihomo stop` | 停止代理 |
|
|
84
|
+
| `mihomo status` | 查看运行状态 |
|
|
85
|
+
| `mihomo log` | 实时查看日志 (`-o` 用系统编辑器打开) |
|
|
86
|
+
| `mihomo logs` | 列出历史日志归档 |
|
|
87
|
+
| `mihomo logs <编号>` | 查看指定归档日志 (`-n N` 指定行数, `-o` 打开) |
|
|
84
88
|
|
|
85
89
|
### 订阅管理
|
|
86
90
|
|
|
87
91
|
| 命令 | 说明 |
|
|
88
92
|
|------|------|
|
|
89
|
-
| `mihomo
|
|
90
|
-
| `mihomo
|
|
91
|
-
| `mihomo
|
|
93
|
+
| `mihomo sub list` | 列出所有订阅(含流量、到期时间) |
|
|
94
|
+
| `mihomo sub add <url> [name]` | 添加订阅 |
|
|
95
|
+
| `mihomo sub update` | 更新所有订阅 |
|
|
96
|
+
| `mihomo sub update <name>` | 更新指定订阅(支持模糊匹配) |
|
|
97
|
+
| `mihomo sub use <name>` | 设置默认订阅(支持模糊匹配) |
|
|
98
|
+
| `mihomo sub web [name]` | 打开订阅页面(无参打开默认) |
|
|
92
99
|
|
|
93
100
|
### 其他命令
|
|
94
101
|
|
|
95
102
|
| 命令 | 说明 |
|
|
96
103
|
|------|------|
|
|
97
|
-
| `mihomo
|
|
98
|
-
| `mihomo
|
|
99
|
-
| `mihomo
|
|
100
|
-
| `mihomo
|
|
101
|
-
| `mihomo
|
|
104
|
+
| `mihomo kernel [镜像\|--no-mirror]` | 更新内核 |
|
|
105
|
+
| `mihomo ui [zash\|dash\|yacd]` | 打开 Web UI |
|
|
106
|
+
| `mihomo dirs` | 显示数据目录位置 |
|
|
107
|
+
| `mihomo reset [--full]` | 重置用户数据 (--full 同时删除内核) |
|
|
108
|
+
| `mihomo version` | 显示版本信息 |
|
|
109
|
+
| `mihomo help` | 显示帮助信息 |
|
|
110
|
+
|
|
111
|
+
### 命令别名
|
|
112
|
+
|
|
113
|
+
以下任意命令等效:
|
|
114
|
+
- `mihomo-cli` (原名)
|
|
115
|
+
- `mihomo`
|
|
116
|
+
- `mmc`
|
|
117
|
+
- `mh`
|
|
102
118
|
|
|
103
119
|
## 模式说明
|
|
104
120
|
|
|
@@ -111,34 +127,54 @@ mihomo-cli ui
|
|
|
111
127
|
### TUN 模式(透明代理)
|
|
112
128
|
|
|
113
129
|
- 全局自动路由,所有流量自动走代理
|
|
114
|
-
- 需要 sudo
|
|
130
|
+
- 需要 sudo / 管理员权限
|
|
115
131
|
- 首次使用会自动配置 DNS 和路由
|
|
116
132
|
|
|
117
|
-
##
|
|
133
|
+
## 内核更新镜像
|
|
118
134
|
|
|
119
|
-
|
|
135
|
+
国内网络可使用镜像加速 GitHub 下载:
|
|
120
136
|
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
137
|
+
```bash
|
|
138
|
+
# 使用指定镜像
|
|
139
|
+
mihomo kernel hk.gh-proxy.org
|
|
140
|
+
|
|
141
|
+
# 可用镜像
|
|
142
|
+
v6.gh-proxy.org # (默认)
|
|
143
|
+
gh-proxy.org
|
|
144
|
+
hk.gh-proxy.org
|
|
145
|
+
cdn.gh-proxy.org
|
|
146
|
+
edgeone.gh-proxy.org
|
|
147
|
+
|
|
148
|
+
# 直连不使用镜像
|
|
149
|
+
mihomo kernel --no-mirror
|
|
150
|
+
```
|
|
151
|
+
|
|
152
|
+
## 订阅自动更新
|
|
153
|
+
|
|
154
|
+
- 默认更新间隔:12 小时(或订阅服务端指定的 `profile-update-interval`)
|
|
155
|
+
- 触发时机:`start` 命令、`sub list` 命令
|
|
156
|
+
- 更新失败时继续使用本地缓存,不影响使用
|
|
126
157
|
|
|
127
|
-
|
|
158
|
+
## 数据目录
|
|
159
|
+
|
|
160
|
+
用户数据存储位置(与安装位置分离,更新不丢失):
|
|
128
161
|
|
|
129
162
|
```
|
|
130
|
-
mihomo-cli/
|
|
163
|
+
~/Library/Application Support/mihomo-cli/
|
|
131
164
|
├── config/
|
|
132
|
-
│ ├── config.yaml
|
|
133
|
-
│ ├──
|
|
134
|
-
│ └──
|
|
135
|
-
├──
|
|
136
|
-
│ ├── pid
|
|
137
|
-
│
|
|
138
|
-
|
|
139
|
-
│
|
|
140
|
-
└──
|
|
141
|
-
|
|
165
|
+
│ ├── config.yaml # 当前运行配置
|
|
166
|
+
│ ├── settings.json # 用户设置(订阅列表、内核版本)
|
|
167
|
+
│ └── subs-cache.json # 订阅动态缓存(流量、到期时间等)
|
|
168
|
+
├── runtime/
|
|
169
|
+
│ ├── pid # 进程 PID
|
|
170
|
+
│ └── config.yaml # mihomo 运行时配置
|
|
171
|
+
├── logs/
|
|
172
|
+
│ ├── mihomo.log # 当前日志
|
|
173
|
+
│ └── mihomo.YYYY-MM-DD_HH-MM-SS.log # 归档日志
|
|
174
|
+
├── subs/
|
|
175
|
+
│ └── <name>.yaml # 订阅原始配置
|
|
176
|
+
└── core/
|
|
177
|
+
└── mihomo # mihomo 内核二进制
|
|
142
178
|
```
|
|
143
179
|
|
|
144
180
|
## Web UI
|
|
@@ -156,24 +192,20 @@ mihomo-cli/
|
|
|
156
192
|
### 进程无法停止
|
|
157
193
|
|
|
158
194
|
```bash
|
|
159
|
-
# macOS/Linux
|
|
160
195
|
sudo pkill -9 mihomo
|
|
161
|
-
|
|
162
|
-
# Windows (管理员 PowerShell)
|
|
163
|
-
taskkill /F /IM mihomo.exe
|
|
164
196
|
```
|
|
165
197
|
|
|
166
198
|
### TUN 模式无法启动
|
|
167
199
|
|
|
168
|
-
1. 确保使用 sudo
|
|
200
|
+
1. 确保使用 sudo / 管理员权限
|
|
169
201
|
2. 检查是否有其他程序占用 53 端口
|
|
170
|
-
3.
|
|
202
|
+
3. 查看日志:`mihomo log`
|
|
171
203
|
|
|
172
204
|
### 订阅更新失败
|
|
173
205
|
|
|
174
206
|
- 检查网络连接
|
|
175
207
|
- 确认订阅 URL 有效且未过期
|
|
176
|
-
- URL 中的 token
|
|
208
|
+
- URL 中的 token 等敏感信息会自动脱敏
|
|
177
209
|
|
|
178
210
|
### 端口被占用
|
|
179
211
|
|
|
@@ -183,52 +215,11 @@ taskkill /F /IM mihomo.exe
|
|
|
183
215
|
|
|
184
216
|
## 安全特性
|
|
185
217
|
|
|
186
|
-
- **URL 脱敏**:订阅 URL 中的 token、key、password
|
|
218
|
+
- **URL 脱敏**:订阅 URL 中的 token、key、password 等敏感参数自动替换为 `***`
|
|
187
219
|
- **文件权限**:配置文件使用 `0o600` 权限(仅所有者可读可写),目录使用 `0o700` 权限
|
|
188
|
-
- **信号处理**:优雅处理 SIGINT/SIGTERM
|
|
220
|
+
- **信号处理**:优雅处理 SIGINT/SIGTERM 信号
|
|
189
221
|
- **异常捕获**:全局 uncaughtException 和 unhandledRejection 处理
|
|
190
222
|
|
|
191
|
-
## 发布
|
|
192
|
-
|
|
193
|
-
### npm 发布
|
|
194
|
-
|
|
195
|
-
```bash
|
|
196
|
-
# 登录 npm
|
|
197
|
-
npm login
|
|
198
|
-
|
|
199
|
-
# 发布(需要先更新版本号)
|
|
200
|
-
npm publish --access public
|
|
201
|
-
```
|
|
202
|
-
|
|
203
|
-
### 打包二进制
|
|
204
|
-
|
|
205
|
-
```bash
|
|
206
|
-
# 使用 pkg 打包
|
|
207
|
-
npm run pkg
|
|
208
|
-
|
|
209
|
-
# 输出在 dist/ 目录
|
|
210
|
-
```
|
|
211
|
-
|
|
212
|
-
## 开发
|
|
213
|
-
|
|
214
|
-
```bash
|
|
215
|
-
# 克隆仓库
|
|
216
|
-
git clone https://github.com/yourname/mihomo-cli.git
|
|
217
|
-
cd mihomo-cli
|
|
218
|
-
|
|
219
|
-
# 安装依赖
|
|
220
|
-
npm install
|
|
221
|
-
|
|
222
|
-
# 运行
|
|
223
|
-
node index.js help
|
|
224
|
-
|
|
225
|
-
# 检查代码
|
|
226
|
-
npm run lint
|
|
227
|
-
|
|
228
|
-
# 打包二进制
|
|
229
|
-
npm run pkg
|
|
230
|
-
```
|
|
231
|
-
|
|
232
223
|
## 许可证
|
|
233
224
|
|
|
234
225
|
MIT License - 详见 [LICENSE](LICENSE) 文件。
|