fix(permission): 新建对话时优先加载个人空间偏好的默认权限模式

- core/web_terminal.py: create_new_conversation 中反转权限模式优先级,
  优先使用 prefs.default_permission_mode,无效时再 fallback 到终端当前模式
- server/conversation.py: active_task 分支创建视图对话时同样使用用户偏好
This commit is contained in:
JOJO 2026-06-09 11:42:08 +08:00
parent bd338f7ad4
commit a2a04b9529
2 changed files with 11 additions and 7 deletions

View File

@ -130,13 +130,14 @@ class WebTerminal(MainTerminal):
logger.warning("忽略无效默认模型 %s: %s", preferred_model, exc) logger.warning("忽略无效默认模型 %s: %s", preferred_model, exc)
preferred_mode = prefs.get("default_run_mode") preferred_mode = prefs.get("default_run_mode")
preferred_permission_mode = None preferred_permission_mode = prefs.get("default_permission_mode") or None
try: if preferred_permission_mode not in ("readonly", "approval", "auto_approval", "unrestricted"):
preferred_permission_mode = self.get_permission_mode() try:
except Exception: preferred_permission_mode = self.get_permission_mode()
preferred_permission_mode = None except Exception:
preferred_permission_mode = None
if not isinstance(preferred_permission_mode, str) or not preferred_permission_mode.strip(): if not isinstance(preferred_permission_mode, str) or not preferred_permission_mode.strip():
preferred_permission_mode = prefs.get("default_permission_mode") or "unrestricted" preferred_permission_mode = "unrestricted"
if isinstance(preferred_mode, str) and preferred_mode.lower() in {"fast", "thinking", "deep"}: if isinstance(preferred_mode, str) and preferred_mode.lower() in {"fast", "thinking", "deep"}:
try: try:
self.set_run_mode(preferred_mode.lower()) self.set_run_mode(preferred_mode.lower())

View File

@ -482,6 +482,9 @@ def create_conversation(terminal: WebTerminal, workspace: UserWorkspace, usernam
safe_run_mode = candidate if candidate in {"fast", "thinking", "deep"} else "fast" safe_run_mode = candidate if candidate in {"fast", "thinking", "deep"} else "fast"
safe_thinking = bool(thinking_mode) if thinking_mode is not None else safe_run_mode != "fast" safe_thinking = bool(thinking_mode) if thinking_mode is not None else safe_run_mode != "fast"
previous_cm_current = getattr(cm, "current_conversation_id", None) previous_cm_current = getattr(cm, "current_conversation_id", None)
default_permission_mode = (prefs or {}).get("default_permission_mode")
if default_permission_mode not in ("readonly", "approval", "auto_approval", "unrestricted"):
default_permission_mode = None
conversation_id = cm.create_conversation( conversation_id = cm.create_conversation(
project_path=str(workspace.project_path), project_path=str(workspace.project_path),
thinking_mode=safe_thinking, thinking_mode=safe_thinking,
@ -489,7 +492,7 @@ def create_conversation(terminal: WebTerminal, workspace: UserWorkspace, usernam
initial_messages=[], initial_messages=[],
model_key=(prefs or {}).get("default_model") or getattr(terminal, "model_key", None), model_key=(prefs or {}).get("default_model") or getattr(terminal, "model_key", None),
metadata_overrides={ metadata_overrides={
"permission_mode": getattr(terminal, "get_permission_mode", lambda: "unrestricted")(), "permission_mode": default_permission_mode or getattr(terminal, "get_permission_mode", lambda: "unrestricted")(),
"execution_mode": getattr(terminal, "get_execution_mode", lambda: "sandbox")(), "execution_mode": getattr(terminal, "get_execution_mode", lambda: "sandbox")(),
}, },
) )