diff --git a/src/main/index.js b/src/main/index.js index b0376bb..f1de3be 100644 --- a/src/main/index.js +++ b/src/main/index.js @@ -103,12 +103,18 @@ function buildEnv(exeDir) { } function getExePath() { - // 开发模式:__dirname = .vite/build,往上两级到项目根 - // 打包模式:用 process.resourcesPath + // 根据平台和架构确定可执行文件名及目录 + const isWin = process.platform === 'win32'; + const exeName = isWin ? 'opencode.exe' : 'opencode'; + if (app.isPackaged) { - return path.join(process.resourcesPath, 'opencode.exe'); + return path.join(process.resourcesPath, exeName); } - return path.join(__dirname, '..', '..', 'resources', 'windows', 'x64', 'opencode.exe'); + + // 开发模式:__dirname = .vite/build,往上两级到项目根 + const platformDir = process.platform === 'darwin' ? 'darwin' : 'windows'; + const archDir = process.arch === 'arm64' ? 'arm64' : 'x64'; + return path.join(__dirname, '..', '..', 'resources', platformDir, archDir, exeName); } async function startOpencode() { @@ -121,11 +127,16 @@ async function startOpencode() { const exeDir = path.dirname(exePath); await fs.promises.access(exePath, fs.constants.F_OK); + // macOS/Linux 需要确保可执行权限 + if (process.platform !== 'win32') { + await fs.promises.chmod(exePath, 0o755); + } + opencodePort = await resolvePort(); opencodeProcess = spawn(exePath, ['serve', '--port', String(opencodePort)], { cwd: exeDir, - windowsHide: true, env: buildEnv(exeDir), + ...(process.platform === 'win32' ? { windowsHide: true } : {}), }); opencodeProcess.stdout?.on('data', (d) => console.log(`[opencode] ${d.toString().trim()}`)); diff --git a/src/renderer/App.vue b/src/renderer/App.vue index 9fd66b9..d10b529 100644 --- a/src/renderer/App.vue +++ b/src/renderer/App.vue @@ -13,7 +13,7 @@ appStore.collapsed ? 'justify-center px-0 py-3 mx-auto w-11 rounded-xl' : 'w-[216px] h-[37px] rounded-[10px] pl-3 pr-[146px] py-0 mx-auto', $route.path === item.index ? 'bg-[#DEE0E4] text-gray-900' : 'text-gray-500 hover:bg-gray-50 hover:text-gray-700', ]" - @click="router.push(item.index)" + @click="handleMenuClick(item)" >
历史记录
({ - id: session.id, - name: session.title || `会话 ${session.slug || session.id.slice(0, 8)}...`, - slug: session.slug, - created: session.time?.created, - updated: session.time?.updated, - })); - console.log('[loadHistorySessions] 转换后的历史记录:', historyItems.value); - } catch (err) { - console.error('[loadHistorySessions] 加载历史会话失败:', err); - } + await historyStore.loadHistorySessions(); } // 点击历史会话,跳转到对话页面并加载该会话 @@ -167,7 +156,7 @@ async function stopService() { try { await window.opencode.stop(); isServiceRunning.value = false; - historyItems.value = []; + historyStore.clearHistory(); } catch (err) { console.error('停止服务失败:', err); } @@ -188,17 +177,17 @@ async function checkServiceStatus() { window.__opencodeBaseUrl = info.url; } // 如果历史记录为空,则加载 - if (historyItems.value.length === 0) { + if (historyStore.historyItems.length === 0) { loadHistorySessions(); } } else { // 服务未运行,清空历史记录 - historyItems.value = []; + historyStore.clearHistory(); } } catch (err) { // 获取状态失败,视为服务断开 isServiceRunning.value = false; - historyItems.value = []; + historyStore.clearHistory(); } } diff --git a/src/renderer/views/home/HomeView.vue b/src/renderer/views/home/HomeView.vue index 1b8873c..3366948 100644 --- a/src/renderer/views/home/HomeView.vue +++ b/src/renderer/views/home/HomeView.vue @@ -42,7 +42,13 @@
- +
-
@@ -64,7 +70,50 @@