feat : fix displaying problem + memory compression on loading + personality prompt + technical image
This commit is contained in:
@@ -6,8 +6,10 @@ import subprocess
|
||||
|
||||
if __name__ == "__main__":
|
||||
from tools import Tools
|
||||
from safety import is_unsafe
|
||||
else:
|
||||
from sources.tools.tools import Tools
|
||||
from sources.tools.safety import is_unsafe
|
||||
|
||||
class BashInterpreter(Tools):
|
||||
"""
|
||||
@@ -19,16 +21,16 @@ class BashInterpreter(Tools):
|
||||
|
||||
def language_bash_attempt(self, command: str):
|
||||
"""
|
||||
detect if AI attempt to run the code using bash.
|
||||
if so, return True, otherwise return False.
|
||||
The philosophy is that code written by the AI will be executed, so it should not use bash to run it.
|
||||
Detect if AI attempt to run the code using bash.
|
||||
If so, return True, otherwise return False.
|
||||
Code written by the AI will be executed automatically, so it should not use bash to run it.
|
||||
"""
|
||||
lang_interpreter = ["python3", "gcc", "g++", "go", "javac", "rustc", "clang", "clang++", "rustc", "rustc++", "rustc++"]
|
||||
for word in command.split():
|
||||
if word in lang_interpreter:
|
||||
return True
|
||||
return False
|
||||
|
||||
|
||||
def execute(self, commands: str, safety=False, timeout=1000):
|
||||
"""
|
||||
Execute bash commands and display output in real-time.
|
||||
@@ -38,6 +40,9 @@ class BashInterpreter(Tools):
|
||||
|
||||
concat_output = ""
|
||||
for command in commands:
|
||||
command = command.replace('\n', '')
|
||||
if self.safe_mode and is_unsafe(commands):
|
||||
return "Unsafe command detected, execution aborted."
|
||||
if self.language_bash_attempt(command):
|
||||
continue
|
||||
try:
|
||||
@@ -50,12 +55,11 @@ class BashInterpreter(Tools):
|
||||
)
|
||||
command_output = ""
|
||||
for line in process.stdout:
|
||||
print(line, end="")
|
||||
command_output += line
|
||||
return_code = process.wait(timeout=timeout)
|
||||
if return_code != 0:
|
||||
return f"Command {command} failed with return code {return_code}:\n{command_output}"
|
||||
concat_output += f"Output of {command}:\n{command_output.strip()}\n\n"
|
||||
concat_output += f"Output of {command}:\n{command_output.strip()}\n"
|
||||
except subprocess.TimeoutExpired:
|
||||
process.kill() # Kill the process if it times out
|
||||
return f"Command {command} timed out. Output:\n{command_output}"
|
||||
|
||||
@@ -0,0 +1,87 @@
|
||||
import os
|
||||
import sys
|
||||
|
||||
unsafe_commands_unix = [
|
||||
"rm", # File/directory removal
|
||||
"dd", # Low-level disk writing
|
||||
"mkfs", # Filesystem formatting
|
||||
"chmod", # Permission changes
|
||||
"chown", # Ownership changes
|
||||
"shutdown", # System shutdown
|
||||
"reboot", # System reboot
|
||||
"halt", # System halt
|
||||
"init", # System runlevel changes
|
||||
"sysctl", # Kernel parameter changes
|
||||
"kill", # Process termination
|
||||
"pkill", # Kill by process name
|
||||
"killall", # Kill all matching processes
|
||||
"wget", # Web file downloading
|
||||
"curl", # Data transfer
|
||||
"scp", # Secure copy
|
||||
"ftp", # File transfer protocol
|
||||
"bash", # Bash shell execution
|
||||
"exec", # Replace process with command
|
||||
"tee", # Write to files with privileges
|
||||
"umount", # Unmount filesystems
|
||||
"fsck", # Filesystem repair
|
||||
"iptables", # Firewall rules
|
||||
"ufw", # Uncomplicated firewall
|
||||
"passwd", # Password changes
|
||||
"useradd", # Add users
|
||||
"userdel", # Delete users
|
||||
"groupadd", # Add groups
|
||||
"groupdel", # Delete groups
|
||||
"visudo", # Edit sudoers file
|
||||
"screen", # Terminal session management
|
||||
"fdisk", # Disk partitioning
|
||||
"parted", # Disk partitioning
|
||||
"chroot", # Change root directory
|
||||
"route" # Routing table management
|
||||
]
|
||||
|
||||
unsafe_commands_windows = [
|
||||
"del", # Deletes files
|
||||
"erase", # Alias for del, deletes files
|
||||
"rd", # Removes directories (rmdir alias)
|
||||
"rmdir", # Removes directories
|
||||
"format", # Formats a disk, erasing data
|
||||
"diskpart", # Manages disk partitions, can wipe drives
|
||||
"chkdsk /f", # Fixes filesystem, can alter data
|
||||
"fsutil", # File system utilities, can modify system files
|
||||
"xcopy /y", # Copies files, overwriting without prompt
|
||||
"copy /y", # Copies files, overwriting without prompt
|
||||
"move", # Moves files, can overwrite
|
||||
"attrib", # Changes file attributes, e.g., hiding or exposing files
|
||||
"icacls", # Changes file permissions (modern)
|
||||
"takeown", # Takes ownership of files
|
||||
"reg delete", # Deletes registry keys/values
|
||||
"regedit /s", # Silently imports registry changes
|
||||
"sc", # can Stops services
|
||||
"net", # can Stops/break services
|
||||
"shutdown", # Shuts down or restarts the system
|
||||
"schtasks", # Schedules tasks, can run malicious commands
|
||||
"at", # Older task scheduler (pre-Vista)
|
||||
"taskkill", # Kills processes
|
||||
"wmic", # Deletes processes via WMI
|
||||
"bcdedit", # Modifies boot configuration
|
||||
"powercfg", # Changes power settings, can disable protections
|
||||
"assoc", # Changes file associations
|
||||
"ftype", # Changes file type commands
|
||||
"cipher /w", # Wipes free space, erasing data
|
||||
"esentutl", # Database utilities, can corrupt system files
|
||||
"subst", # Substitutes drive paths, can confuse system
|
||||
"mklink", # Creates symbolic links, can redirect access
|
||||
"bootcfg"
|
||||
]
|
||||
|
||||
def is_unsafe(cmd):
|
||||
"""
|
||||
check if a bash command is unsafe.
|
||||
"""
|
||||
if sys.platform.startswith("win"):
|
||||
if any(c in cmd for c in unsafe_commands_windows):
|
||||
return True
|
||||
else:
|
||||
if any(c in cmd for c in unsafe_commands_unix):
|
||||
return True
|
||||
return False
|
||||
@@ -34,6 +34,7 @@ class Tools():
|
||||
self.config = configparser.ConfigParser()
|
||||
self.current_dir = self.create_work_dir()
|
||||
self.excutable_blocks_found = False
|
||||
self.safe_mode = True
|
||||
|
||||
def get_work_dir(self):
|
||||
return self.current_dir
|
||||
@@ -186,7 +187,7 @@ class Tools():
|
||||
code_blocks.append(content)
|
||||
start_index = end_pos + len(end_tag)
|
||||
return code_blocks, save_path
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
tool = Tools()
|
||||
tool.tag = "python"
|
||||
|
||||
Reference in New Issue
Block a user