#!/usr/bin/env python3
"""
Agent协作演示
展示如何让不同AI agent以真实身份协作完成任务

这个演示模拟以下场景：
1. 架构师agent设计系统架构
2. 开发者agent实现核心功能
3. 运维agent配置部署
4. 研究员agent撰写文档

每个步骤都有真实的git提交记录
"""

import os
import subprocess
import time
from pathlib import Path
from agent_identity_manager import AgentIdentityManager

class AgentCollaborationDemo:
    def __init__(self):
        self.manager = AgentIdentityManager()
        self.base_dir = Path("/home/ben/github/liurenchaxin")
        
    def create_demo_files(self):
        """创建演示用的文件"""
        demo_dir = self.base_dir / "demo_feature"
        demo_dir.mkdir(exist_ok=True)
        
        # 架构师的设计文档
        architecture_file = demo_dir / "architecture.md"
        architecture_content = """# 新功能架构设计

## 概述
设计一个智能监控系统，用于跟踪AI agent的工作状态。

## 组件设计
- 状态收集器：收集各agent的运行状态
- 分析引擎：分析agent行为模式
- 告警系统：异常行为实时通知

## 技术栈
- Python 3.9+
- Redis作为消息队列
- PostgreSQL存储状态数据
- FastAPI提供REST接口
"""
        architecture_file.write_text(architecture_content)
        
        # 开发者的实现代码
        core_file = demo_dir / "monitor.py"
        core_content = """#!/usr/bin/env python3
import asyncio
import json
from datetime import datetime
from typing import Dict, Any

class AgentMonitor:
    def __init__(self):
        self.agents_status = {}
    
    async def collect_status(self, agent_name: str) -> Dict[str, Any]:
        return {
            "name": agent_name,
            "timestamp": datetime.now().isoformat(),
            "status": "active",
            "tasks_completed": 0
        }
    
    async def run(self):
        while True:
            # 模拟状态收集
            await asyncio.sleep(1)

if __name__ == "__main__":
    monitor = AgentMonitor()
    asyncio.run(monitor.run())
"""
        core_file.write_text(core_content)
        
        # 运维的配置文件
        config_file = demo_dir / "deploy.yaml"
        config_content = """version: '3.8'
services:
  agent-monitor:
    build: .
    ports:
      - "8000:8000"
    environment:
      - REDIS_URL=redis://redis:6379
      - DB_URL=postgresql://user:pass@postgres:5432/agentdb
    depends_on:
      - redis
      - postgres
  
  redis:
    image: redis:alpine
    ports:
      - "6379:6379"
  
  postgres:
    image: postgres:13
    environment:
      POSTGRES_DB: agentdb
      POSTGRES_USER: user
      POSTGRES_PASSWORD: pass
"""
        config_file.write_text(config_content)
        
        # 研究员的文档
        docs_file = demo_dir / "usage_guide.md"
        docs_content = """# Agent监控系统使用指南

## 快速开始

### 1. 启动监控服务
```bash
docker-compose up -d
```

### 2. 查看agent状态
```bash
curl http://localhost:8000/api/agents
```

### 3. 配置告警
编辑 `config/alerts.yaml` 文件设置告警规则。

## API文档

### GET /api/agents
获取所有agent的当前状态

### POST /api/agents/{name}/task
记录agent完成的任务
"""
        docs_file.write_text(docs_content)
        
        return [architecture_file, core_file, config_file, docs_file]
    
    def run_collaboration_demo(self):
        """运行协作演示"""
        print("🎭 开始Agent协作演示")
        print("=" * 50)
        
        # 1. 架构师设计
        print("1️⃣ 架构师agent开始设计...")
        files = self.create_demo_files()
        self.manager.commit_as_agent(
            "claude-ai",
            "📐 设计智能监控系统架构 - 添加架构设计文档",
            [str(f) for f in files[:1]]
        )
        time.sleep(1)
        
        # 2. 开发者实现
        print("2️⃣ 开发者agent开始编码...")
        self.manager.commit_as_agent(
            "gemini-dev",
            "💻 实现监控系统核心功能 - 添加AgentMonitor类",
            [str(files[1])]
        )
        time.sleep(1)
        
        # 3. 运维配置
        print("3️⃣ 运维agent配置部署...")
        self.manager.commit_as_agent(
            "qwen-ops",
            "⚙️ 添加Docker部署配置 - 支持一键启动",
            [str(files[2])]
        )
        time.sleep(1)
        
        # 4. 研究员文档
        print("4️⃣ 研究员agent撰写文档...")
        self.manager.commit_as_agent(
            "llama-research",
            "📚 完善使用文档 - 添加API说明和快速指南",
            [str(files[3])]
        )
        time.sleep(1)
        
        # 5. 架构师review
        print("5️⃣ 架构师review并优化...")
        optimize_file = self.base_dir / "demo_feature" / "optimization.md"
        optimize_content = """# 架构优化建议

基于实现代码的review，提出以下优化：

## 性能优化
- 使用asyncio.create_task替换直接调用
- 添加连接池管理

## 监控增强
- 添加prometheus指标收集
- 实现健康检查端点

## 下一步计划
1. 实现告警系统
2. 添加Web界面
3. 集成日志分析
"""
        optimize_file.write_text(optimize_content)
        
        self.manager.commit_as_agent(
            "claude-ai",
            "🔍 架构review - 提出性能优化和监控增强建议",
            [str(optimize_file)]
        )
        
        print("\n✅ 协作演示完成！")
        
    def show_git_history(self):
        """显示git提交历史"""
        print("\n📊 Git提交历史（按agent分组）:")
        print("=" * 50)
        
        for agent_name in ["claude-ai", "gemini-dev", "qwen-ops", "llama-research"]:
            stats = self.manager.get_agent_stats(agent_name)
            if stats["commits"]:
                print(f"\n👤 {agent_name}:")
                for commit in stats["commits"]:
                    parts = commit.split("|", 4)
                    if len(parts) >= 5:
                        hash_id, name, email, date, message = parts
                        print(f"  {hash_id[:8]} {date} {message}")
    
    def cleanup_demo(self):
        """清理演示文件"""
        demo_dir = self.base_dir / "demo_feature"
        if demo_dir.exists():
            # 保留git历史，只移除工作区文件
            subprocess.run(["git", "rm", "-rf", "demo_feature"], 
                         cwd=self.base_dir, capture_output=True)
            subprocess.run(["git", "commit", "-m", "🧹 清理演示文件 - 保留协作历史"], 
                         cwd=self.base_dir, capture_output=True)
            print("🧹 演示文件已清理，git历史保留")

def main():
    """主函数"""
    demo = AgentCollaborationDemo()
    
    print("🎭 AI Agent协作演示")
    print("=" * 50)
    print("这个演示将展示如何让不同agent以真实身份协作")
    print("每个agent都有独立的git身份和提交记录")
    print("")
    
    # 检查agent是否已创建
    if not demo.manager.list_agents():
        print("❌ 请先运行 ./agents/setup_agents.sh 创建agent")
        return
    
    # 运行演示
    demo.run_collaboration_demo()
    demo.show_git_history()
    
    print("\n💡 下一步:")
    print("1. 查看git log --oneline --graph 查看提交历史")
    print("2. 使用 ./agents/stats.sh 查看agent统计")
    print("3. 开始你自己的多agent协作项目！")
    
    # 询问是否清理
    response = input("\n是否清理演示文件？(y/N): ")
    if response.lower() == 'y':
        demo.cleanup_demo()

if __name__ == "__main__":
    main()