refactor(home): 将首页改造成opencode服务入口页面

- 移除ChatGPT风格对话界面相关代码
- 添加在首页自动启动/停止opencode serve的IPC调用
- 首页使用webview加载opencode服务器界面
This commit is contained in:
2026-03-10 16:20:32 +08:00
parent de4c101b36
commit 2503d8be64
9 changed files with 123 additions and 286 deletions

View File

@@ -6,6 +6,7 @@ import log from 'electron-log';
import { generatePdf } from './services/pdfGenerator';
import { selectHtmlFile } from './services/htmlImport';
import { electronState } from './state';
import { spawn, ChildProcess } from 'child_process';
log.initialize();
@@ -24,6 +25,9 @@ if (!fs.existsSync(process.env.NOTEBOOK_ROOT)) {
electronState.setDevelopment(!app.isPackaged);
let opencodeProcess: ChildProcess | null = null;
const OPENCODE_PORT = 4096;
let lastClipboardText = '';
function startClipboardWatcher() {
@@ -358,6 +362,62 @@ ipcMain.handle('remote-download-file', async (_event, id: string, serverHost: st
}
});
ipcMain.handle('opencode-start-server', async () => {
if (opencodeProcess) {
log.info('Opencode server already running');
return { success: true, port: OPENCODE_PORT };
}
try {
log.info('Starting opencode server...');
opencodeProcess = spawn('opencode', ['serve'], {
stdio: 'pipe',
shell: true,
detached: false,
});
opencodeProcess.stdout?.on('data', (data) => {
log.info(`[opencode] ${data}`);
});
opencodeProcess.stderr?.on('data', (data) => {
log.error(`[opencode error] ${data}`);
});
opencodeProcess.on('error', (err) => {
log.error('Opencode process error:', err);
opencodeProcess = null;
});
opencodeProcess.on('exit', (code) => {
log.info(`Opencode process exited with code ${code}`);
opencodeProcess = null;
});
return { success: true, port: OPENCODE_PORT };
} catch (error: any) {
log.error('Failed to start opencode server:', error);
return { success: false, error: error.message };
}
});
ipcMain.handle('opencode-stop-server', async () => {
if (!opencodeProcess) {
log.info('Opencode server not running');
return { success: true };
}
try {
log.info('Stopping opencode server...');
opencodeProcess.kill('SIGTERM');
opencodeProcess = null;
return { success: true };
} catch (error: any) {
log.error('Failed to stop opencode server:', error);
return { success: false, error: error.message };
}
});
async function startServer() {
if (electronState.isDevelopment()) {
log.info('In dev mode, assuming external servers are running.');