#!/usr/bin/env python3 """ Dev Workflow CLI 开发工作流命令行工具,包含 Cross 模式统计报告功能。 """ import argparse import sys from pathlib import Path # 添加当前目录到路径 sys.path.insert(0, str(Path(__file__).parent)) from stats import record_event, get_stats, format_stats_report def cmd_stats(args): """显示统计报告""" stats = get_stats() report = format_stats_report(stats) print(report) def cmd_record_event(args): """记录一个事件""" # 构建 metadata metadata = {} if args.metadata: for item in args.metadata: if "=" in item: key, value = item.split("=", 1) metadata[key] = value success = record_event( event_type=args.type, mode=args.mode, metadata=metadata if metadata else None, status=args.status ) if success: print(f"✅ 事件记录成功: type={args.type}, mode={args.mode}, status={args.status}") else: print(f"❌ 事件记录失败") sys.exit(1) def cmd_clear_stats(args): """清除统计数据(谨慎使用)""" from stats import STATS_FILE import os if STATS_FILE.exists(): if args.force or input("确认清除所有统计数据? [y/N]: ").lower() == "y": os.remove(STATS_FILE) print("✅ 统计数据已清除") else: print("操作已取消") else: print("统计数据文件不存在") def main(): parser = argparse.ArgumentParser( description="Dev Workflow - 开发工作流工具", formatter_class=argparse.RawDescriptionHelpFormatter, epilog=""" 示例: # 查看统计报告 python3 dev_workflow.py stats # 记录一个 Cross 模式辩论事件 python3 dev_workflow.py record-event --type debate --mode cross # 记录一个失败的事件(带元数据) python3 dev_workflow.py record-event --type review --mode normal --status failed --metadata pr_id=123 # 清除统计数据 python3 dev_workflow.py clear-stats --force """ ) subparsers = parser.add_subparsers(dest="command", help="可用命令") # stats 命令 stats_parser = subparsers.add_parser("stats", help="查看统计报告") stats_parser.set_defaults(func=cmd_stats) # record-event 命令 record_parser = subparsers.add_parser("record-event", help="记录事件") record_parser.add_argument( "--type", "-t", required=True, choices=["debate", "review", "audit"], help="事件类型: debate(辩论), review(评审), audit(审计)" ) record_parser.add_argument( "--mode", "-m", required=True, choices=["cross", "normal"], help="运行模式: cross 或 normal" ) record_parser.add_argument( "--status", "-s", default="success", choices=["success", "failed"], help="事件状态 (默认: success)" ) record_parser.add_argument( "--metadata", nargs="*", help="元数据,格式: key=value key2=value2" ) record_parser.set_defaults(func=cmd_record_event) # clear-stats 命令 clear_parser = subparsers.add_parser("clear-stats", help="清除统计数据") clear_parser.add_argument("--force", "-f", action="store_true", help="强制清除,不询问") clear_parser.set_defaults(func=cmd_clear_stats) args = parser.parse_args() if args.command is None: parser.print_help() sys.exit(0) args.func(args) if __name__ == "__main__": main()