From d7275b08e83afc831e17af85368f168f70371f5a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=B4=AB=E5=BD=B1233?= Date: Wed, 24 Jun 2026 10:58:49 +0800 Subject: [PATCH] =?UTF-8?q?v0.12.10:=20=E4=BF=AE=E5=A4=8D=E5=B7=A5?= =?UTF-8?q?=E4=BD=9C=E7=A9=BA=E9=97=B4=E7=9B=AE=E5=BD=95=E8=AE=BE=E7=BD=AE?= =?UTF-8?q?=E4=B8=8D=E7=94=9F=E6=95=88=20+=20=E7=89=88=E6=9C=AC=E5=8F=B7?= =?UTF-8?q?=E6=9B=B4=E6=96=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit fix: 工作空间目录设置三处断链修复 - ipc.ts: setDir 时持久化到 SQLite,启动时自动恢复 - settings-modal.ts: 设置成功后通知 workspace-panel 刷新 - workspace-panel.ts: 监听目录变更事件,立即重载文件列表 chore: 版本号 0.12.9 → 0.12.10 --- README.md | 6 +++--- package-lock.json | 4 ++-- package.json | 9 +++++++-- src/main/ipc.ts | 23 ++++++++++++++++------ src/main/menu.ts | 2 +- src/renderer/components/settings-modal.ts | 12 +++++++++++ src/renderer/components/workspace-panel.ts | 20 +++++++++++++++++++ src/renderer/index.html | 2 +- 8 files changed, 63 insertions(+), 15 deletions(-) diff --git a/README.md b/README.md index f69c18a..9701e0d 100644 --- a/README.md +++ b/README.md @@ -14,7 +14,7 @@

