From 759168cab5c4683e9760cea57a718959cb1d6993 Mon Sep 17 00:00:00 2001 From: JianFeeeee <109188060+JianFeeeee@users.noreply.github.com> Date: Mon, 13 Apr 2026 08:13:22 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E9=85=8D=E7=BD=AE=E6=8C=81=E4=B9=85?= =?UTF-8?q?=E5=8C=96=20-=20=E5=90=AF=E5=8A=A8=E6=97=B6=E5=8A=A0=E8=BD=BD?= =?UTF-8?q?=E5=B9=B6=E4=BF=9D=E5=AD=98=E5=88=B0=E6=9C=AC=E5=9C=B0=E6=96=87?= =?UTF-8?q?=E4=BB=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 修复配置无法持久化的问题,之前配置只保存在内存中 - 启动时从应用根目录加载 config.json - 配置变更时自动保存到本地文件 - 配置文件位置:源码运行时在项目根目录,打包后exe同级目录 - 修复 model 字段在保存时丢失的问题 --- trulymem_entry.py | 14 +++++++++++--- ui/app.py | 25 +++++++++++++++++++------ 2 files changed, 30 insertions(+), 9 deletions(-) diff --git a/trulymem_entry.py b/trulymem_entry.py index 4060352..c121eba 100644 --- a/trulymem_entry.py +++ b/trulymem_entry.py @@ -13,13 +13,21 @@ os.chdir(application_path) from core import BackendServer from ui import GraphMemoryApp +from ui.services.config_service import ConfigService def main(): - backend_server = BackendServer(db_path="graph_memory.db", use_embedded_db=True) - backend_server.start(api_key="", base_url="https://api.deepseek.com") + # 配置文件保存在应用根目录(exe同级目录或源码根目录) + config_file = application_path / "config.json" - app = GraphMemoryApp(backend_server=backend_server) + # 加载配置 + config_service = ConfigService(config_file=config_file) + config = config_service.get_config() + + backend_server = BackendServer(db_path="graph_memory.db", use_embedded_db=True) + backend_server.start(api_key=config.api_key, base_url=config.base_url) + + app = GraphMemoryApp(backend_server=backend_server, config_service=config_service) try: app.run() diff --git a/ui/app.py b/ui/app.py index 77e92f5..2cd4a0f 100644 --- a/ui/app.py +++ b/ui/app.py @@ -5,6 +5,7 @@ from textual.binding import Binding from core import BackendServer, BackendClient from .models.message import Message +from .services.config_service import ConfigService class GraphMemoryApp(App): @@ -22,18 +23,24 @@ class GraphMemoryApp(App): Binding("f6", "quit", "退出"), ] - def __init__(self, backend_server: BackendServer = None, **kwargs): + def __init__(self, backend_server: BackendServer = None, config_service: ConfigService = None, **kwargs): super().__init__(**kwargs) self._backend_server = backend_server self._backend_client = BackendClient(backend_server) if backend_server else None + self._config_service = config_service self._api_configured = False def compose(self) -> ComposeResult: from .widgets.left_panel import LeftPanel from .widgets.right_panel import RightPanel from .widgets.status_bar import StatusBar + from .models.config import AppConfig + + # 获取初始配置 + initial_config = self._config_service.get_config() if self._config_service else AppConfig() + yield LeftPanel() - yield RightPanel() + yield RightPanel(config=initial_config) yield StatusBar() def on_mount(self) -> None: @@ -137,17 +144,18 @@ class GraphMemoryApp(App): return config = event.config - api_key = config.api_key - base_url = config.base_url # 异步更新配置,避免阻塞UI - asyncio.create_task(self._update_config_async(api_key, base_url)) + asyncio.create_task(self._update_config_async(config)) - async def _update_config_async(self, api_key: str, base_url: str) -> None: + async def _update_config_async(self, config) -> None: """异步更新配置""" from .widgets.status_bar import StatusBar status_bar = self.query_one(StatusBar) + api_key = config.api_key + base_url = config.base_url + try: result = await asyncio.get_event_loop().run_in_executor( None, @@ -157,6 +165,11 @@ class GraphMemoryApp(App): if result.get("success"): self._api_configured = bool(api_key) status_bar.set_api_status(self._api_configured) + + # 保存配置到文件(使用完整的config对象,保留model字段) + if self._config_service: + self._config_service.set_config(config) + self.notify("✅ 配置已保存并生效", title="配置成功", severity="information") else: error = result.get("error", "未知错误")