From a2a04b952943c640f0cf49a71bbfa61a8cfc8f73 Mon Sep 17 00:00:00 2001 From: JOJO <1498581755@qq.com> Date: Tue, 9 Jun 2026 11:42:08 +0800 Subject: [PATCH] =?UTF-8?q?fix(permission):=20=E6=96=B0=E5=BB=BA=E5=AF=B9?= =?UTF-8?q?=E8=AF=9D=E6=97=B6=E4=BC=98=E5=85=88=E5=8A=A0=E8=BD=BD=E4=B8=AA?= =?UTF-8?q?=E4=BA=BA=E7=A9=BA=E9=97=B4=E5=81=8F=E5=A5=BD=E7=9A=84=E9=BB=98?= =?UTF-8?q?=E8=AE=A4=E6=9D=83=E9=99=90=E6=A8=A1=E5=BC=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - core/web_terminal.py: create_new_conversation 中反转权限模式优先级, 优先使用 prefs.default_permission_mode,无效时再 fallback 到终端当前模式 - server/conversation.py: active_task 分支创建视图对话时同样使用用户偏好 --- core/web_terminal.py | 13 +++++++------ server/conversation.py | 5 ++++- 2 files changed, 11 insertions(+), 7 deletions(-) diff --git a/core/web_terminal.py b/core/web_terminal.py index b9998b0b..47d0cd9a 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 9cc94291..34b54ec2 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")(), }, )