@aweray/hsk-cli 0.2.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/README.md +356 -0
- package/bin/hsk-cli.js +439 -0
- package/index.js +11 -0
- package/lib/build.js +27 -0
- package/lib/config.js +63 -0
- package/lib/download.js +87 -0
- package/lib/fileHosting.js +257 -0
- package/lib/format.js +116 -0
- package/lib/pack.js +68 -0
- package/lib/pidManager.js +142 -0
- package/lib/platform.js +64 -0
- package/lib/resourceChecker.js +59 -0
- package/lib/resourceStore.js +112 -0
- package/lib/tunnel.js +192 -0
- package/lib/version.js +3 -0
- package/package.json +42 -0
- package/versions.json +18 -0
package/README.md
ADDED
|
@@ -0,0 +1,356 @@
|
|
|
1
|
+
# HSK CLI
|
|
2
|
+
|
|
3
|
+
> HSK CLI — 零配置公网预览工具。一键内网穿透、文件托管,支持 Windows / macOS / Linux 多平台。
|
|
4
|
+
|
|
5
|
+
[](https://www.npmjs.com/package/@aweray/hsk-cli)
|
|
6
|
+
[](https://nodejs.org/)
|
|
7
|
+
[](LICENSE)
|
|
8
|
+
|
|
9
|
+
## Features
|
|
10
|
+
|
|
11
|
+
- **多平台自动适配** — 自动检测操作系统和架构,下载对应原生客户端二进制
|
|
12
|
+
- **内网穿透** — 一键将本地服务暴露到公网,支持前台/后台两种保活模式
|
|
13
|
+
- **文件托管** — 上传本地文件或构建产物,获取公网下载链接
|
|
14
|
+
- **构建部署** — `deploy` 命令一键完成 build → pack → upload
|
|
15
|
+
- **AI 友好** — 支持 `--json` 结构化输出,便于 AI Agent 解析和自动化
|
|
16
|
+
- **版本同步** — npm 包版本与原生二进制版本一致,自动匹配升级
|
|
17
|
+
|
|
18
|
+
## Supported Platforms
|
|
19
|
+
|
|
20
|
+
| Platform | Architectures |
|
|
21
|
+
|----------|---------------|
|
|
22
|
+
| macOS | Intel (amd64), Apple Silicon (arm64) |
|
|
23
|
+
| Linux | amd64 |
|
|
24
|
+
| Windows | amd64 |
|
|
25
|
+
|
|
26
|
+
## Installation
|
|
27
|
+
|
|
28
|
+
**Requirements:** Node.js >= 14
|
|
29
|
+
|
|
30
|
+
```bash
|
|
31
|
+
# 全局安装
|
|
32
|
+
npm install -g @aweray/hsk-cli
|
|
33
|
+
|
|
34
|
+
# 或 npx 免安装运行
|
|
35
|
+
npx @aweray/hsk-cli <command>
|
|
36
|
+
```
|
|
37
|
+
|
|
38
|
+
首次运行时,CLI 会自动检测当前平台并下载对应的原生客户端二进制到 `~/.hsk/bin/`。
|
|
39
|
+
|
|
40
|
+
## Quick Start
|
|
41
|
+
|
|
42
|
+
### 1. 预下载客户端
|
|
43
|
+
|
|
44
|
+
```bash
|
|
45
|
+
hsk-cli download
|
|
46
|
+
```
|
|
47
|
+
|
|
48
|
+
### 2. 启动内网穿透(前台保活)
|
|
49
|
+
|
|
50
|
+
```bash
|
|
51
|
+
hsk-cli tunnel --ip 127.0.0.1 --port 9000
|
|
52
|
+
```
|
|
53
|
+
|
|
54
|
+
按 `Ctrl+C` 停止隧道。
|
|
55
|
+
|
|
56
|
+
### 3. 启动内网穿透(后台保活)
|
|
57
|
+
|
|
58
|
+
```bash
|
|
59
|
+
hsk-cli tunnel --ip 127.0.0.1 --port 9000 --detach
|
|
60
|
+
```
|
|
61
|
+
|
|
62
|
+
后台模式启动后 CLI 立即退出,隧道持续运行。使用 `tunnel list` / `tunnel stop` 管理。
|
|
63
|
+
|
|
64
|
+
### 4. 文件托管
|
|
65
|
+
|
|
66
|
+
```bash
|
|
67
|
+
hsk-cli host ./document.pdf
|
|
68
|
+
```
|
|
69
|
+
|
|
70
|
+
### 5. 构建并部署项目
|
|
71
|
+
|
|
72
|
+
```bash
|
|
73
|
+
hsk-cli deploy
|
|
74
|
+
```
|
|
75
|
+
|
|
76
|
+
自动执行 `npm run build` → 打包 `dist/` → 上传到文件托管。
|
|
77
|
+
|
|
78
|
+
---
|
|
79
|
+
|
|
80
|
+
## Global Options
|
|
81
|
+
|
|
82
|
+
| Option | Description |
|
|
83
|
+
|--------|-------------|
|
|
84
|
+
| `--format <format>` | 输出格式: `json`, `pretty`, `table`, `ndjson`, `csv` (默认: `pretty`) |
|
|
85
|
+
| `--dry-run` | 预览模式,不执行实际操作 |
|
|
86
|
+
| `--json` | `--format json` 的快捷方式 |
|
|
87
|
+
|
|
88
|
+
---
|
|
89
|
+
|
|
90
|
+
## Command Reference
|
|
91
|
+
|
|
92
|
+
### Tunnel Management
|
|
93
|
+
|
|
94
|
+
#### `tunnel` — 启动内网穿透
|
|
95
|
+
|
|
96
|
+
```bash
|
|
97
|
+
hsk-cli tunnel --ip <IP> --port <PORT> [options]
|
|
98
|
+
```
|
|
99
|
+
|
|
100
|
+
| Option | Required | Description |
|
|
101
|
+
|--------|----------|-------------|
|
|
102
|
+
| `--ip <ip>` | 是 | 本地服务 IP 地址 |
|
|
103
|
+
| `--port <port>` | 是 | 本地服务端口(1-65535) |
|
|
104
|
+
| `--arch <arch>` | 否 | 强制指定客户端架构: `win32`, `win64`, `macos-x64`, `macos-arm64`, `linux-x64`, `linux-arm64` |
|
|
105
|
+
| `--force-download` | 否 | 强制重新下载客户端二进制 |
|
|
106
|
+
| `--detach` | 否 | 后台模式,CLI 立即退出,隧道持续运行 |
|
|
107
|
+
| `--json` | 否 | 以 JSON 格式输出 |
|
|
108
|
+
|
|
109
|
+
#### `tunnel list` — 查看后台隧道
|
|
110
|
+
|
|
111
|
+
```bash
|
|
112
|
+
hsk-cli tunnel list
|
|
113
|
+
```
|
|
114
|
+
|
|
115
|
+
显示所有后台运行的隧道,包括 PID、本地目标、启动时间和日志路径。自动清理已停止隧道的残留记录。
|
|
116
|
+
|
|
117
|
+
#### `tunnel stop` — 停止隧道
|
|
118
|
+
|
|
119
|
+
```bash
|
|
120
|
+
# 停止指定 PID
|
|
121
|
+
hsk-cli tunnel stop --pid <PID>
|
|
122
|
+
|
|
123
|
+
# 停止全部
|
|
124
|
+
hsk-cli tunnel stop --all
|
|
125
|
+
```
|
|
126
|
+
|
|
127
|
+
### File Hosting
|
|
128
|
+
|
|
129
|
+
#### `host` — 上传文件
|
|
130
|
+
|
|
131
|
+
```bash
|
|
132
|
+
hsk-cli host <filePath> [options]
|
|
133
|
+
```
|
|
134
|
+
|
|
135
|
+
| Option | Required | Description |
|
|
136
|
+
|--------|----------|-------------|
|
|
137
|
+
| `<filePath>` | 是 | 本地文件路径 |
|
|
138
|
+
| `--resource-id <id>` | 否 | 资源 ID(传入则更新已有资源) |
|
|
139
|
+
| `--open` | 否 | 上传完成后自动打开浏览器进行认领 |
|
|
140
|
+
| `--json` | 否 | 以 JSON 格式输出 |
|
|
141
|
+
|
|
142
|
+
> **注意**: `host` 仅支持单文件。上传目录(如 build/dist)请使用 `deploy` 命令。
|
|
143
|
+
|
|
144
|
+
### Deploy
|
|
145
|
+
|
|
146
|
+
#### `deploy` — 构建并部署项目
|
|
147
|
+
|
|
148
|
+
```bash
|
|
149
|
+
hsk-cli deploy [options]
|
|
150
|
+
```
|
|
151
|
+
|
|
152
|
+
一键执行:**构建** → **打包** → **上传**。
|
|
153
|
+
|
|
154
|
+
| Option | Description |
|
|
155
|
+
|--------|-------------|
|
|
156
|
+
| `--build-cmd <cmd>` | 构建命令(默认: `npm run build`) |
|
|
157
|
+
| `--build-dir <dir>` | 构建输出目录(默认: `dist`) |
|
|
158
|
+
| `--pack-output <file>` | 打包文件名(默认: `dist.zip`) |
|
|
159
|
+
| `--no-build` | 跳过构建,直接打包上传现有目录 |
|
|
160
|
+
| `--no-clean` | 上传后保留打包文件 |
|
|
161
|
+
| `--resource-id <id>` | 更新已有资源 |
|
|
162
|
+
| `--open` | 上传完成后自动打开浏览器 |
|
|
163
|
+
| `--json` | 以 JSON 格式输出 |
|
|
164
|
+
|
|
165
|
+
**配置优先级**: 命令行参数 > 项目 `package.json` 的 `hsk.deploy` > 全局 `~/.hsk/config.json` > 默认配置
|
|
166
|
+
|
|
167
|
+
**项目配置示例(`package.json`)**:
|
|
168
|
+
|
|
169
|
+
```json
|
|
170
|
+
{
|
|
171
|
+
"scripts": {
|
|
172
|
+
"build": "vite build"
|
|
173
|
+
},
|
|
174
|
+
"hsk": {
|
|
175
|
+
"deploy": {
|
|
176
|
+
"buildCmd": "npm run build",
|
|
177
|
+
"buildDir": "dist",
|
|
178
|
+
"packOutput": "dist.zip",
|
|
179
|
+
"cleanAfterUpload": true
|
|
180
|
+
}
|
|
181
|
+
}
|
|
182
|
+
}
|
|
183
|
+
```
|
|
184
|
+
|
|
185
|
+
### System
|
|
186
|
+
|
|
187
|
+
#### `download` — 预下载客户端
|
|
188
|
+
|
|
189
|
+
```bash
|
|
190
|
+
hsk-cli download [--arch <arch>]
|
|
191
|
+
```
|
|
192
|
+
|
|
193
|
+
#### `update` — 更新客户端
|
|
194
|
+
|
|
195
|
+
```bash
|
|
196
|
+
hsk-cli update [--arch <arch>] [--force]
|
|
197
|
+
```
|
|
198
|
+
|
|
199
|
+
#### `platform` — 显示平台信息
|
|
200
|
+
|
|
201
|
+
```bash
|
|
202
|
+
hsk-cli platform
|
|
203
|
+
```
|
|
204
|
+
|
|
205
|
+
---
|
|
206
|
+
|
|
207
|
+
## Examples
|
|
208
|
+
|
|
209
|
+
### 启动内网穿透并管理
|
|
210
|
+
|
|
211
|
+
```bash
|
|
212
|
+
# 前台模式(按 Ctrl+C 停止)
|
|
213
|
+
hsk-cli tunnel --ip 127.0.0.1 --port 9000
|
|
214
|
+
|
|
215
|
+
# 后台模式
|
|
216
|
+
hsk-cli tunnel --ip 127.0.0.1 --port 9000 --detach
|
|
217
|
+
|
|
218
|
+
# 查看后台隧道
|
|
219
|
+
hsk-cli tunnel list
|
|
220
|
+
|
|
221
|
+
# 停止全部后台隧道
|
|
222
|
+
hsk-cli tunnel stop --all
|
|
223
|
+
```
|
|
224
|
+
|
|
225
|
+
### 上传文件并自动认领
|
|
226
|
+
|
|
227
|
+
```bash
|
|
228
|
+
hsk-cli host ./report.pdf --open
|
|
229
|
+
```
|
|
230
|
+
|
|
231
|
+
### 跨平台预下载
|
|
232
|
+
|
|
233
|
+
```bash
|
|
234
|
+
# 在 macOS 上预下载 Linux 版本
|
|
235
|
+
hsk-cli download --arch linux-x64
|
|
236
|
+
```
|
|
237
|
+
|
|
238
|
+
### JSON 输出(AI 友好)
|
|
239
|
+
|
|
240
|
+
```bash
|
|
241
|
+
hsk-cli tunnel --ip 127.0.0.1 --port 9000 --json
|
|
242
|
+
hsk-cli host ./document.pdf --json
|
|
243
|
+
```
|
|
244
|
+
|
|
245
|
+
### 构建并部署
|
|
246
|
+
|
|
247
|
+
```bash
|
|
248
|
+
# 使用项目配置
|
|
249
|
+
hsk-cli deploy
|
|
250
|
+
|
|
251
|
+
# 命令行覆盖配置
|
|
252
|
+
hsk-cli deploy --build-cmd "yarn build" --build-dir "build"
|
|
253
|
+
|
|
254
|
+
# 跳过构建,直接上传
|
|
255
|
+
hsk-cli deploy --no-build
|
|
256
|
+
|
|
257
|
+
# 更新已有资源
|
|
258
|
+
hsk-cli deploy --resource-id abc123 --open
|
|
259
|
+
```
|
|
260
|
+
|
|
261
|
+
---
|
|
262
|
+
|
|
263
|
+
## Configuration
|
|
264
|
+
|
|
265
|
+
### 项目配置(`package.json`)
|
|
266
|
+
|
|
267
|
+
```json
|
|
268
|
+
{
|
|
269
|
+
"hsk": {
|
|
270
|
+
"deploy": {
|
|
271
|
+
"buildCmd": "npm run build",
|
|
272
|
+
"buildDir": "dist",
|
|
273
|
+
"packOutput": "dist.zip",
|
|
274
|
+
"cleanAfterUpload": true
|
|
275
|
+
}
|
|
276
|
+
}
|
|
277
|
+
}
|
|
278
|
+
```
|
|
279
|
+
|
|
280
|
+
### 全局配置(`~/.hsk/config.json`)
|
|
281
|
+
|
|
282
|
+
```json
|
|
283
|
+
{
|
|
284
|
+
"deploy": {
|
|
285
|
+
"buildCmd": "npm run build",
|
|
286
|
+
"buildDir": "dist",
|
|
287
|
+
"packOutput": "dist.zip",
|
|
288
|
+
"cleanAfterUpload": true
|
|
289
|
+
}
|
|
290
|
+
}
|
|
291
|
+
```
|
|
292
|
+
|
|
293
|
+
### 环境变量
|
|
294
|
+
|
|
295
|
+
| Variable | Description |
|
|
296
|
+
|----------|-------------|
|
|
297
|
+
| `HSK_DOWNLOAD_URL` | 客户端二进制下载基地址 |
|
|
298
|
+
| `HSK_FILE_HOSTING_API` | Ticket API 完整 URL |
|
|
299
|
+
| `HSK_FILE_HOSTING_TICKET_HOST` | Ticket 服务主机 |
|
|
300
|
+
| `HSK_FILE_HOSTING_UPLOAD_HOST` | 上传服务主机 |
|
|
301
|
+
| `HSK_FILE_HOSTING_UPLOAD_PORT` | 上传服务端口 |
|
|
302
|
+
| `HSK_FILE_HOSTING_UPLOAD_SCHEME` | 上传服务协议 |
|
|
303
|
+
|
|
304
|
+
---
|
|
305
|
+
|
|
306
|
+
## Logs
|
|
307
|
+
|
|
308
|
+
- **macOS / Linux**: `~/.hsk/logs/`
|
|
309
|
+
- **Windows**: `%USERPROFILE%\.hsk\logs\`
|
|
310
|
+
|
|
311
|
+
---
|
|
312
|
+
|
|
313
|
+
## How It Works
|
|
314
|
+
|
|
315
|
+
```
|
|
316
|
+
┌─────────────────┐ ┌──────────────┐ ┌─────────────────┐
|
|
317
|
+
│ hsk-cli npm │ ──▶ │ versions.json │ ──▶ │ download binary │
|
|
318
|
+
│ package (node)│ │ (version map) │ │ ~/.hsk/bin/ │
|
|
319
|
+
└─────────────────┘ └──────────────┘ └─────────────────┘
|
|
320
|
+
│
|
|
321
|
+
▼
|
|
322
|
+
┌─────────────────┐
|
|
323
|
+
│ native binary │ ← 实际执行内网穿透/文件托管
|
|
324
|
+
│ (cross-platform)│
|
|
325
|
+
└─────────────────┘
|
|
326
|
+
```
|
|
327
|
+
|
|
328
|
+
- **npm 包**(启动器):提供命令行接口、平台检测、自动下载、版本管理
|
|
329
|
+
- **versions.json**:定义 npm 包版本与原生二进制版本的映射关系
|
|
330
|
+
- **原生二进制**:按平台编译(Go/Rust/C++),实际执行网络穿透和文件传输
|
|
331
|
+
|
|
332
|
+
---
|
|
333
|
+
|
|
334
|
+
## Notes
|
|
335
|
+
|
|
336
|
+
- During installation, the package automatically downloads the appropriate native binary for your operating system and architecture.
|
|
337
|
+
- The CLI caches downloaded binaries in `~/.hsk/bin/`. No manual setup is required after installation.
|
|
338
|
+
- The npm package version and native binary version are kept in sync. When you update the npm package, the corresponding binary will be downloaded automatically.
|
|
339
|
+
- **前台模式(默认)**: CLI 启动客户端二进制作为子进程,实时输出日志,捕获到公网地址后持续运行。按 `Ctrl+C` 发送 `SIGTERM` 优雅停止。
|
|
340
|
+
- **后台模式(`--detach`)**: CLI 启动子进程后使用 `detached: true` 解除父子绑定,立即退出。子进程在后台独立运行,日志写入 `~/.hsk/logs/`,PID 记录保存到 `~/.hsk/pids/`.
|
|
341
|
+
- **Deploy**: `hsk-cli deploy` 执行 `build` → `pack` → `upload` 三步。打包使用系统原生 `zip`(macOS/Linux)或 PowerShell `Compress-Archive`(Windows),无需额外依赖.
|
|
342
|
+
- Enable `--dry-run` to preview operations without executing them.
|
|
343
|
+
|
|
344
|
+
---
|
|
345
|
+
|
|
346
|
+
## Changelog
|
|
347
|
+
|
|
348
|
+
See [CHANGELOG.md](CHANGELOG.md) for release history.
|
|
349
|
+
|
|
350
|
+
## Contributing
|
|
351
|
+
|
|
352
|
+
We welcome contributions! Please see [CONTRIBUTING.md](c) for guidelines.
|
|
353
|
+
|
|
354
|
+
## License
|
|
355
|
+
|
|
356
|
+
Copyright (c) 2026 Oray Inc. All rights reserved.
|