fix: apply personalization after workspace switch
This commit is contained in:
parent
dc0149f134
commit
bb44120087
@ -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
|
||||
|
||||
|
||||
@ -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()
|
||||
|
||||
Loading…
Reference in New Issue
Block a user