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