{"id":32431126,"url":"https://github.com/zingzy/code-review-agent","last_synced_at":"2025-10-25T21:55:23.182Z","repository":{"id":315248205,"uuid":"1058715863","full_name":"Zingzy/code-review-agent","owner":"Zingzy","description":"Simple code review agent using langgraph","archived":false,"fork":false,"pushed_at":"2025-09-17T13:38:11.000Z","size":284,"stargazers_count":0,"open_issues_count":0,"forks_count":1,"subscribers_count":0,"default_branch":"master","last_synced_at":"2025-09-17T15:22:00.974Z","etag":null,"topics":["agent","ai-agents","code-review"],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/Zingzy.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2025-09-17T13:04:43.000Z","updated_at":"2025-09-17T13:38:14.000Z","dependencies_parsed_at":"2025-09-17T15:34:08.384Z","dependency_job_id":null,"html_url":"https://github.com/Zingzy/code-review-agent","commit_stats":null,"previous_names":["zingzy/code-review-agent"],"tags_count":null,"template":false,"template_full_name":null,"purl":"pkg:github/Zingzy/code-review-agent","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Zingzy%2Fcode-review-agent","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Zingzy%2Fcode-review-agent/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Zingzy%2Fcode-review-agent/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Zingzy%2Fcode-review-agent/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Zingzy","download_url":"https://codeload.github.com/Zingzy/code-review-agent/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Zingzy%2Fcode-review-agent/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":281026226,"owners_count":26431753,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-10-25T02:00:06.499Z","response_time":81,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["agent","ai-agents","code-review"],"created_at":"2025-10-25T21:55:20.591Z","updated_at":"2025-10-25T21:55:23.176Z","avatar_url":"https://github.com/Zingzy.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# 🤖 Code Reviewer Agent\n\nAn **autonomous AI-powered code review agent** that analyzes GitHub Pull Requests using advanced language models and provides comprehensive code quality insights through intelligent multi-agent workflows.\n\n[![Python](https://img.shields.io/badge/python-3.13-blue)](.)\n[![FastAPI](https://img.shields.io/badge/FastAPI-0.116-green)](.)\n![GitHub Actions Workflow Status](https://img.shields.io/github/actions/workflow/status/zingzy/code-review-agent/ci.yaml)\n![Codecov](https://img.shields.io/codecov/c/github/zingzy/code-review-agent)\n[![Code Style](https://img.shields.io/badge/code%20style-ruff-000000.svg)](https://github.com/astral-sh/ruff)\n\n## 🚀 Features\n\n- **🧠 AI-Powered Analysis**: Multi-agent LangGraph workflow with intelligent decision-making\n- **🔄 Async Processing**: Celery-based distributed task queue for scalable analysis\n- **📊 Comprehensive Reports**: Security, performance, style, and maintainability insights\n- **🐙 GitHub Integration**: Seamless GitHub API integration with rate limiting and caching\n- **🗄️ Type-Safe Storage**: PostgreSQL with SQLModel ORM for robust data persistence\n- **⚡ Redis Infrastructure**: High-performance caching and message brokering\n\n## 🏗️ System Architecture\n\n```mermaid\ngraph TB\n    subgraph \"Client Layer\"\n        Client[REST Client]\n        Browser[Web Browser]\n    end\n\n    subgraph \"API Gateway\"\n        FastAPI[FastAPI Server\u003cbr/\u003e• Authentication\u003cbr/\u003e• Validation\u003cbr/\u003e• Documentation]\n    end\n\n    subgraph \"Processing Layer\"\n        Celery[Celery Workers\u003cbr/\u003e• Task Queue\u003cbr/\u003e• Background Processing\u003cbr/\u003e• Progress Tracking]\n\n        subgraph \"AI Agents\"\n            LangGraph[LangGraph Workflow\u003cbr/\u003e• Decision Making\u003cbr/\u003e• File Prioritization]\n            LLM[LLM Service\u003cbr/\u003e• Code Analysis\u003cbr/\u003e• Issue Detection]\n        end\n    end\n\n    subgraph \"External Services\"\n        GitHub[GitHub API\u003cbr/\u003e• PR Data\u003cbr/\u003e• File Content\u003cbr/\u003e• Metadata]\n        OpenAI[OpenAI/Pollinations\u003cbr/\u003e• GPT Models\u003cbr/\u003e• Code Analysis]\n    end\n\n    subgraph \"Data Layer\"\n        PostgreSQL[(PostgreSQL\u003cbr/\u003e• Task Storage\u003cbr/\u003e• Analysis Results\u003cbr/\u003e• Audit Logs)]\n        Redis[(Redis\u003cbr/\u003e• Message Queue\u003cbr/\u003e• Caching\u003cbr/\u003e• Session Store)]\n    end\n\n    Client --\u003e FastAPI\n    Browser --\u003e FastAPI\n    FastAPI --\u003e Celery\n    Celery --\u003e LangGraph\n    LangGraph --\u003e LLM\n    LLM --\u003e OpenAI\n    Celery --\u003e GitHub\n    FastAPI --\u003e PostgreSQL\n    Celery --\u003e PostgreSQL\n    FastAPI --\u003e Redis\n    Celery --\u003e Redis\n    LangGraph --\u003e Redis\n\n    classDef api fill:#e1f5fe\n    classDef processing fill:#f3e5f5\n    classDef storage fill:#e8f5e8\n    classDef external fill:#fff3e0\n\n    class FastAPI api\n    class Celery,LangGraph,LLM processing\n    class PostgreSQL,Redis storage\n    class GitHub,OpenAI external\n```\n\n## 🤖 AI Agent Workflow\n\n```mermaid\ngraph TD\n    Start([PR Analysis Request]) --\u003e Triage[AI Triage Node\u003cbr/\u003e• Examine PR metadata\u003cbr/\u003e• Identify critical files\u003cbr/\u003e• Set analysis strategy]\n\n    Triage --\u003e FileLoop{Files to Analyze?}\n\n    FileLoop --\u003e|Yes| AnalyzeFile[File Analysis Node\u003cbr/\u003e• Deep code analysis\u003cbr/\u003e• Issue detection\u003cbr/\u003e• LLM integration]\n\n    AnalyzeFile --\u003e UpdateProgress[Update Progress\u003cbr/\u003e• Status tracking\u003cbr/\u003e• Real-time updates]\n\n    UpdateProgress --\u003e FileLoop\n\n    FileLoop --\u003e|No| Synthesize[Synthesis Node\u003cbr/\u003e• Aggregate findings\u003cbr/\u003e• Generate summary\u003cbr/\u003e• Calculate metrics]\n\n    Synthesize --\u003e SaveResults[Save Results\u003cbr/\u003e• Database storage\u003cbr/\u003e• Cache updates]\n\n    SaveResults --\u003e Complete([Analysis Complete])\n\n    subgraph \"AI Decision Points\"\n        Triage\n        AnalyzeFile\n        Synthesize\n    end\n\n    subgraph \"Data Operations\"\n        UpdateProgress\n        SaveResults\n    end\n\n    classDef ai fill:#e3f2fd\n    classDef data fill:#e8f5e8\n    classDef flow fill:#fff3e0\n\n    class Triage,AnalyzeFile,Synthesize ai\n    class UpdateProgress,SaveResults data\n    class Start,Complete,FileLoop flow\n```\n\n## 🛠️ Technology Stack\n\n### **Backend Framework**\n\n- **FastAPI** - Modern async web framewor\n- **SQLModel** - Type-safe database ORM combining Pydantic and SQLAlchemy\n- **Celery** - Distributed task queue with Redis broker for async processing\n- **Redis** - High-performance caching and message broker\n- **PostgreSQL** - Robust relational database with JSON support\n- **UV** - Lightning-fast Python package manager and dependency resolver\n\n### **AI \u0026 Analysis Engine**\n\n- **LangGraph** - Advanced AI workflow orchestration with state management\n- **OpenAI/Pollinations** - Multiple LLM provider support for code analysis\n- **PyGithub** - Comprehensive GitHub API integration with rate limiting\n- **Instructor** - Structured LLM output validation with Pydantic models\n- **Custom Analysis Tools** - Specialized code analysis utilities and detectors\n\n### **Development \u0026 Infrastructure**\n\n- **Docker Compose** - Containerized development environment\n- **Alembic** - Database schema migrations with version control\n- **Loguru** - Advanced structured logging with rotation and filtering\n- **Pytest** - Comprehensive testing framework with async support\n- **Ruff** - High-performance Python linting and formatting\n\n## 🚀 Quick Start\n\n### Prerequisites\n\nEnsure you have the following installed on your system:\n\n- **Python 3.13+**\n- **Docker \u0026 Docker Compose** (For infrastructure services)\n- **UV Package Manager**\n- **Git** (For version control)\n\n#### Optional\n\n- **GitHub Personal Access Token** ([Create here](https://github.com/settings/tokens)) - For private repositories and higher rate limits\n- **OpenAI API Key** ([Get yours here](https://platform.openai.com/api-keys)) - For using GPT instead of pollinations.ai\n\n### 1. Clone \u0026 Environment Setup\n\n```bash\n# Clone the repository\ngit clone https://github.com/zingzy/code-review-agent.git\ncd code-review-agent\n\n# Install all dependencies with UV\nuv sync\n\n# Copy environment template and configure\ncp .env.example .env\n```\n\n### 2. Environment Configuration\n\nEdit your `.env` file with appropriate values:\n\n```env\n# Database Configuration (Docker services)\nDATABASE_URL=postgresql://postgres:postgres@localhost:5433/code_review\nREDIS_URL=redis://localhost:6379/0\n\n# Celery Task Queue\nCELERY_BROKER_URL=redis://localhost:6379/0\nCELERY_RESULT_BACKEND=redis://localhost:6379/0\n\n# GitHub Integration (Optional but recommended)\nGITHUB_TOKEN=ghp_your_github_token_here\n\n# AI Analysis (Choose your provider)\nOPENAI_API_KEY=sk-your_openai_api_key_here\n\n# Security (Generate secure keys)\nSECRET_KEY=your-secure-secret-key-here\nAPI_KEY=your-api-authentication-key\n\n# Environment\nENVIRONMENT=development  # development, staging, production\n```\n\n#### 🔐 Security Key Generation\n\nGenerate secure keys for production:\n\n```bash\n# Generate SECRET_KEY\npython -c \"import secrets; print(f'SECRET_KEY={secrets.token_urlsafe(32)}')\"\n\n# Generate API_KEY\npython -c \"import secrets; print(f'API_KEY={secrets.token_urlsafe(16)}')\"\n```\n\n### 3. Infrastructure Services\n\nStart the required infrastructure services:\n\n```bash\n# Start whole infra\ndocker-compose up\n\n# Verify services are running\ndocker-compose ps\n```\n\nWait for services to be healthy, then run database migrations:\n\n```bash\n# Initialize database schema\nuv run alembic upgrade head\n```\n\n## Test the API\n\n### Submit PR Analysis\n\n**POST** `/api/v1/analyze-pr`\n\nSubmit a GitHub Pull Request for comprehensive analysis.\n\n**Request Body:**\n\n```json\n{\n  \"repo_url\": \"https://github.com/owner/repository\",\n  \"pr_number\": 123,\n  \"github_token\": \"ghp_optional_token_for_private_repos\"\n}\n```\n\n**Response (202 Accepted):**\n\n```json\n{\n  \"task_id\": \"550e8400-e29b-41d4-a716-446655440000\",\n  \"status\": \"pending\",\n  \"message\": \"Analysis task queued successfully\",\n  \"estimated_duration\": \"2-5 minutes\"\n}\n```\n\n**cURL Example:**\n\n```bash\ncurl -X POST \"http://localhost:8000/api/v1/analyze-pr\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\n    \"repo_url\": \"https://github.com/owner/repo\",\n    \"pr_number\": 123,\n    \"github_token\": \"optional_token\"\n  }'\n```\n\n### Check Analysis Status\n\n**GET** `/api/v1/status/{task_id}`\n\nMonitor the progress of an analysis task.\n\n**Response Examples:**\n\n```json\n{\n  \"task_id\": \"uuid-task-id\",\n  \"status\": \"pending\",\n  \"message\": \"Analysis task queued successfully\"\n}\n```\n\n**CURL Example:**\n\n```bash\ncurl \"http://localhost:8000/api/v1/status/uuid-task-id\"\n```\n\n### Cancel Analysis Task\n\n**POST** `/api/v1/cancel/{task_id}`\n\nCancel a running analysis task.\n\n**Response:**\n\n```json\n\n{\n  \"task_id\": \"uuid-task-id\",\n  \"status\": \"cancelled\",\n  \"message\": \"Task cancelled successfully\"\n}\n```\n\n**CURL Example:**\n\n```bash\ncurl -X POST \"http://localhost:8000/api/v1/cancel/uuid-task-id\"\n```\n\n### Get Analysis Results\n\n**GET** `/api/v1/results/{task_id}`\n\n**Response (200 OK):**\n\n```json\n{\n  \"task_id\": \"uuid-task-id\",\n  \"status\": \"completed\",\n  \"progress\": 100.0,\n  \"files\": [\n    {\n      \"name\": \"main.py\",\n      \"path\": \"src/main.py\",\n      \"language\": \"python\",\n      \"size\": 2048,\n      \"issues\": [\n        {\n          \"type\": \"security\",\n          \"severity\": \"high\",\n          \"line\": 42,\n          \"description\": \"Potential SQL injection vulnerability.\",\n          \"suggestion\": \"Use parameterized queries.\",\n          \"confidence\": 0.95\n        }\n      ]\n    }\n  ],\n    \"summary\": {\n        \"total_files\": 1,\n        \"total_issues\": 1,\n        \"critical_issues\": 0,\n        \"high_issues\": 1,\n        \"medium_issues\": 0,\n        \"low_issues\": 0,\n        \"style_issues\": 0,\n        \"bug_issues\": 0,\n        \"performance_issues\": 0,\n        \"security_issues\": 0,\n        \"maintainability_issues\": 0,\n        \"best_practice_issues\": 0,\n        \"code_quality_score\": 0.0,\n        \"maintainability_score\": 0.0\n    },\n    \"created_at\": \"2025-09-17T12:01:17.308745\",\n    \"started_at\": \"2025-09-17T12:01:17.940944\",\n    \"completed_at\": \"2025-09-17T12:01:40.288990\",\n    \"analysis_duration\": 22.348046,\n    \"error_message\": null\n}\n```\n\n**CURL Example:**\n\n```bash\ncurl \"http://localhost:8000/api/v1/results/uuid-task-id\"\n```\n\n## 🌐 Live Testing\n\nThe Code Reviewer Agent is deployed and available for live testing at **https://code-review.spoo.me**.\n\n### Quick Start with Sample PR\n\nTry the service using our sample PR from the URL shortener project:\n\n#### 1. Start Analysis Task\n\n**Submit a PR for analysis:**\n\n```bash\ncurl -X POST \"https://code-review.spoo.me/api/v1/analyze-pr\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\n    \"repo_url\": \"https://github.com/spoo-me/url-shortener\",\n    \"pr_number\": 79,\n    \"github_token\": \"ghp_your_github_token_here\"\n  }'\n```\n\n\u003e **💡 Tip**: It's highly recommended to pass your own GitHub access token in the request. This provides more relaxed rate limits and ensures better service reliability, especially for private repositories or when the public rate limit is exhausted.\n\n**Expected Response:**\n\n```json\n{\n  \"task_id\": \"uuid-task-id\",\n  \"status\": \"pending\",\n  \"message\": \"Analysis task queued successfully\",\n  \"estimated_duration\": \"2-5 minutes\"\n}\n```\n\n#### 2. Check Analysis Status\n\n**Monitor your task progress using the returned Task ID:**\n\n```bash\ncurl \"https://code-review.spoo.me/api/v1/status/uuid-task-id\"\n```\n\n**Response Examples:**\n\n```json\n// Initial status\n{\n  \"task_id\": \"uuid-task-id\",\n  \"status\": \"pending\",\n  \"message\": \"Analysis task queued successfully\"\n}\n\n// In progress\n{\n  \"task_id\": \"uuid-task-id\",\n  \"status\": \"in_progress\",\n  \"progress\": 45.0,\n  \"message\": \"Analyzing file: src/components/Dashboard.tsx\"\n}\n\n// Completed\n{\n  \"task_id\": \"uuid-task-id\",\n  \"status\": \"completed\", \n  \"progress\": 100.0,\n  \"message\": \"Analysis completed successfully\"\n}\n```\n\n#### 3. Get Analysis Results\n\n**Retrieve the comprehensive analysis report using the Task ID:**\n\n```bash\ncurl \"https://code-review.spoo.me/api/v1/results/uuid-task-id\"\n```\n\n**Example Response:**\n\n```json\n{\n  \"task_id\": \"uuid-task-id\",\n  \"status\": \"completed\",\n  \"progress\": 100.0,\n  \"files\": [\n    {\n      \"name\": \"main.py\",\n      \"path\": \"src/main.py\",\n      \"language\": \"python\",\n      \"size\": 2048,\n      \"issues\": [\n        {\n          \"type\": \"security\",\n          \"severity\": \"high\",\n          \"line\": 42,\n          \"description\": \"Potential SQL injection vulnerability.\",\n          \"suggestion\": \"Use parameterized queries.\",\n          \"confidence\": 0.95\n        }\n      ]\n    }\n  ],\n    \"summary\": {\n        \"total_files\": 1,\n        \"total_issues\": 1,\n        \"critical_issues\": 0,\n        \"high_issues\": 1,\n        \"medium_issues\": 0,\n        \"low_issues\": 0,\n        \"style_issues\": 0,\n        \"bug_issues\": 0,\n        \"performance_issues\": 0,\n        \"security_issues\": 0,\n        \"maintainability_issues\": 0,\n        \"best_practice_issues\": 0,\n        \"code_quality_score\": 0.0,\n        \"maintainability_score\": 0.0\n    },\n    \"created_at\": \"2025-09-17T12:01:17.308745\",\n    \"started_at\": \"2025-09-17T12:01:17.940944\",\n    \"completed_at\": \"2025-09-17T12:01:40.288990\",\n    \"analysis_duration\": 22.348046,\n    \"error_message\": null\n}\n```\n\n### Additional API Endpoints\n\n#### Cancel Running Task\n\n```bash\ncurl -X POST \"https://code-review.spoo.me/api/v1/cancel/uuid-task-id\"\n```\n\n#### Analyze Your Own PR\n\nReplace the sample values with your repository details:\n\n```bash\ncurl -X POST \"https://code-review.spoo.me/api/v1/analyze-pr\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\n    \"repo_url\": \"https://github.com/your-username/your-repo\",\n    \"pr_number\": \u003cyour-pr-number\u003e,\n    \"github_token\": \"ghp_your_github_token_here\"\n  }'\n```\n\n### GitHub Token Setup\n\nTo get your GitHub personal access token:\n\n1. Go to [GitHub Settings \u003e Developer settings \u003e Personal access tokens](https://github.com/settings/tokens)\n2. Click \"Generate new token (classic)\"\n3. Select scopes: `repo` (for private repos) or `public_repo` (for public repos only)\n4. Copy the generated token and use it in the `github_token` field\n\n## 🧪 Development \u0026 Testing\n\n### Testing Infrastructure\n\nThe project maintains a comprehensive test suite with multiple test categories:\n\n```bash\n# Run full test suite\nuv run pytest\n\n# Run with coverage reporting\nuv run pytest --cov=app --cov-report=html --cov-report=term-missing\n```\n\n### Code Quality Tools\n\n```bash\n# Code formatting with Ruff\nuvx ruff format\n\n# Linting and style checks\nuvx ruff check\nuvx ruff check --fix      # Auto-fix issues\n\n```\n\n### Database Testing\n\n```bash\n# Create migration\nuv run alembic revision --autogenerate -m \"description\"\n\n# Apply migrations\nuv run alembic upgrade head\n\n# Rollback migration\nuv run alembic downgrade -1\n```\n\n## 🏗️ Design Decisions \u0026 Architecture\n\n### Core Technology Choices\n\n#### **UV vs. pip/poetry**\n\n- **Why UV**: 10-100x faster dependency resolution and installation\n- **Benefits**: Unified tool for dependencies, virtual environments, and Python versions\n\n#### **SQLModel vs. SQLAlchemy**\n\n- **Why SQLModel**: Type-safe ORM with Pydantic integration\n- **Benefits**: Automatic API serialization, unified data models\n- **Trade-offs**: Less mature than pure SQLAlchemy\n- **Performance**: Comparable to SQLAlchemy with better developer experience\n\n#### **Celery vs. ARQ/TaskIQ**\n\n- **Current**: Celery for mature ecosystem and Redis integration\n- **Benefits**: Battle-tested, extensive monitoring, complex workflows, task cancellation support\n- **Trade-offs**: Heavier weight, not async-native\n- **Future**: Migration to ARQ planned (see Future Improvements)\n\n#### **LangGraph vs. LangChain**\n\n- **Why LangGraph**: State-based AI workflows\n- **Benefits**: Visual workflow representation, cyclic graph support\n- **Trade-offs**: Newer, smaller ecosystem\n- **Use Case**: Perfect for multi-step code analysis workflows\n\n## 🚀 Future Improvements\n\n- Fully async Task Queue using Arq/TaskIQ\n- Fully async redis client for github repo caching using async-redis\n- Better tools for more robust code analysis\n- Direct Github PR comment bot\n\n## 📂 Project Structure\n\n```bash\ncode_reviewer_agent/\n├── app/\n│   ├── agents/          # AI workflow logic\n│   │   ├── ai_workflow.py\n│   │   ├── analyzer.py\n│   │   └── tools/       # Analysis tools\n│   ├── api/             # FastAPI routes\n│   │   └── v1/endpoints/\n│   ├── config/          # Configuration management\n│   ├── models/          # Database \u0026 API models\n│   ├── services/        # Business logic\n│   │   ├── github.py\n│   │   └── llm_service.py\n│   ├── tasks/           # Celery tasks\n│   └── utils/           # Utilities\n├── tests/               # Test suite\n│   ├── fixtures/        # Test fixtures\n│   ├── integration/     # Integration tests\n│   └── unit/           # Unit tests\n├── migrations/          # Database migrations\n└── docs/               # Documentation\n```\n\n## 🔍 Analysis Features\n\n### **Code Issues Detected**\n\n- 🔒 **Security vulnerabilities**\n- 🐛 **Potential bugs**\n- ⚡ **Performance problems**\n- 🎨 **Style violations**\n- 🔧 **Maintainability concerns**\n\n### **AI Capabilities**\n\n- Context-aware analysis\n- Intelligent prioritization\n- Detailed explanations\n- Fix suggestions\n\n## 🤝 Contributing\n\n1. **Fork** the repository\n2. **Create** a feature branch (`git checkout -b feature/amazing-feature`)\n3. **Commit** your changes (`git commit -m 'Add amazing feature'`)\n4. **Push** to the branch (`git push origin feature/amazing-feature`)\n5. **Open** a Pull Request\n\n### 🛠️ Development Guidelines\n\n- Write tests for new features\n- Follow existing code style\n- Update documentation\n- Ensure all tests pass\n\n## 📊 Monitoring\n\n### **Logs**\n\n- Application logs: `logs/app.log`\n- Structured JSON logging with Loguru\n- Configurable log levels\n\n## 🙏 Acknowledgments\n\n- **FastAPI** for the excellent async framework\n- **LangGraph** for AI workflow orchestration\n- **OpenAI** for language model capabilities\n- **GitHub** for comprehensive API access\n\n---\n\n\u003ch6 align=\"center\"\u003e\n\u003cimg src=\"https://avatars.githubusercontent.com/u/90309290?v=4\" height=30 title=\"zingzy Copyright\"\u003e\n\u003cbr\u003e\n© zingzy . 2025\n\nAll Rights Reserved\u003c/h6\u003e\n\n\u003cp align=\"center\"\u003e\n\t\u003ca href=\"https://github.com/zingzy/code-review-agent/blob/master/LICENSE\"\u003e\u003cimg src=\"https://img.shields.io/static/v1.svg?style=for-the-badge\u0026label=License\u0026message=APACHE-2.0\u0026logoColor=d9e0ee\u0026colorA=363a4f\u0026colorB=b7bdf8\"/\u003e\u003c/a\u003e\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fzingzy%2Fcode-review-agent","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fzingzy%2Fcode-review-agent","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fzingzy%2Fcode-review-agent/lists"}