panrouter 1.7.0 → 1.7.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.
Files changed (3) hide show
  1. package/cli.mjs +9 -13
  2. package/daemon.mjs +34 -11
  3. package/package.json +1 -1
package/cli.mjs CHANGED
@@ -140,17 +140,6 @@ async function startServer() {
140
140
 
141
141
  // ─── 4. 以托盘模式启动 ──────────────────────────────────────────────────
142
142
 
143
- /**
144
- * 启动 daemon (Node 常驻进程, 管理 server + PS tray)
145
- *
146
- * cli.mjs ─→ node daemon.mjs (detached, hidden)
147
- * ├─ 启动 server.mjs (子进程, detached, hidden)
148
- * └─ 启动 powershell tray-daemon.ps1 (子进程, hidden)
149
- * └─ 保持存活, 30s 健康检查
150
- *
151
- * key: 用 process.execPath (绝对路径) 启动
152
- * 避免 VBS/WScript/CMD 的 PATH 查找问题
153
- */
154
143
  function startTray() {
155
144
  const daemonPath = path.join(__dirname, "daemon.mjs");
156
145
 
@@ -170,8 +159,15 @@ function startTray() {
170
159
  });
171
160
  child.unref();
172
161
 
173
- log("OK", "Pan Router 托盘已启动", "green");
174
- console.log(" 图标出现在右下角后, 即可运行 claude");
162
+ log("OK", "Pan Router 托盘服务已启动", "green");
163
+ console.log("");
164
+ console.log(" \x1b[33m实时查看日志:\x1b[0m");
165
+ console.log(" powershell -Command \"Get-Content -Wait -Tail 20 $env:TEMP\\panrouter-daemon.log\"");
166
+ console.log("");
167
+ console.log(" \x1b[33m查看全部日志:\x1b[0m");
168
+ console.log(" notepad %TEMP%\\panrouter-daemon.log");
169
+ console.log("");
170
+ console.log(" 若 10 秒后图标未出现,请查看日志并反馈");
175
171
  }
176
172
 
177
173
  // ─── 主流程 ──────────────────────────────────────────────────────────────
package/daemon.mjs CHANGED
@@ -69,26 +69,49 @@ function isOnline() {
69
69
  log(`Server online=${ready}`);
70
70
 
71
71
  // ─── 4. 用 VBS 启动 PS 托盘 ─────────────────────
72
- // 关键: spawn detached 进程没有 Window Station 访问权限,
73
- // 无法创建 NotifyIcon。WScript.Shell.Run 0 是可靠的解决方式。
72
+ log("Starting PS tray via VBS...");
73
+
74
74
  if (fs.existsSync(trayPsPath)) {
75
+ log(`trayPsPath exists: ${trayPsPath}`);
76
+
75
77
  // 创建临时的 VBS 启动器
76
78
  const vbsContent = `Set WshShell = CreateObject("WScript.Shell")
79
+ Set FSO = CreateObject("Scripting.FileSystemObject")
80
+ ' 写诊断日志
81
+ On Error Resume Next
82
+ Dim f : Set f = FSO.OpenTextFile("${(process.env.TEMP || "/tmp").replace(/\\/g, "\\\\")}\\panrouter-vbs.log", 2, True)
83
+ f.WriteLine Now & " VBS started"
84
+ f.Close
85
+ ' 启动 PS 托盘
77
86
  WshShell.Run "powershell -ExecutionPolicy Bypass -WindowStyle Hidden -STA -File """ & "${trayPsPath.replace(/\\/g, "\\\\")}" & """", 0, False
87
+ If Err.Number <> 0 Then
88
+ Set f = FSO.OpenTextFile("${(process.env.TEMP || "/tmp").replace(/\\/g, "\\\\")}\\panrouter-vbs.log", 8, True)
89
+ f.WriteLine Now & " ERROR: " & Err.Description
90
+ f.Close
91
+ End If
78
92
  `;
79
93
  const vbsPath = path.join(process.env.TEMP || "/tmp", "panrouter-tray-launcher.vbs");
80
- try { fs.writeFileSync(vbsPath, vbsContent, "utf8"); } catch {}
94
+ try {
95
+ fs.writeFileSync(vbsPath, vbsContent, "utf8");
96
+ log(`VBS written: ${vbsPath}`);
97
+ } catch (e) {
98
+ log(`VBS write FAILED: ${e.message}`);
99
+ }
81
100
 
82
- log(`VBS launcher: ${vbsPath}`);
101
+ log(`VBS content:\n${vbsContent}`);
83
102
 
84
- // wscript //B = 批处理模式, 无交互
85
- const vbs = spawn("wscript.exe", ["//B", "//NoLogo", vbsPath], {
86
- stdio: "ignore", windowsHide: true, shell: false,
87
- });
88
- vbs.unref();
89
- log(`VBS launched`);
103
+ // 先试 wscript //B
104
+ try {
105
+ const vbs = spawn("wscript.exe", ["//B", "//NoLogo", vbsPath], {
106
+ stdio: "ignore", windowsHide: true, shell: false,
107
+ });
108
+ vbs.unref();
109
+ log(`VBS spawned via wscript`);
110
+ } catch (e) {
111
+ log(`VBS via wscript FAILED: ${e.message}`);
112
+ }
90
113
  } else {
91
- log(`WARN: ${trayPsPath} not found`);
114
+ log(`WARN: tray-daemon.ps1 NOT FOUND at ${trayPsPath}`);
92
115
  }
93
116
 
94
117
  // ─── 5. 保持存活 ────────────────────────────────
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "panrouter",
3
- "version": "1.7.0",
3
+ "version": "1.7.2",
4
4
  "description": "让 Claude Code 免费使用 DeepSeek 等模型,无需 API Key",
5
5
  "type": "module",
6
6
  "bin": {