fix: apply personalization after workspace switch

This commit is contained in:
JOJO 2026-05-30 22:18:24 +08:00
parent dc0149f134
commit bb44120087
2 changed files with 40 additions and 0 deletions

View File

@ -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

View File

@ -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()