claude-opencode-viewer 2.6.27 → 2.6.29
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/package.json +1 -1
- package/server.js +16 -8
package/package.json
CHANGED
package/server.js
CHANGED
|
@@ -53,9 +53,9 @@ async function getOrCreateCert() {
|
|
|
53
53
|
return { key: pems.private, cert: pems.cert };
|
|
54
54
|
}
|
|
55
55
|
|
|
56
|
-
// OpenCode
|
|
57
|
-
const OPENCODE_DB_PATH = process.env.OPENCODE_DB_PATH || join(
|
|
58
|
-
|
|
56
|
+
// OpenCode 数据库路径(优先读 OPENCODE_DB 环境变量,兼容本地盘 DB 方案)
|
|
57
|
+
const OPENCODE_DB_PATH = process.env.OPENCODE_DB || process.env.OPENCODE_DB_PATH || join(
|
|
58
|
+
process.env.XDG_DATA_HOME || join(homedir(), '.local/share'),
|
|
59
59
|
'opencode/opencode.db'
|
|
60
60
|
);
|
|
61
61
|
|
|
@@ -222,10 +222,6 @@ async function spawnProcess(mode, sessionId = null) {
|
|
|
222
222
|
}
|
|
223
223
|
|
|
224
224
|
const spawnEnv = { ...process.env };
|
|
225
|
-
// 如果 /halo 存在,将 opencode 数据持久化到 NAS
|
|
226
|
-
if (mode === 'opencode' && existsSync('/halo')) {
|
|
227
|
-
spawnEnv.XDG_DATA_HOME = '/halo/.local/share';
|
|
228
|
-
}
|
|
229
225
|
|
|
230
226
|
// 恢复会话时,使用会话记录的工作目录
|
|
231
227
|
let spawnCwd = process.cwd();
|
|
@@ -774,7 +770,7 @@ let hasEverConnected = false;
|
|
|
774
770
|
function startNoClientTimer() {
|
|
775
771
|
if (noClientTimer) return;
|
|
776
772
|
if (wss && wss.clients.size > 0) return;
|
|
777
|
-
const timeout = hasEverConnected ?
|
|
773
|
+
const timeout = hasEverConnected ? 10000 : 180000;
|
|
778
774
|
noClientTimer = setTimeout(() => {
|
|
779
775
|
if (!wss || wss.clients.size === 0) {
|
|
780
776
|
LOG(`[auto-exit] ${timeout / 1000}秒无客户端连接,自动退出`);
|
|
@@ -1093,6 +1089,18 @@ function startServer() {
|
|
|
1093
1089
|
LOG('\n按 Ctrl+C 停止服务\n');
|
|
1094
1090
|
}
|
|
1095
1091
|
|
|
1092
|
+
// 清理上次 cov 崩溃残留的孤儿进程(PPID=1 的 opencode/claude)
|
|
1093
|
+
try {
|
|
1094
|
+
const orphans = execSync(
|
|
1095
|
+
"ps -eo pid,ppid,comm 2>/dev/null | awk '$2==1 && (/opencode/||/claude/) {print $1}'",
|
|
1096
|
+
{ encoding: 'utf-8', timeout: 5000 }
|
|
1097
|
+
).trim().split(/\s+/).filter(Boolean).map(Number);
|
|
1098
|
+
for (const pid of orphans) {
|
|
1099
|
+
try { process.kill(pid, 'SIGTERM'); } catch {}
|
|
1100
|
+
}
|
|
1101
|
+
if (orphans.length > 0) LOG(`[startup] 清理孤儿进程: ${orphans.join(', ')}`);
|
|
1102
|
+
} catch {}
|
|
1103
|
+
|
|
1096
1104
|
// 尝试恢复最近的会话,如果没有则新建
|
|
1097
1105
|
let lastSessionId = null;
|
|
1098
1106
|
try {
|