fix(runtime): preserve mode change notice source
This commit is contained in:
parent
ad20853965
commit
be08026fca
@ -283,8 +283,8 @@ class MainTerminal(MainTerminalCommandMixin, MainTerminalContextMixin, MainTermi
|
|||||||
})
|
})
|
||||||
return normalized
|
return normalized
|
||||||
|
|
||||||
def apply_pending_runtime_mode_changes(self) -> List[str]:
|
def apply_pending_runtime_mode_changes(self) -> List[Dict[str, str]]:
|
||||||
notices: List[str] = []
|
notices: List[Dict[str, str]] = []
|
||||||
updates: Dict[str, Any] = {}
|
updates: Dict[str, Any] = {}
|
||||||
|
|
||||||
pending_permission = self.pending_permission_mode
|
pending_permission = self.pending_permission_mode
|
||||||
@ -298,7 +298,7 @@ class MainTerminal(MainTerminalCommandMixin, MainTerminalContextMixin, MainTermi
|
|||||||
"auto_approval": "自动审核",
|
"auto_approval": "自动审核",
|
||||||
"unrestricted": "无限制",
|
"unrestricted": "无限制",
|
||||||
}.get(pending_permission, pending_permission)
|
}.get(pending_permission, pending_permission)
|
||||||
notices.append(f"权限模式修改为 {label}")
|
notices.append({"text": f"权限模式被用户修改为 {label}", "source": "权限变更"})
|
||||||
updates["permission_mode"] = pending_permission
|
updates["permission_mode"] = pending_permission
|
||||||
updates["pending_permission_mode"] = None
|
updates["pending_permission_mode"] = None
|
||||||
self.pending_permission_mode = None
|
self.pending_permission_mode = None
|
||||||
@ -309,7 +309,7 @@ class MainTerminal(MainTerminalCommandMixin, MainTerminalContextMixin, MainTermi
|
|||||||
if pending_execution != current_exec:
|
if pending_execution != current_exec:
|
||||||
self.set_execution_mode(pending_execution)
|
self.set_execution_mode(pending_execution)
|
||||||
label = {"sandbox": "沙箱", "direct": "完全访问权限"}.get(pending_execution, pending_execution)
|
label = {"sandbox": "沙箱", "direct": "完全访问权限"}.get(pending_execution, pending_execution)
|
||||||
notices.append(f"执行环境修改为 {label}")
|
notices.append({"text": f"执行环境被用户修改为 {label}", "source": "执行环境变更"})
|
||||||
updates["execution_mode"] = pending_execution
|
updates["execution_mode"] = pending_execution
|
||||||
updates["pending_execution_mode"] = None
|
updates["pending_execution_mode"] = None
|
||||||
self.pending_execution_mode = None
|
self.pending_execution_mode = None
|
||||||
|
|||||||
@ -52,7 +52,7 @@ PERMISSION_MODE_OPTIONS = ["readonly", "approval", "auto_approval", "unrestricte
|
|||||||
EXECUTION_MODE_OPTIONS = ["sandbox", "direct"]
|
EXECUTION_MODE_OPTIONS = ["sandbox", "direct"]
|
||||||
|
|
||||||
|
|
||||||
def _dispatch_runtime_mode_notice(terminal: WebTerminal, username: str, text: str) -> None:
|
def _dispatch_runtime_mode_notice(terminal: WebTerminal, username: str, text: str, source: str = "notify") -> None:
|
||||||
notice = str(text or "").strip()
|
notice = str(text or "").strip()
|
||||||
if not notice:
|
if not notice:
|
||||||
return
|
return
|
||||||
@ -76,7 +76,7 @@ def _dispatch_runtime_mode_notice(terminal: WebTerminal, username: str, text: st
|
|||||||
username=username,
|
username=username,
|
||||||
task_id=target.task_id,
|
task_id=target.task_id,
|
||||||
message=notice,
|
message=notice,
|
||||||
source="notify",
|
source=source,
|
||||||
)
|
)
|
||||||
if not result.get("success"):
|
if not result.get("success"):
|
||||||
debug_log(f"[RuntimeMode] enqueue runtime guidance failed: {result}")
|
debug_log(f"[RuntimeMode] enqueue runtime guidance failed: {result}")
|
||||||
@ -714,7 +714,7 @@ def update_permission_mode(terminal: WebTerminal, workspace: UserWorkspace, user
|
|||||||
"auto_approval": "自动审核",
|
"auto_approval": "自动审核",
|
||||||
"unrestricted": "无限制",
|
"unrestricted": "无限制",
|
||||||
}.get(applied_mode, applied_mode)
|
}.get(applied_mode, applied_mode)
|
||||||
_dispatch_runtime_mode_notice(terminal, username, f"权限模式修改为 {permission_label}")
|
_dispatch_runtime_mode_notice(terminal, username, f"权限模式被用户修改为 {permission_label}", source="权限变更")
|
||||||
status = terminal.get_status()
|
status = terminal.get_status()
|
||||||
socketio.emit('status_update', status, room=f"user_{username}")
|
socketio.emit('status_update', status, room=f"user_{username}")
|
||||||
return jsonify({
|
return jsonify({
|
||||||
@ -772,7 +772,7 @@ def update_execution_mode(terminal: WebTerminal, workspace: UserWorkspace, usern
|
|||||||
current_mode = state.get("mode", target_mode)
|
current_mode = state.get("mode", target_mode)
|
||||||
if current_mode != previous_mode:
|
if current_mode != previous_mode:
|
||||||
execution_label = {"sandbox": "沙箱", "direct": "完全访问权限"}.get(current_mode, current_mode)
|
execution_label = {"sandbox": "沙箱", "direct": "完全访问权限"}.get(current_mode, current_mode)
|
||||||
_dispatch_runtime_mode_notice(terminal, username, f"执行环境修改为 {execution_label}")
|
_dispatch_runtime_mode_notice(terminal, username, f"执行环境被用户修改为 {execution_label}", source="执行环境变更")
|
||||||
socketio.emit('status_update', status, room=f"user_{username}")
|
socketio.emit('status_update', status, room=f"user_{username}")
|
||||||
return jsonify({
|
return jsonify({
|
||||||
"success": True,
|
"success": True,
|
||||||
|
|||||||
@ -182,6 +182,7 @@ def _inject_runtime_mode_notice(
|
|||||||
web_terminal,
|
web_terminal,
|
||||||
messages: List[Dict[str, Any]],
|
messages: List[Dict[str, Any]],
|
||||||
content: str,
|
content: str,
|
||||||
|
source: str = "notify",
|
||||||
sender=None,
|
sender=None,
|
||||||
conversation_id: Optional[str] = None,
|
conversation_id: Optional[str] = None,
|
||||||
) -> None:
|
) -> None:
|
||||||
@ -189,7 +190,7 @@ def _inject_runtime_mode_notice(
|
|||||||
web_terminal=web_terminal,
|
web_terminal=web_terminal,
|
||||||
messages=messages,
|
messages=messages,
|
||||||
text=content,
|
text=content,
|
||||||
source="notify",
|
source=source,
|
||||||
sender=sender,
|
sender=sender,
|
||||||
conversation_id=conversation_id,
|
conversation_id=conversation_id,
|
||||||
inline=True,
|
inline=True,
|
||||||
@ -1329,10 +1330,19 @@ async def execute_tool_calls(*, web_terminal, tool_calls, sender, messages, clie
|
|||||||
# 避免在 assistant.tool_calls 与对应 tool 消息之间插入 user 消息导致 API 报错。
|
# 避免在 assistant.tool_calls 与对应 tool 消息之间插入 user 消息导致 API 报错。
|
||||||
if pending_runtime_mode_notices:
|
if pending_runtime_mode_notices:
|
||||||
for notice in pending_runtime_mode_notices:
|
for notice in pending_runtime_mode_notices:
|
||||||
|
if isinstance(notice, dict):
|
||||||
|
_text = str(notice.get("text") or "").strip()
|
||||||
|
_source = str(notice.get("source") or "notify").strip() or "notify"
|
||||||
|
else:
|
||||||
|
_text = str(notice or "").strip()
|
||||||
|
_source = "notify"
|
||||||
|
if not _text:
|
||||||
|
continue
|
||||||
_inject_runtime_mode_notice(
|
_inject_runtime_mode_notice(
|
||||||
web_terminal=web_terminal,
|
web_terminal=web_terminal,
|
||||||
messages=messages,
|
messages=messages,
|
||||||
content=notice,
|
content=_text,
|
||||||
|
source=_source,
|
||||||
sender=sender,
|
sender=sender,
|
||||||
conversation_id=conversation_id,
|
conversation_id=conversation_id,
|
||||||
)
|
)
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user