panrouter 4.2.0 → 4.3.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/cli.mjs +42 -3
- package/package.json +1 -1
package/cli.mjs
CHANGED
|
@@ -10,7 +10,7 @@ const __dirname = path.dirname(fileURLToPath(import.meta.url));
|
|
|
10
10
|
const HOME = process.env.USERPROFILE || process.env.HOME;
|
|
11
11
|
const CLAUDE_DIR = path.join(HOME, ".claude");
|
|
12
12
|
const SETTINGS_PATH = path.join(CLAUDE_DIR, "settings.json");
|
|
13
|
-
const VERSION = "4.
|
|
13
|
+
const VERSION = "4.3.0";
|
|
14
14
|
const RELAY_PATH = path.join(__dirname, "relay_client.cjs");
|
|
15
15
|
|
|
16
16
|
function log(label, msg, color = "") {
|
|
@@ -113,16 +113,51 @@ function openLogs() {
|
|
|
113
113
|
}
|
|
114
114
|
}
|
|
115
115
|
|
|
116
|
+
async function checkUpdate() {
|
|
117
|
+
log("..", "正在检查更新...", "cyan");
|
|
118
|
+
try {
|
|
119
|
+
const raw = execSync("npm view panrouter version", { encoding: "utf8", timeout: 10000 }).toString().trim();
|
|
120
|
+
const latest = raw.replace(/\n.*/s, "").trim();
|
|
121
|
+
if (!latest) { log("!!", "无法获取最新版本", "red"); return; }
|
|
122
|
+
if (latest === VERSION) {
|
|
123
|
+
log("OK", `已是最新版本 v${VERSION}`, "green");
|
|
124
|
+
return;
|
|
125
|
+
}
|
|
126
|
+
log("..", `发现新版本 v${latest} (当前 v${VERSION})`, "yellow");
|
|
127
|
+
return latest;
|
|
128
|
+
} catch (e) {
|
|
129
|
+
log("!!", "检查更新失败,请检查网络连接", "red");
|
|
130
|
+
return null;
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
async function updatePackage() {
|
|
135
|
+
console.log(`\n\x1b[36m=== Pan Router 更新 ===\x1b[0m\n`);
|
|
136
|
+
const latest = await checkUpdate();
|
|
137
|
+
if (!latest) return;
|
|
138
|
+
if (latest === VERSION) return;
|
|
139
|
+
|
|
140
|
+
stopAll();
|
|
141
|
+
log("..", "正在更新...", "yellow");
|
|
142
|
+
try {
|
|
143
|
+
execSync("npm install -g panrouter@latest", { stdio: "inherit", timeout: 60000 });
|
|
144
|
+
log("OK", `更新完成!v${VERSION} → v${latest}`, "green");
|
|
145
|
+
log("..", "请重新运行 panrouter 启动服务", "cyan");
|
|
146
|
+
} catch (e) {
|
|
147
|
+
log("!!", "更新失败,请手动运行: npm install -g panrouter@latest", "red");
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
|
|
116
151
|
function startRelay() {
|
|
117
152
|
if (!fs.existsSync(RELAY_PATH)) {
|
|
118
153
|
log("!!", "中继客户端文件不存在: relay_client.cjs", "red");
|
|
119
154
|
return false;
|
|
120
155
|
}
|
|
121
156
|
const relayLog = path.join(process.env.TEMP, "panrouter_relay.log");
|
|
122
|
-
const
|
|
157
|
+
const fd = fs.openSync(relayLog, "a");
|
|
123
158
|
const relay = spawn(process.execPath, [RELAY_PATH], {
|
|
124
159
|
cwd: __dirname,
|
|
125
|
-
stdio: ["ignore",
|
|
160
|
+
stdio: ["ignore", fd, fd],
|
|
126
161
|
windowsHide: true,
|
|
127
162
|
detached: true
|
|
128
163
|
});
|
|
@@ -231,6 +266,7 @@ function printHelp() {
|
|
|
231
266
|
| \x1b[33mpanrouter --server\x1b[0m | 前台窗口模式 |
|
|
232
267
|
| \x1b[33mpanrouter --relay\x1b[0m | 单独启动中继客户端 |
|
|
233
268
|
| \x1b[33mpanrouter --relay-stop\x1b[0m | 单独停止中继客户端 |
|
|
269
|
+
| \x1b[33mpanrouter --update\x1b[0m | 检查并更新到最新版 |
|
|
234
270
|
| \x1b[33mpanrouter --logs\x1b[0m | 打开日志 |
|
|
235
271
|
| \x1b[33mpanrouter --version\x1b[0m | 版本号 |
|
|
236
272
|
| \x1b[33mpanrouter --help\x1b[0m | 帮助 |
|
|
@@ -259,6 +295,9 @@ async function main() {
|
|
|
259
295
|
case "--stop":
|
|
260
296
|
stopAll();
|
|
261
297
|
break;
|
|
298
|
+
case "--update":
|
|
299
|
+
await updatePackage();
|
|
300
|
+
break;
|
|
262
301
|
case "--logs":
|
|
263
302
|
openLogs();
|
|
264
303
|
break;
|