fix: stop per-turn todo and permission system injections

This commit is contained in:
JOJO 2026-04-12 17:10:54 +08:00
parent ccb7128867
commit fa81585fe8

View File

@ -19,8 +19,6 @@ try:
TERMINAL_SANDBOX_MEMORY,
PROJECT_MAX_STORAGE_MB,
CUSTOM_TOOLS_ENABLED,
READONLY_RUN_COMMAND_ALLOWED,
READONLY_RUN_COMMAND_ALLOWED_GIT_SUBCOMMANDS,
)
except ImportError:
import sys
@ -41,8 +39,6 @@ except ImportError:
TERMINAL_SANDBOX_MEMORY,
PROJECT_MAX_STORAGE_MB,
CUSTOM_TOOLS_ENABLED,
READONLY_RUN_COMMAND_ALLOWED,
READONLY_RUN_COMMAND_ALLOWED_GIT_SUBCOMMANDS,
)
from modules.file_manager import FileManager
@ -171,11 +167,6 @@ class MainTerminalContextMixin:
if workspace_system:
messages.append({"role": "system", "content": workspace_system})
if self.tool_category_states.get("todo", True):
todo_prompt = self.load_prompt("todo_guidelines").strip()
if todo_prompt:
messages.append({"role": "system", "content": todo_prompt})
if self.tool_category_states.get("sub_agent", True):
sub_agent_prompt = self.load_prompt("sub_agent_guidelines").strip()
if sub_agent_prompt:
@ -298,56 +289,12 @@ class MainTerminalContextMixin:
# 当前用户输入已经在conversation中了不需要重复添加
todo_message = self.context_manager.render_todo_system_message()
if todo_message:
messages.append({
"role": "system",
"content": todo_message
})
disabled_notice = self._format_disabled_tool_notice()
if disabled_notice:
messages.append({
"role": "system",
"content": disabled_notice
})
permission_mode = "unrestricted"
try:
permission_mode = self.get_permission_mode()
except Exception:
permission_mode = str(getattr(self, "current_permission_mode", "unrestricted") or "unrestricted")
permission_label_map = {
"readonly": "只读",
"approval": "批准",
"unrestricted": "无限制",
}
permission_rules_map = {
"readonly": "",
"approval": "可调用全部工具,但对工作区文件进行修改的工具需经用户批准后执行;若 run_command/terminal_input 属于只读白名单命令则可直接执行;若用户拒绝,工具循环会停止。",
"unrestricted": "工具按常规流程执行,不额外拦截。",
}
readonly_cmds = [cmd for cmd in (READONLY_RUN_COMMAND_ALLOWED or ()) if cmd not in {"git"}]
readonly_cmds_text = "/".join(readonly_cmds) if readonly_cmds else "grep/find"
git_readonly_text = "/".join(READONLY_RUN_COMMAND_ALLOWED_GIT_SUBCOMMANDS or ())
permission_rules_map["readonly"] = (
"只允许读取/检索类工具;修改工作区的工具将被拒绝。"
f"run_command 仅允许只读命令({readonly_cmds_text}"
f"以及 git {git_readonly_text}),且禁止多指令拼接。"
)
permission_prompt = self.load_prompt("permission_mode")
if permission_prompt:
try:
rendered_permission = permission_prompt.format(
permission_mode=permission_mode,
permission_mode_label=permission_label_map.get(permission_mode, permission_mode),
permission_rules=permission_rules_map.get(permission_mode, permission_rules_map["unrestricted"]),
)
messages.append({
"role": "system",
"content": rendered_permission,
})
except Exception:
pass
if shallow_replace_enabled:
print(f"[ContextCompression] build_messages 替换tool占位符: {replaced_tool_count}")
return messages