- version + version electron typescript license @@ -256,7 +256,7 @@ npm start ELECTRON_MIRROR=https://npmmirror.com/mirrors/electron/ npm run dist ``` -产出:`release/Metona Ollama Setup v0.12.9.exe` +产出:`release/Metona Ollama Setup v0.12.10.exe` ## 🛠️ 常用命令 @@ -507,7 +507,7 @@ npm start ELECTRON_MIRROR=https://npmmirror.com/mirrors/electron/ npm run dist ``` -Output: `release/Metona Ollama Setup v0.12.9.exe` +Output: `release/Metona Ollama Setup v0.12.10.exe` ## 🛠️ Common Commands diff --git a/package-lock.json b/package-lock.json index a263547..8590911 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "metona-ollama-desktop", - "version": "0.12.9", + "version": "0.12.10", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "metona-ollama-desktop", - "version": "0.12.9", + "version": "0.12.10", "license": "MIT", "dependencies": { "ffmpeg-static": "^5.2.0", diff --git a/package.json b/package.json index d13d3fc..81a73dc 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "metona-ollama-desktop", - "version": "0.12.9", - "description": "Metona Ollama - TypeScript + Electron \u684c\u9762 AI \u804a\u5929\u5ba2\u6237\u7aef", + "version": "0.12.10", + "description": "Metona Ollama - TypeScript + Electron 桌面 AI 聊天客户端", "main": "dist/main/main.js", "author": "thzxx", "license": "MIT", @@ -73,5 +73,10 @@ "dependencies": { "ffmpeg-static": "^5.2.0", "sql.js": "^1.11.0" + }, + "allowScripts": { + "electron@33.4.11": true, + "esbuild@0.21.5": true, + "ffmpeg-static@5.3.0": true } } diff --git a/src/main/ipc.ts b/src/main/ipc.ts index dfabb34..8e3daf0 100644 --- a/src/main/ipc.ts +++ b/src/main/ipc.ts @@ -279,12 +279,14 @@ export async function setupIPC(): Promise { return { dir: getWorkspaceDir(), defaultDir: getWorkspaceDir() }; }); - // 设置工作空间目录 - ipcMain.handle('workspace:setDir', (_, dir: string) => { - try { - setWorkspaceDir(dir); - return { success: true, dir: getWorkspaceDir() }; - } catch (err) { + // 设置工作空间目录 + ipcMain.handle('workspace:setDir', (_, dir: string) => { + try { + setWorkspaceDir(dir); + // ── 持久化到 SQLite,重启后恢复 ── + saveSetting('workspaceDir', getWorkspaceDir()); + return { success: true, dir: getWorkspaceDir() }; + } catch (err) { return { success: false, error: (err as Error).message }; } }); @@ -344,6 +346,15 @@ export async function setupIPC(): Promise { await initDatabase(); sendLog('success', '📦 SQLite 数据库已初始化'); + // ── 恢复工作空间目录 ── + try { + const savedWsDir = getSetting('workspaceDir', ''); + if (savedWsDir) { + setWorkspaceDir(savedWsDir); + sendLog('info', '📁 恢复工作空间目录', savedWsDir); + } + } catch { /* ignore */ } + // Sessions ipcMain.handle('db:saveSession', (_, session) => { try { return { success: true, id: saveSession(session) }; } diff --git a/src/main/menu.ts b/src/main/menu.ts index b707874..756692c 100644 --- a/src/main/menu.ts +++ b/src/main/menu.ts @@ -101,7 +101,7 @@ export function createMenu(): void { dialog.showMessageBox(mainWindow!, { type: 'info', title: '关于 Metona Ollama', - message: 'Metona Ollama Desktop v0.12.9', + message: 'Metona Ollama Desktop v0.12.10', detail: 'TypeScript + Electron Ollama AI 聊天客户端\n\nhttps://gitee.com/thzxx/metona-ollama', icon: getIconPath() }); diff --git a/src/renderer/components/settings-modal.ts b/src/renderer/components/settings-modal.ts index ea241e8..67bd1c1 100644 --- a/src/renderer/components/settings-modal.ts +++ b/src/renderer/components/settings-modal.ts @@ -288,6 +288,8 @@ export function initSettingsModal(): void { if (result.success) { showToast('工作空间目录已更新', 'success'); logSetting('工作空间目录', result.dir!); + // ── 通知工作空间面板刷新目录 ── + window.dispatchEvent(new CustomEvent('workspaceDirChanged', { detail: { dir: result.dir } })); } else { showToast(`设置失败: ${result.error!}`, 'error'); // 恢复原值 @@ -308,6 +310,16 @@ export function openSettingsModal(): void { updateMemoryVectorStatus(); loadTimeoutSettings(); loadWatchdogSetting(); + // 刷新工作空间目录显示 + const bridge = window.metonaDesktop; + if (bridge?.isDesktop) { + const wsInput = document.querySelector('#inputWorkspaceDir') as HTMLInputElement; + if (wsInput) { + bridge.workspace.getDir().then((info: { dir: string }) => { + wsInput.value = info.dir; + }).catch(() => {}); + } + } } /** 加载看门狗设置到输入框 */ diff --git a/src/renderer/components/workspace-panel.ts b/src/renderer/components/workspace-panel.ts index 4916a4c..abba186 100644 --- a/src/renderer/components/workspace-panel.ts +++ b/src/renderer/components/workspace-panel.ts @@ -237,6 +237,26 @@ export async function initWorkspacePanel(): Promise { // 绑定 UI 事件 bindEvents(); + // ── 监听工作空间目录变更(来自设置面板)── + window.addEventListener('workspaceDirChanged', ((e: CustomEvent) => { + const newDir = e.detail?.dir; + if (newDir && newDir !== workspaceDir) { + workspaceDir = newDir; + currentFileDir = newDir; + logInfo('工作空间目录已刷新', newDir); + // 如果当前在文件页签,立即重新加载 + if (activeTab === 'files') { + loadFiles(newDir); + } + // 刷新终端空闲状态中的目录显示 + if (activeTab === 'terminal') { + renderTerminal(); + } + // 刷新文件页签(即使不在当前 tab,下次切过去就是新路径) + renderPanel(); + } + }) as EventListener); + // 创建唯一终端 terminal = { id: genId(), diff --git a/src/renderer/index.html b/src/renderer/index.html index 99e035f..61b0914 100644 --- a/src/renderer/index.html +++ b/src/renderer/index.html @@ -28,7 +28,7 @@

Metona Ollama - v0.12.9 + v0.12.10