import shlex # 导入shlex库,用于正确解析命令行输入 from config import Config # 从config模块导入Config类,用于配置管理 from github_client import GitHubClient # 从github_client模块导入GitHubClient类,用于GitHub API操作 from report_generator import ReportGenerator # 从report_generator模块导入ReportGenerator类,用于报告生成 from llm import LLM # 从llm模块导入LLM类,可能用于语言模型相关操作 from subscription_manager import SubscriptionManager # 从subscription_manager模块导入SubscriptionManager类,管理订阅 from command_handler import CommandHandler # 从command_handler模块导入CommandHandler类,处理命令行命令 from logger import LOG # 从logger模块导入LOG对象,用于日志记录 def main(): config = Config() # 创建配置实例 github_client = GitHubClient(config.github_token) # 创建GitHub客户端实例 llm = LLM(config) # 创建语言模型实例 report_generator = ReportGenerator(llm, config.report_types) # 创建报告生成器实例 subscription_manager = SubscriptionManager(config.subscriptions_file) # 创建订阅管理器实例 command_handler = CommandHandler(github_client, subscription_manager, report_generator) # 创建命令处理器实例 parser = command_handler.parser # 获取命令解析器 command_handler.print_help() # 打印帮助信息 while True: try: user_input = input("GitHub Sentinel> ") # 等待用户输入 if user_input in ['exit', 'quit']: # 如果输入为退出命令,则结束循环 break try: args = parser.parse_args(shlex.split(user_input)) # 解析用户输入的命令 if args.command is None: # 如果没有命令被解析,则继续循环 continue args.func(args) # 执行对应的命令函数 except SystemExit as e: # 捕获由于错误命令引发的异常 LOG.error("Invalid command. Type 'help' to see the list of available commands.") except Exception as e: LOG.error(f"Unexpected error: {e}") # 记录其他未预期的错误 if __name__ == '__main__': main() # 如果直接运行该文件,则执行main函数