fix: 工作空间执行日志接入 + AI 工具提示词补充 run_command 指引

This commit is contained in:
thzxx
2026-04-07 20:13:48 +08:00
parent 5cb71b3eae
commit 5d0fff7f01
3 changed files with 35 additions and 7 deletions
+13 -1
View File
@@ -61,15 +61,19 @@ export function startProcess(
// 安全检查
const cmdCheck = checkCommandAllowed(command);
if (!cmdCheck.ok) {
sendLog('warn', `🖥️ 命令被拦截`, `${command.slice(0, 100)} | ${cmdCheck.reason}`);
return { success: false, error: cmdCheck.reason };
}
const workDir = cwd ? path.resolve(cwd) : _workspaceDir;
const dirCheck = checkPathAllowed(workDir, 'read');
if (!dirCheck.ok) {
sendLog('warn', `🖥️ 目录被拦截`, `${workDir} | ${dirCheck.reason}`);
return { success: false, error: dirCheck.reason };
}
sendLog('info', `🖥️ spawn`, `ID: ${id} | ${command.slice(0, 100)} | cwd: ${workDir}`);
// 确保目录存在
if (!fs.existsSync(workDir)) {
return { success: false, error: `工作目录不存在: ${workDir}` };
@@ -100,17 +104,20 @@ export function startProcess(
proc.on('close', (code) => {
activeProcesses.delete(id);
sendLog(code === 0 ? 'success' : 'warn', `🖥️ 进程退出`, `ID: ${id} | code: ${code}`);
onExit(code);
});
proc.on('error', (err) => {
activeProcesses.delete(id);
sendLog('error', `🖥️ 进程启动失败`, `ID: ${id} | ${err.message}`);
onOutput('stderr', `进程启动失败: ${err.message}\n`);
onExit(1);
});
return { success: true };
} catch (err) {
sendLog('error', `🖥️ spawn 异常`, `ID: ${id} | ${(err as Error).message}`);
return { success: false, error: (err as Error).message };
}
}
@@ -118,13 +125,18 @@ export function startProcess(
/** 停止指定进程 */
export function killProcess(id: string): boolean {
const proc = activeProcesses.get(id);
if (!proc) return false;
if (!proc) {
sendLog('warn', `🖥️ kill 未找到进程`, `ID: ${id}`);
return false;
}
try {
proc.kill('SIGTERM');
activeProcesses.delete(id);
sendLog('info', `🖥️ 进程已终止`, `ID: ${id}`);
return true;
} catch {
activeProcesses.delete(id);
sendLog('warn', `🖥️ kill 异常`, `ID: ${id}`);
return false;
}
}