Add autoglm-os-9b-v (#344)
* update for autoglm-v * Update run_autoglm.py --------- Co-authored-by: hanyullai <hanyullai@outlook.com>
This commit is contained in:
260
mm_agents/autoglm_v/tools/package/code.py
Normal file
260
mm_agents/autoglm_v/tools/package/code.py
Normal file
@@ -0,0 +1,260 @@
|
||||
import json
|
||||
import os
|
||||
import subprocess
|
||||
from pathlib import Path
|
||||
|
||||
|
||||
class CodeTools:
|
||||
ret = ""
|
||||
|
||||
@classmethod
|
||||
def print_result(cls):
|
||||
"""打印执行结果"""
|
||||
print(cls.ret)
|
||||
|
||||
@classmethod
|
||||
def launch_vscode(cls, path):
|
||||
"""
|
||||
Launches Visual Studio Code with the specified file path or directory.
|
||||
在存在的窗口中打开一个文件或目录。
|
||||
|
||||
Args:
|
||||
path (str): 文件路径或目录。
|
||||
"""
|
||||
try:
|
||||
subprocess.run(["code", "-r", path], check=True)
|
||||
cls.ret = "Successfully launched VS Code"
|
||||
except subprocess.CalledProcessError as e:
|
||||
cls.ret = f"Error launching VS Code: {e}"
|
||||
except Exception as e:
|
||||
cls.ret = f"Unexpected error: {e}"
|
||||
|
||||
return cls.ret
|
||||
|
||||
@classmethod
|
||||
def env_info(cls):
|
||||
cls.ret = "None"
|
||||
|
||||
@classmethod
|
||||
def compare_files(cls, file1, file2):
|
||||
"""
|
||||
Compares two files in VSCode.
|
||||
在VSCode中比较两个文件。
|
||||
|
||||
Args:
|
||||
file1 (str): 第一个文件的路径。
|
||||
file2 (str): 第二个文件的路径。
|
||||
"""
|
||||
try:
|
||||
# 获取compare结果
|
||||
subprocess.run(["code", "-d", file1, file2], check=True)
|
||||
cls.ret = "The compared files are opened in VSCode"
|
||||
except subprocess.CalledProcessError as e:
|
||||
cls.ret = f"Error comparing files: {e}"
|
||||
except Exception as e:
|
||||
cls.ret = f"Unexpected error: {e}"
|
||||
|
||||
return cls.ret
|
||||
|
||||
@classmethod
|
||||
def add_folder(cls, folder):
|
||||
"""
|
||||
Adds a folder to the last active window in VSCode.
|
||||
向VSCode的最后一个活动窗口添加文件夹。
|
||||
|
||||
Args:
|
||||
folder (str): 文件夹路径。
|
||||
"""
|
||||
try:
|
||||
subprocess.run(["code", "-a", folder], check=True)
|
||||
cls.ret = "Successfully added folder"
|
||||
except subprocess.CalledProcessError as e:
|
||||
cls.ret = f"Error adding folder: {e}"
|
||||
except Exception as e:
|
||||
cls.ret = f"Unexpected error: {e}"
|
||||
|
||||
return cls.ret
|
||||
|
||||
@classmethod
|
||||
def goto_file(cls, file_path, line=1, character=1):
|
||||
"""
|
||||
Opens a file at a specific line and character position.
|
||||
在特定行和字符的位置打开文件。
|
||||
|
||||
Args:
|
||||
file_path (str): 文件路径。
|
||||
line (int): 行号。
|
||||
character (int): 字符位置。
|
||||
"""
|
||||
try:
|
||||
command = f"{file_path}:{line}:{character}"
|
||||
subprocess.run(["code", "-g", command], check=True)
|
||||
cls.ret = "Successfully opened file, line: {}, character: {}".format(line, character)
|
||||
except subprocess.CalledProcessError as e:
|
||||
cls.ret = f"Error going to file: {e}"
|
||||
except Exception as e:
|
||||
cls.ret = f"Unexpected error: {e}"
|
||||
|
||||
return cls.ret
|
||||
|
||||
@classmethod
|
||||
def perform_merge(cls, path1, path2, base, result):
|
||||
"""
|
||||
Perform a three-way merge.
|
||||
执行三方合并。
|
||||
|
||||
Args:
|
||||
path1 (str): 第一版本文件路径。
|
||||
path2 (str): 第二版本文件路径。
|
||||
base (str): 基础版本文件路径。
|
||||
result (str): 结果文件的保存路径。
|
||||
"""
|
||||
try:
|
||||
subprocess.run(["code", "-m", path1, path2, base, result], check=True)
|
||||
cls.ret = "Successfully performed merge"
|
||||
except subprocess.CalledProcessError as e:
|
||||
cls.ret = f"Error performing merge: {e}"
|
||||
except Exception as e:
|
||||
cls.ret = f"Unexpected error: {e}"
|
||||
|
||||
return cls.ret
|
||||
|
||||
@classmethod
|
||||
def remove_folder(cls, folder):
|
||||
"""
|
||||
Removes a folder from the last active window in VSCode.
|
||||
在VSCode的最后一个活动窗口中移除文件夹。
|
||||
|
||||
Args:
|
||||
folder (str): 文件夹路径。
|
||||
"""
|
||||
try:
|
||||
subprocess.run(["code", "--remove", folder], check=True)
|
||||
cls.ret = "Successfully removed folder"
|
||||
except subprocess.CalledProcessError as e:
|
||||
cls.ret = f"Error removing folder: {e}"
|
||||
except Exception as e:
|
||||
cls.ret = f"Unexpected error: {e}"
|
||||
|
||||
return cls.ret
|
||||
|
||||
@classmethod
|
||||
def install_extension(cls, extension_id, pre_release=False):
|
||||
"""
|
||||
Installs an extension or updates it in VSCode.
|
||||
安装或更新VSCode中的扩展。
|
||||
|
||||
Args:
|
||||
extension_id (str): 扩展的标识符。
|
||||
pre_release (bool): 是否安装预发布版本。
|
||||
"""
|
||||
try:
|
||||
command = ["code", "--install-extension", extension_id]
|
||||
if pre_release:
|
||||
command.append("--pre-release")
|
||||
subprocess.run(command, check=True)
|
||||
cls.ret = "Successfully installed extension"
|
||||
except subprocess.CalledProcessError as e:
|
||||
cls.ret = f"Error installing extension: {e}"
|
||||
except Exception as e:
|
||||
cls.ret = f"Unexpected error: {e}"
|
||||
|
||||
return cls.ret
|
||||
|
||||
@classmethod
|
||||
def uninstall_extension(cls, extension_id):
|
||||
"""
|
||||
Uninstalls an extension from VSCode.
|
||||
从VSCode中卸载扩展。
|
||||
|
||||
Args:
|
||||
extension_id (str): 扩展的标识符。
|
||||
"""
|
||||
try:
|
||||
subprocess.run(["code", "--uninstall-extension", extension_id], check=True)
|
||||
cls.ret = "Successfully uninstalled extension"
|
||||
except subprocess.CalledProcessError as e:
|
||||
cls.ret = f"Error uninstalling extension: {e}"
|
||||
except Exception as e:
|
||||
cls.ret = f"Unexpected error: {e}"
|
||||
|
||||
return cls.ret
|
||||
|
||||
@classmethod
|
||||
def list_extensions(cls, show_versions=False, category=None):
|
||||
"""
|
||||
Lists installed extensions in VSCode.
|
||||
列出VSCode中安装的扩展。
|
||||
|
||||
Args:
|
||||
show_versions (bool): 是否显示扩展的版本。
|
||||
category (str): 按类别筛选扩展。
|
||||
"""
|
||||
try:
|
||||
command = ["code", "--list-extensions"]
|
||||
if show_versions:
|
||||
command.append("--show-versions")
|
||||
if category:
|
||||
command.extend(["--category", category])
|
||||
cls.ret = subprocess.run(command, check=True, capture_output=True, text=True).stdout
|
||||
except subprocess.CalledProcessError as e:
|
||||
cls.ret = f"Error listing extensions: {e}"
|
||||
except Exception as e:
|
||||
cls.ret = f"Unexpected error: {e}"
|
||||
|
||||
return cls.ret
|
||||
|
||||
@classmethod
|
||||
def update_extensions(cls):
|
||||
"""
|
||||
Updates all installed extensions in VSCode to the latest version.
|
||||
更新VSCode中所有安装的扩展到最新版本。
|
||||
"""
|
||||
try:
|
||||
subprocess.run(["code", "--update-extensions"], check=True)
|
||||
cls.ret = "Successfully updated extensions"
|
||||
except subprocess.CalledProcessError as e:
|
||||
cls.ret = f"Error updating extensions: {e}"
|
||||
except Exception as e:
|
||||
cls.ret = f"Unexpected error: {e}"
|
||||
|
||||
return cls.ret
|
||||
|
||||
@classmethod
|
||||
def disable_extension(cls, extension_id):
|
||||
"""
|
||||
Disables a specific extension for the next instance of VSCode.
|
||||
禁用在下一个VSCode窗口中的指定扩展。
|
||||
|
||||
Args:
|
||||
extension_id (str): 扩展的标识符。
|
||||
"""
|
||||
try:
|
||||
subprocess.run(["code", "--disable-extension", extension_id], check=True)
|
||||
cls.ret = "Successfully disabled extension"
|
||||
except subprocess.CalledProcessError as e:
|
||||
cls.ret = f"Error disabling extension: {e}"
|
||||
except Exception as e:
|
||||
cls.ret = f"Unexpected error: {e}"
|
||||
|
||||
return cls.ret
|
||||
|
||||
@classmethod
|
||||
def toggle_sync(cls, state):
|
||||
"""
|
||||
Toggles synchronization on or off in VSCode.
|
||||
在VSCode中开启或关闭同步。
|
||||
|
||||
Args:
|
||||
state (str): 'on' 或 'off' 表示开启或关闭。
|
||||
"""
|
||||
try:
|
||||
command = ["code", "--sync", state]
|
||||
subprocess.run(command, check=True)
|
||||
cls.ret = "Successfully toggled sync"
|
||||
except subprocess.CalledProcessError as e:
|
||||
cls.ret = f"Error toggling sync: {e}"
|
||||
except Exception as e:
|
||||
cls.ret = f"Unexpected error: {e}"
|
||||
|
||||
return cls.ret
|
||||
Reference in New Issue
Block a user