Implement dangerous command approval system for terminal tool

- Added a safety mechanism to detect and approve potentially dangerous commands (e.g., `rm -rf`, `DROP TABLE`).
- Introduced an approval flow for local/SSH backends, prompting users for confirmation with options to allow once, for the session, or permanently.
- Updated configuration to include a `command_allowlist` for storing approved patterns.
- Enhanced messaging for sudo failures in messaging contexts.
- Updated relevant documentation in AGENTS.md and TODO.md to reflect these changes.
This commit is contained in:
teknium1 2026-02-02 23:35:18 -08:00
parent be91af7551
commit 76d929e177
5 changed files with 306 additions and 2 deletions

View file

@ -274,6 +274,11 @@ def get_terminal_tool_definitions() -> List[Dict[str, Any]]:
"type": "integer",
"description": "Command timeout in seconds (optional)",
"minimum": 1
},
"force": {
"type": "boolean",
"description": "Skip dangerous command safety check. Only use after user explicitly confirms they want to run a blocked command.",
"default": False
}
},
"required": ["command"]
@ -776,8 +781,9 @@ def handle_terminal_function_call(function_name: str, function_args: Dict[str, A
command = function_args.get("command")
background = function_args.get("background", False)
timeout = function_args.get("timeout")
force = function_args.get("force", False) # Skip dangerous command check if user confirmed
return terminal_tool(command=command, background=background, timeout=timeout, task_id=task_id)
return terminal_tool(command=command, background=background, timeout=timeout, task_id=task_id, force=force)
else:
return json.dumps({"error": f"Unknown terminal function: {function_name}"}, ensure_ascii=False)