claude-opencode-viewer 2.1.7 → 2.1.8
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 +38 -12
package/package.json
CHANGED
package/server.js
CHANGED
|
@@ -133,18 +133,25 @@ async function spawnProcess(mode) {
|
|
|
133
133
|
}
|
|
134
134
|
});
|
|
135
135
|
|
|
136
|
+
// 只在初始化时杀死旧进程,switchMode 已经处理了切换时的进程清理
|
|
136
137
|
if (mode === 'claude') {
|
|
137
|
-
if (claudeProcess
|
|
138
|
-
try {
|
|
138
|
+
if (claudeProcess && claudeProcess !== proc && claudeProcess.pid) {
|
|
139
|
+
try {
|
|
140
|
+
console.log(`[spawnProcess] 清理旧 claude 进程 PID: ${claudeProcess.pid}`);
|
|
141
|
+
claudeProcess.kill();
|
|
142
|
+
} catch {}
|
|
139
143
|
}
|
|
140
144
|
claudeProcess = proc;
|
|
141
145
|
} else {
|
|
142
|
-
if (opencodeProcess
|
|
143
|
-
try {
|
|
146
|
+
if (opencodeProcess && opencodeProcess !== proc && opencodeProcess.pid) {
|
|
147
|
+
try {
|
|
148
|
+
console.log(`[spawnProcess] 清理旧 opencode 进程 PID: ${opencodeProcess.pid}`);
|
|
149
|
+
opencodeProcess.kill();
|
|
150
|
+
} catch {}
|
|
144
151
|
}
|
|
145
152
|
opencodeProcess = proc;
|
|
146
153
|
}
|
|
147
|
-
|
|
154
|
+
|
|
148
155
|
currentProcess = proc;
|
|
149
156
|
console.log(`[claude-opencode-viewer] ${mode === 'claude' ? 'Claude Code' : 'OpenCode'} 已启动 (PID: ${proc.pid})`);
|
|
150
157
|
return proc;
|
|
@@ -152,24 +159,43 @@ async function spawnProcess(mode) {
|
|
|
152
159
|
|
|
153
160
|
async function switchMode(newMode) {
|
|
154
161
|
if (newMode === currentMode) return;
|
|
155
|
-
|
|
162
|
+
|
|
163
|
+
console.log(`[switchMode] 从 ${currentMode} 切换到 ${newMode}`);
|
|
164
|
+
|
|
156
165
|
// 清空所有历史输出
|
|
157
166
|
outputBuffer = '';
|
|
158
|
-
|
|
167
|
+
|
|
159
168
|
// 杀死旧进程
|
|
160
169
|
if (currentMode === 'claude' && claudeProcess) {
|
|
161
|
-
try {
|
|
170
|
+
try {
|
|
171
|
+
console.log(`[switchMode] 杀死 claude 进程 PID: ${claudeProcess.pid}`);
|
|
172
|
+
claudeProcess.kill();
|
|
173
|
+
} catch (e) {
|
|
174
|
+
console.log('[switchMode] 杀死 claude 进程失败:', e.message);
|
|
175
|
+
}
|
|
162
176
|
claudeProcess = null;
|
|
163
177
|
} else if (currentMode === 'opencode' && opencodeProcess) {
|
|
164
|
-
try {
|
|
178
|
+
try {
|
|
179
|
+
console.log(`[switchMode] 杀死 opencode 进程 PID: ${opencodeProcess.pid}`);
|
|
180
|
+
opencodeProcess.kill();
|
|
181
|
+
} catch (e) {
|
|
182
|
+
console.log('[switchMode] 杀死 opencode 进程失败:', e.message);
|
|
183
|
+
}
|
|
165
184
|
opencodeProcess = null;
|
|
166
185
|
}
|
|
167
186
|
currentProcess = null;
|
|
168
|
-
|
|
187
|
+
|
|
188
|
+
// 等待一小段时间确保进程完全退出
|
|
189
|
+
await new Promise(resolve => setTimeout(resolve, 100));
|
|
190
|
+
|
|
169
191
|
// 切换到新模式
|
|
170
192
|
currentMode = newMode;
|
|
171
|
-
|
|
172
|
-
|
|
193
|
+
try {
|
|
194
|
+
await spawnProcess(newMode);
|
|
195
|
+
console.log(`[switchMode] 切换到 ${newMode} 成功`);
|
|
196
|
+
} catch (e) {
|
|
197
|
+
console.error('[switchMode] 启动新进程失败:', e.message);
|
|
198
|
+
}
|
|
173
199
|
}
|
|
174
200
|
|
|
175
201
|
function writeToPty(data) {
|