diff --git a/core/web_terminal.py b/core/web_terminal.py index b9998b0..47d0cd9 100644 --- a/core/web_terminal.py +++ b/core/web_terminal.py @@ -130,13 +130,14 @@ class WebTerminal(MainTerminal): logger.warning("忽略无效默认模型 %s: %s", preferred_model, exc) preferred_mode = prefs.get("default_run_mode") - preferred_permission_mode = None - try: - preferred_permission_mode = self.get_permission_mode() - except Exception: - preferred_permission_mode = None + preferred_permission_mode = prefs.get("default_permission_mode") or None + if preferred_permission_mode not in ("readonly", "approval", "auto_approval", "unrestricted"): + try: + preferred_permission_mode = self.get_permission_mode() + except Exception: + preferred_permission_mode = None 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"}: try: self.set_run_mode(preferred_mode.lower()) diff --git a/server/conversation.py b/server/conversation.py index 9cc9429..34b54ec 100644 --- a/server/conversation.py +++ b/server/conversation.py @@ -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_thinking = bool(thinking_mode) if thinking_mode is not None else safe_run_mode != "fast" 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( project_path=str(workspace.project_path), thinking_mode=safe_thinking, @@ -489,7 +492,7 @@ def create_conversation(terminal: WebTerminal, workspace: UserWorkspace, usernam initial_messages=[], model_key=(prefs or {}).get("default_model") or getattr(terminal, "model_key", None), 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")(), }, )