From bb4412008702a66ac6024c06409e516aaf908e90 Mon Sep 17 00:00:00 2001 From: JOJO <1498581755@qq.com> Date: Sat, 30 May 2026 22:18:24 +0800 Subject: [PATCH] fix: apply personalization after workspace switch --- server/context.py | 15 +++++++++++++++ test/test_server_refactor_smoke.py | 25 +++++++++++++++++++++++++ 2 files changed, 40 insertions(+) diff --git a/server/context.py b/server/context.py index 294ccd1..58709a8 100644 --- a/server/context.py +++ b/server/context.py @@ -63,6 +63,19 @@ def _set_terminal_workspace_label(terminal: WebTerminal, label: Optional[str]) - pass +def _apply_workspace_personalization_preferences(terminal: WebTerminal, workspace) -> None: + """Apply persisted workspace personalization after policy/workspace resolution.""" + try: + config = load_personalization_config(workspace.data_dir) + terminal.apply_personalization_preferences(config) + if has_request_context(): + session["run_mode"] = getattr(terminal, "run_mode", session.get("run_mode")) + session["thinking_mode"] = getattr(terminal, "thinking_mode", session.get("thinking_mode")) + session["model_key"] = getattr(terminal, "model_key", session.get("model_key")) + except Exception as exc: + debug_log(f"[Personalization] 应用工作区偏好失败: {exc}") + + def _ensure_workspace_skills_synced(terminal: WebTerminal, workspace) -> None: """ 确保工作区 skills 已按当前个性化配置完成同步。 @@ -300,6 +313,7 @@ def get_user_resources(username: Optional[str] = None, workspace_id: Optional[st except Exception as exc: debug_log(f"[admin_policy][host_mode] 应用失败: {exc}") + _apply_workspace_personalization_preferences(terminal, workspace) _ensure_workspace_skills_synced(terminal, workspace) write_host_workspace_debug( "context.get_user_resources.host.return", @@ -437,6 +451,7 @@ def get_user_resources(username: Optional[str] = None, workspace_id: Optional[st except Exception as exc: debug_log(f"[admin_policy] 应用失败: {exc}") + _apply_workspace_personalization_preferences(terminal, workspace) _ensure_workspace_skills_synced(terminal, workspace) return terminal, workspace diff --git a/test/test_server_refactor_smoke.py b/test/test_server_refactor_smoke.py index d42d9de..097432f 100644 --- a/test/test_server_refactor_smoke.py +++ b/test/test_server_refactor_smoke.py @@ -95,6 +95,31 @@ class ServerRefactorSmokeTest(unittest.TestCase): self.assertEqual(terminal.tool_categories_map["custom"].tools, ["demo_tool"]) self.assertIn("demo_tool", terminal.disabled_tools) + def test_context_applies_workspace_personalization_preferences(self): + import server.context as context + + calls = [] + + class Terminal: + run_mode = "fast" + thinking_mode = False + model_key = None + + def apply_personalization_preferences(self, config): + calls.append(config) + + workspace = SimpleNamespace(data_dir="/tmp/workspace-data") + original_loader = context.load_personalization_config + try: + context.load_personalization_config = lambda data_dir: { + "disabled_tool_categories": ["custom"] + } + context._apply_workspace_personalization_preferences(Terminal(), workspace) + finally: + context.load_personalization_config = original_loader + + self.assertEqual(calls, [{"disabled_tool_categories": ["custom"]}]) + if __name__ == "__main__": unittest.main()