CodeMutator


NameCodeMutator JSON
Version 0.0.10 PyPI version JSON
download
home_pageNone
SummaryA comprehensive Python framework for building coding agents using GenAI
upload_time2025-07-23 07:44:02
maintainerNone
docs_urlNone
authorNone
requires_python>=3.8
licenseApache-2.0
keywords mutator agent ai llm framework python development automation
VCS
bugtrack_url
requirements litellm pydantic pydantic-settings typing-extensions langchain langchain-core langgraph langchain-community chromadb sentence-transformers numpy typer rich prompt-toolkit pytest pytest-asyncio pathspec gitpython watchdog chardet httpx requests html2text openai anthropic
Travis-CI No Travis.
coveralls test coverage No coveralls.
            # Mutator Framework

A comprehensive Python framework for building AI-powered coding agents that can execute complex coding tasks using Large Language Models (LLMs).

## Features

### Core Capabilities
- **LLM Integration**: Support for multiple LLM providers via LiteLLM (OpenAI, Anthropic, Google, etc.)
- **LangChain-Powered Execution**: Built on LangChain for robust agent orchestration, tool calling, and streaming
- **Intelligent Task Planning**: Simplified planning system where the LLM decides when to break down complex tasks
- **Extensible Tool System**: Modern @tool decorator for easy tool creation with built-in file operations, shell commands, and Git integration
- **Context Management**: Vector-based project context with ChromaDB for intelligent code understanding
- **Dual Execution Modes**: Chat mode (read-only) and Agent mode (full code modification)
- **Safety Features**: Configurable safety checks and user confirmations
- **Sub-Agent Delegation**: Automatic delegation of complex tasks to specialized sub-agents
- **Streaming Support**: Real-time streaming of agent responses and tool execution via LangGraph

### Advanced Features
- **MCP Server Integration**: Support for Model Context Protocol servers
- **Configuration Management**: Flexible configuration system with validation
- **Event-Driven Architecture**: Real-time execution monitoring and control
- **CLI Interface**: Rich command-line interface with interactive features
- **Extensible Design**: Easy to add custom tools and integrations
- **Tool Management**: Disable built-in tools to avoid conflicts with custom implementations


## Installation

```bash
pip install CodeMutator
```

### Development Installation

```bash
git clone https://github.com/code-mutator/mutator.git
cd mutator
pip install -e .
```

## Quick Start

### Basic Usage

```python
import asyncio
from mutator import Mutator, AgentConfig, ExecutionMode

async def main():
    # Create and initialize agent
    config = AgentConfig(working_directory="./my_project")
    agent = Mutator(config)
    await agent.initialize()
    
    # Execute a simple task
    async for event in agent.execute_task(
        "Add error handling to the main.py file",
        execution_mode=ExecutionMode.AGENT
    ):
        print(f"{event.event_type}: {event.data}")

asyncio.run(main())
```

### Chat Mode

```python
import asyncio
from mutator import Mutator, AgentConfig

async def main():
    config = AgentConfig(working_directory="./my_project")
    agent = Mutator(config)
    await agent.initialize()
    
    # Chat without making changes
    response = await agent.chat("What does the main function do?")
    print(response.content)

asyncio.run(main())
```

### CLI Usage

```bash
# Execute a task
mutator execute "Add unit tests for the authentication module" --project ./my_project

# Interactive chat
mutator chat --project ./my_project

# Single chat message
mutator chat "Explain the database schema" --project ./my_project

# Check agent status
mutator status --project ./my_project

# List available tools
mutator tools
```

## Configuration

### API Key Setup

The framework supports multiple LLM providers. Set up your API keys using environment variables:

```bash
# OpenAI
export OPENAI_API_KEY="your-openai-api-key"

# Anthropic
export ANTHROPIC_API_KEY="your-anthropic-api-key"

# Google
export GOOGLE_API_KEY="your-google-api-key"

# Azure OpenAI
export AZURE_API_KEY="your-azure-api-key"
export AZURE_API_BASE="https://your-resource.openai.azure.com/"
export AZURE_API_VERSION="2023-05-15"
```

### Provider Usage

```bash
# Use OpenAI (default)
mutator chat --model gpt-4-turbo-preview

# Use Anthropic Claude
mutator chat --provider anthropic --model claude-3-sonnet-20240229

# Use Google Gemini
mutator chat --provider google --model gemini-pro

# Use Azure OpenAI
mutator chat --provider azure --model gpt-4
```

### Creating Configuration

```bash
# Create default configuration
mutator config create --output my_config.json

# Validate configuration
mutator config validate my_config.json

# Show configuration
mutator config show my_config.json
```

### Configuration Structure

```json
{
  "llm_config": {
    "model": "gpt-4-turbo-preview",
    "provider": "openai",
    "api_key": "your-api-key",
    "max_tokens": 2000,
    "temperature": 0.1
  },
  "context_config": {
    "project_path": "./",
    "max_context_files": 20,
    "ignore_patterns": ["*.pyc", "__pycache__", ".git"]
  },
  "safety_config": {
    "confirmation_level": "medium",
    "allowed_shell_commands": ["ls", "cat", "git"],
    "blocked_shell_commands": ["rm", "sudo", "wget"]
  },
  "execution_config": {
    "default_mode": "agent",
    "max_iterations": 50,
    "retry_on_failure": true
  },
  "disabled_tools": [
    "git_status",
    "git_add",
    "run_shell"
  ]
}
```

### Provider-Specific Configuration Examples

#### OpenAI Configuration
```json
{
  "llm_config": {
    "provider": "openai",
    "model": "gpt-4-turbo-preview",
    "api_key": "your-openai-api-key",
    "max_tokens": 4000,
    "temperature": 0.1
  }
}
```

#### Anthropic Configuration
```json
{
  "llm_config": {
    "provider": "anthropic",
    "model": "claude-3-sonnet-20240229",
    "api_key": "your-anthropic-api-key",
    "max_tokens": 4000,
    "temperature": 0.1
  }
}
```

#### Google Configuration
```json
{
  "llm_config": {
    "provider": "google",
    "model": "gemini-pro",
    "api_key": "your-google-api-key",
    "max_tokens": 2048,
    "temperature": 0.1
  }
}
```

#### Azure OpenAI Configuration
```json
{
  "llm_config": {
    "provider": "azure",
    "model": "gpt-4",
    "api_key": "your-azure-api-key",
    "base_url": "https://your-resource.openai.azure.com/",
    "api_version": "2023-05-15",
    "max_tokens": 4000,
    "temperature": 0.1
  }
}
```

## Examples

### Complex Task Execution

```python
import asyncio
from mutator import Mutator, AgentConfig, ExecutionMode

async def refactor_codebase():
    config = AgentConfig(working_directory="./my_project")
    agent = Mutator(config)
    await agent.initialize()
    
    task = """
    Refactor the user authentication system:
    1. Extract authentication logic into a separate service
    2. Add comprehensive error handling
    3. Implement rate limiting
    4. Add unit tests for all new components
    5. Update documentation
    """
    
    async for event in agent.execute_task(
        task, 
        execution_mode=ExecutionMode.AGENT
    ):
        if event.event_type == "task_started":
            print(f"Starting: {event.data}")
        elif event.event_type == "tool_call_completed":
            print(f"Completed: {event.data['tool_name']}")
        elif event.event_type == "task_completed":
            print("Task completed successfully!")

asyncio.run(refactor_codebase())
```

### Custom Tool Creation (Modern @tool Decorator)

```python
from mutator import Mutator, AgentConfig
from mutator.tools.decorator import tool

@tool
def calculate_complexity(file_path: str) -> dict:
    """Calculate code complexity metrics for a file."""
    try:
        with open(file_path, 'r') as f:
            content = f.read()
        
        lines = len(content.splitlines())
        functions = content.count('def ')
        classes = content.count('class ')
        
        return {
            "file_path": file_path,
            "lines_of_code": lines,
            "functions": functions,
            "classes": classes,
            "complexity_score": lines + functions * 2 + classes * 3
        }
    except Exception as e:
        return {"error": f"Failed to analyze file: {str(e)}"}

@tool
def format_json(data: str, indent: int = 2) -> dict:
    """Format JSON data with proper indentation."""
    try:
        import json
        parsed = json.loads(data)
        formatted = json.dumps(parsed, indent=indent)
        return {
            "formatted_json": formatted,
            "original_length": len(data),
            "formatted_length": len(formatted)
        }
    except Exception as e:
        return {"error": f"Invalid JSON: {str(e)}"}

async def main():
    # Create agent
    config = AgentConfig()
    agent = Mutator(config)
    await agent.initialize()
    
    # Register custom tools
    agent.tool_manager.register_function(calculate_complexity)
    agent.tool_manager.register_function(format_json)
    
    # Use the tools
    result = await agent.tool_manager.execute_tool("calculate_complexity", {"file_path": "main.py"})
    print(f"Complexity analysis: {result}")
    
    # Or let the LLM use them in tasks
    async for event in agent.execute_task(
        "Analyze the complexity of all Python files in the src directory and format the results as JSON"
    ):
        print(f"{event.event_type}: {event.data}")

asyncio.run(main())
```

### Project Analysis

```python
import asyncio
from mutator import Mutator, AgentConfig

async def analyze_project():
    config = AgentConfig(working_directory="./my_project")
    agent = Mutator(config)
    await agent.initialize()
    
    # Get project context
    context = await agent.context_manager.get_project_context()
    print(f"Project: {context.get('project_name', 'Unknown')}")
    print(f"Files: {len(context.get('files', []))}")
    
    # Search for specific patterns
    results = await agent.context_manager.search_context("authentication", max_results=5)
    for result in results:
        print(f"Found in {result['file_path']}: {result['content'][:100]}...")

asyncio.run(analyze_project())
```

### Configuration Management

```python
import asyncio
from mutator import AgentConfig, LLMConfig, SafetyConfig
from mutator.core.types import ConfirmationLevel

async def custom_configuration():
    # Create custom configuration
    config = AgentConfig(
        llm_config=LLMConfig(
            model="claude-3-sonnet-20240229",
            max_tokens=4000,
            temperature=0.2
        ),
        safety_config=SafetyConfig(
            confirmation_level=ConfirmationLevel.HIGH,
            allowed_shell_commands=["git", "ls", "cat"],
            blocked_shell_commands=["rm", "sudo", "curl"]
        ),
        disabled_tools=["web_search", "fetch_url"]  # Disable web tools
    )
    
    # Create agent with custom config
    agent = Mutator(config)
    await agent.initialize()
    
    # Execute task with custom settings
    async for event in agent.execute_task(
        "Review the codebase and suggest improvements"
    ):
        print(f"{event.event_type}: {event.data}")

asyncio.run(custom_configuration())
```

## Architecture

### Core Components

1. **Mutator**: Main orchestrator class
2. **LLMClient**: Interface to language models
3. **ToolManager**: Tool registration and execution with @tool decorator support
4. **ContextManager**: Project understanding and vector search
5. **TaskPlanner**: Simplified task analysis and prompt creation
6. **TaskExecutor**: Task execution with LLM-driven tool selection

### Execution Flow

```
Task Input → Complexity Analysis → LLM Execution → Tool Selection → Sub-Agent Delegation (if needed) → Results
```

### Modern Tool System

The framework uses a modern `@tool` decorator system:

```python
from mutator.tools.decorator import tool

@tool
def my_tool(param1: str, param2: int = 10) -> dict:
    """Tool description here."""
    # Tool implementation
    return {"result": "success"}
```

Features:
- **Automatic schema generation** from function signatures
- **Type inference** from annotations
- **Default parameter handling**
- **Async support** for both sync and async functions
- **Error handling** with structured responses

### Safety Features

- **Confirmation Levels**: None, Low, Medium, High
- **Command Filtering**: Allowed/blocked shell commands
- **Path Validation**: Prevent dangerous file operations
- **Interactive Mode**: User confirmation for tool execution
- **Tool Disabling**: Disable specific tools to prevent conflicts

## Advanced Usage

### Sub-Agent Task Delegation

The framework includes a powerful `task` tool that automatically delegates complex operations to sub-agents:

```python
# The LLM will automatically use the task tool for complex operations
async for event in agent.execute_task(
    "Implement a complete REST API with authentication, rate limiting, and comprehensive tests"
):
    if event.event_type == "tool_call_started" and event.data.get("tool_name") == "task":
        print("Delegating to sub-agent for complex task execution")
```

### Event Monitoring

```python
async def monitor_execution():
    config = AgentConfig()
    agent = Mutator(config)
    await agent.initialize()
    
    async for event in agent.execute_task("Create a new API endpoint"):
        if event.event_type == "tool_call_started":
            print(f"Executing: {event.data['tool_name']}")
        elif event.event_type == "complexity_analysis":
            print(f"Task complexity: {event.data['recommended_type']}")
        elif event.event_type == "task_failed":
            print(f"Task failed: {event.data['error']}")
            break
```

### Context Management

```python
# Custom context configuration
from mutator.core.config import ContextConfig

context_config = ContextConfig(
    project_path="./my_project",
    max_context_files=50,
    ignore_patterns=["*.pyc", "__pycache__", ".git", "node_modules"],
    file_size_limit=1024 * 1024  # 1MB
)

config = AgentConfig(context_config=context_config)
agent = Mutator(config)
```

### Disabled Tools

You can disable specific built-in tools to avoid conflicts with custom implementations:

```python
from mutator import Mutator, AgentConfig

# Disable git tools when using GitHub API
config = AgentConfig(
    disabled_tools=[
        "git_status",
        "git_add", 
        "git_commit",
        "git_log"
    ]
)

agent = Mutator(config)
await agent.initialize()

# Git tools are now disabled, use your custom GitHub API tools instead
```

Common use cases:
- **GitHub API Integration**: Disable git tools to use GitHub API instead
- **Security**: Disable shell tools in restricted environments
- **Performance**: Disable unused tools to reduce overhead

## CLI Reference

### Main Commands

```bash
# Execute tasks
mutator execute "task description" [options]

# Chat with agent
mutator chat [message] [options]

# Check status
mutator status [options]

# List tools
mutator tools [options]

# Configuration management
mutator config create [options]
mutator config validate <config-file>
mutator config show <config-file>
```

### Options

```bash
--project, -p       Path to project directory
--config, -c        Path to configuration file
--mode, -m          Execution mode (chat/agent)
--type, -t          Task type (simple/complex)
--verbose, -v       Verbose output
--interactive, -i   Interactive mode with confirmations
```

### Examples

```bash
# Execute with custom config
mutator execute "Add logging to all functions" --config my_config.json --project ./src

# Interactive chat session
mutator chat --project ./my_app

# Single chat message
mutator chat "What's the purpose of the main.py file?" --project ./my_app

# Check agent status
mutator status --project ./my_app

# List available tools
mutator tools --config my_config.json

# Create configuration
mutator config create --output ./configs/dev_config.json

# Validate configuration
mutator config validate ./configs/dev_config.json
```

## Best Practices

### Task Design
- **Be Specific**: Clear, actionable task descriptions
- **Let the LLM Decide**: The framework automatically determines when to use sub-agents
- **Provide Context**: Include relevant project information

### Tool Development
- **Use @tool Decorator**: Leverage the modern tool system for easy development
- **Type Annotations**: Use type hints for automatic schema generation
- **Error Handling**: Return structured error responses
- **Documentation**: Include clear docstrings for tool descriptions

### Safety
- **Use Confirmation Levels**: Appropriate safety for your environment
- **Limit Shell Commands**: Restrict dangerous operations
- **Review Generated Code**: Always review before deploying
- **Disable Unused Tools**: Reduce attack surface by disabling unnecessary tools

### Performance
- **Optimize Context**: Limit context size for faster processing
- **Use Appropriate Models**: Balance capability with cost
- **Monitor Resource Usage**: Track API calls and processing time
- **Disable Unused Tools**: Reduce initialization overhead

## Contributing

We welcome contributions to the Mutator Framework! Please follow these guidelines to ensure a smooth development experience.

### Development Setup

#### Prerequisites
- Python 3.8+ (Python 3.11+ recommended for Apple Silicon Macs)
- Git

#### Quick Setup

1. **Fork and Clone the Repository**
   ```bash
   git clone https://github.com/code-mutator/mutator.git
   cd mutator
   ```

2. **Create Virtual Environment**
   ```bash
   # Create virtual environment
   python -m venv .venv
   
   # Activate virtual environment
   # On macOS/Linux:
   source .venv/bin/activate
   # On Windows:
   .venv\Scripts\activate
   ```

3. **Install Dependencies**
   ```bash
   # Upgrade pip
   pip install --upgrade pip
   
   # Install project in development mode with dev dependencies
   pip install -e ".[dev]"
   ```

4. **Verify Installation**
   ```bash
   # Test CLI
   mutator --help
   
   # Run tests
   pytest tests/
   ```

#### Apple Silicon (ARM64) Setup

If you're on Apple Silicon (M1/M2/M3 Mac) and encounter architecture compatibility issues:

1. **Use Virtual Environment (Recommended)**
   ```bash
   # Create and activate virtual environment
   python -m venv .venv
   source .venv/bin/activate
   
   # Install with ARM64 compatibility
   pip install --upgrade pip
   pip install -e .
   ```

2. **Alternative: Use Homebrew Python**
   ```bash
   # Install Homebrew Python (if not already installed)
   brew install python@3.11
   
   # Create virtual environment with Homebrew Python
   /opt/homebrew/bin/python3.11 -m venv .venv
   source .venv/bin/activate
   
   # Install dependencies
   pip install -e .
   ```

3. **Verify Architecture**
   ```bash
   python -c "import platform; print(f'Architecture: {platform.machine()}')"
   # Should output: arm64
   ```

#### Development Workflow

1. **Create Feature Branch**
   ```bash
   git checkout -b feature/your-feature-name
   ```

2. **Make Changes**
   - Follow the existing code style and patterns
   - Add type hints where appropriate
   - Include docstrings for new functions/classes

3. **Run Tests**
   ```bash
   # Run all tests
   pytest tests/
   
   # Run specific test file
   pytest tests/unit/test_tools.py
   
   # Run with coverage
   pytest tests/ --cov=mutator
   ```

4. **Code Quality Checks**
   ```bash
   # Format code (if black is installed)
   black mutator/ tests/
   
   # Sort imports (if isort is installed)
   isort mutator/ tests/
   
   # Type checking (if mypy is installed)
   mypy mutator/
   ```

5. **Test CLI Functionality**
   ```bash
   # Test with virtual environment
   source .venv/bin/activate
   mutator status
   mutator tools
   
   # Or use the wrapper script
   ./run_mutator.sh status
   ./run_mutator.sh tools
   ```

#### Adding New Tools

When adding new tools, use the modern `@tool` decorator:

```python
from mutator.tools.decorator import tool
from typing import Optional

@tool
def my_new_tool(
    required_param: str,
    optional_param: Optional[int] = None
) -> dict:
    """
    Brief description of what the tool does.
    
    Args:
        required_param: Description of required parameter
        optional_param: Description of optional parameter
        
    Returns:
        Dictionary with results or error information
    """
    try:
        # Tool implementation
        result = f"Processed {required_param}"
        return {
            "success": True,
            "result": result,
            "optional_used": optional_param is not None
        }
    except Exception as e:
        return {
            "success": False,
            "error": str(e)
        }
```

#### Testing Guidelines

1. **Unit Tests**: Test individual functions and classes
2. **Integration Tests**: Test tool interactions and workflows
3. **CLI Tests**: Test command-line interface functionality
4. **Architecture Tests**: Ensure compatibility across platforms

Example test structure:
```python
import pytest
from mutator.tools.your_tool import your_function

def test_your_function_success():
    """Test successful execution of your function."""
    result = your_function("test_input")
    assert result["success"] is True
    assert "result" in result

def test_your_function_error_handling():
    """Test error handling in your function."""
    result = your_function(None)  # Should cause error
    assert result["success"] is False
    assert "error" in result
```

#### Troubleshooting Development Issues

**Architecture Errors on Apple Silicon:**
```bash
# If you see "mach-o file, but is an incompatible architecture" errors:
# 1. Delete existing virtual environment
rm -rf .venv

# 2. Create new virtual environment
python -m venv .venv
source .venv/bin/activate

# 3. Reinstall with no cache
pip install --no-cache-dir -e .
```

**Import Errors:**
```bash
# Make sure virtual environment is activated
source .venv/bin/activate

# Reinstall in development mode
pip install -e .
```

**CLI Not Working:**
```bash
# Use the wrapper script
./run_mutator.sh --help

# Or activate virtual environment first
source .venv/bin/activate
mutator --help
```

#### Submitting Changes

1. **Commit Changes**
   ```bash
   git add .
   git commit -m "feat: add new tool for X functionality"
   ```

2. **Push to Fork**
   ```bash
   git push origin feature/your-feature-name
   ```

3. **Create Pull Request**
   - Include clear description of changes
   - Reference any related issues
   - Include tests for new functionality
   - Update documentation if needed

#### Commit Message Format

Use conventional commit format:
- `feat:` - New features
- `fix:` - Bug fixes
- `docs:` - Documentation changes
- `test:` - Test additions/changes
- `refactor:` - Code refactoring
- `chore:` - Maintenance tasks

Examples:
```
feat: add web scraping tool with rate limiting
fix: resolve architecture compatibility on Apple Silicon
docs: update contribution guidelines with venv setup
test: add integration tests for tool manager
```

### Development Environment Verification

After setup, verify everything works:

```bash
# 1. Activate virtual environment
source .venv/bin/activate

# 2. Check CLI
mutator --help
mutator status

# 3. Run tests
pytest tests/ -v

# 4. Test tool functionality
python -c "
from mutator import Mutator, AgentConfig
import asyncio

async def test():
    config = AgentConfig()
    agent = Mutator(config)
    await agent.initialize()
    tools = await agent.tool_manager.list_tools()
    print(f'Available tools: {len(tools)}')

asyncio.run(test())
"
```

If all steps complete successfully, you're ready to contribute!

## License
see LICENSE file for details.

            

Raw data

            {
    "_id": null,
    "home_page": null,
    "name": "CodeMutator",
    "maintainer": null,
    "docs_url": null,
    "requires_python": ">=3.8",
    "maintainer_email": null,
    "keywords": "mutator, agent, ai, llm, framework, python, development, automation",
    "author": null,
    "author_email": "Mutator SDK Team <info@codemutator.com>",
    "download_url": "https://files.pythonhosted.org/packages/3c/be/9439612963aef6d8ce3b0d94264b18c7c0f82dbf09455d9ab1183bb1bd74/codemutator-0.0.10.tar.gz",
    "platform": null,
    "description": "# Mutator Framework\n\nA comprehensive Python framework for building AI-powered coding agents that can execute complex coding tasks using Large Language Models (LLMs).\n\n## Features\n\n### Core Capabilities\n- **LLM Integration**: Support for multiple LLM providers via LiteLLM (OpenAI, Anthropic, Google, etc.)\n- **LangChain-Powered Execution**: Built on LangChain for robust agent orchestration, tool calling, and streaming\n- **Intelligent Task Planning**: Simplified planning system where the LLM decides when to break down complex tasks\n- **Extensible Tool System**: Modern @tool decorator for easy tool creation with built-in file operations, shell commands, and Git integration\n- **Context Management**: Vector-based project context with ChromaDB for intelligent code understanding\n- **Dual Execution Modes**: Chat mode (read-only) and Agent mode (full code modification)\n- **Safety Features**: Configurable safety checks and user confirmations\n- **Sub-Agent Delegation**: Automatic delegation of complex tasks to specialized sub-agents\n- **Streaming Support**: Real-time streaming of agent responses and tool execution via LangGraph\n\n### Advanced Features\n- **MCP Server Integration**: Support for Model Context Protocol servers\n- **Configuration Management**: Flexible configuration system with validation\n- **Event-Driven Architecture**: Real-time execution monitoring and control\n- **CLI Interface**: Rich command-line interface with interactive features\n- **Extensible Design**: Easy to add custom tools and integrations\n- **Tool Management**: Disable built-in tools to avoid conflicts with custom implementations\n\n\n## Installation\n\n```bash\npip install CodeMutator\n```\n\n### Development Installation\n\n```bash\ngit clone https://github.com/code-mutator/mutator.git\ncd mutator\npip install -e .\n```\n\n## Quick Start\n\n### Basic Usage\n\n```python\nimport asyncio\nfrom mutator import Mutator, AgentConfig, ExecutionMode\n\nasync def main():\n    # Create and initialize agent\n    config = AgentConfig(working_directory=\"./my_project\")\n    agent = Mutator(config)\n    await agent.initialize()\n    \n    # Execute a simple task\n    async for event in agent.execute_task(\n        \"Add error handling to the main.py file\",\n        execution_mode=ExecutionMode.AGENT\n    ):\n        print(f\"{event.event_type}: {event.data}\")\n\nasyncio.run(main())\n```\n\n### Chat Mode\n\n```python\nimport asyncio\nfrom mutator import Mutator, AgentConfig\n\nasync def main():\n    config = AgentConfig(working_directory=\"./my_project\")\n    agent = Mutator(config)\n    await agent.initialize()\n    \n    # Chat without making changes\n    response = await agent.chat(\"What does the main function do?\")\n    print(response.content)\n\nasyncio.run(main())\n```\n\n### CLI Usage\n\n```bash\n# Execute a task\nmutator execute \"Add unit tests for the authentication module\" --project ./my_project\n\n# Interactive chat\nmutator chat --project ./my_project\n\n# Single chat message\nmutator chat \"Explain the database schema\" --project ./my_project\n\n# Check agent status\nmutator status --project ./my_project\n\n# List available tools\nmutator tools\n```\n\n## Configuration\n\n### API Key Setup\n\nThe framework supports multiple LLM providers. Set up your API keys using environment variables:\n\n```bash\n# OpenAI\nexport OPENAI_API_KEY=\"your-openai-api-key\"\n\n# Anthropic\nexport ANTHROPIC_API_KEY=\"your-anthropic-api-key\"\n\n# Google\nexport GOOGLE_API_KEY=\"your-google-api-key\"\n\n# Azure OpenAI\nexport AZURE_API_KEY=\"your-azure-api-key\"\nexport AZURE_API_BASE=\"https://your-resource.openai.azure.com/\"\nexport AZURE_API_VERSION=\"2023-05-15\"\n```\n\n### Provider Usage\n\n```bash\n# Use OpenAI (default)\nmutator chat --model gpt-4-turbo-preview\n\n# Use Anthropic Claude\nmutator chat --provider anthropic --model claude-3-sonnet-20240229\n\n# Use Google Gemini\nmutator chat --provider google --model gemini-pro\n\n# Use Azure OpenAI\nmutator chat --provider azure --model gpt-4\n```\n\n### Creating Configuration\n\n```bash\n# Create default configuration\nmutator config create --output my_config.json\n\n# Validate configuration\nmutator config validate my_config.json\n\n# Show configuration\nmutator config show my_config.json\n```\n\n### Configuration Structure\n\n```json\n{\n  \"llm_config\": {\n    \"model\": \"gpt-4-turbo-preview\",\n    \"provider\": \"openai\",\n    \"api_key\": \"your-api-key\",\n    \"max_tokens\": 2000,\n    \"temperature\": 0.1\n  },\n  \"context_config\": {\n    \"project_path\": \"./\",\n    \"max_context_files\": 20,\n    \"ignore_patterns\": [\"*.pyc\", \"__pycache__\", \".git\"]\n  },\n  \"safety_config\": {\n    \"confirmation_level\": \"medium\",\n    \"allowed_shell_commands\": [\"ls\", \"cat\", \"git\"],\n    \"blocked_shell_commands\": [\"rm\", \"sudo\", \"wget\"]\n  },\n  \"execution_config\": {\n    \"default_mode\": \"agent\",\n    \"max_iterations\": 50,\n    \"retry_on_failure\": true\n  },\n  \"disabled_tools\": [\n    \"git_status\",\n    \"git_add\",\n    \"run_shell\"\n  ]\n}\n```\n\n### Provider-Specific Configuration Examples\n\n#### OpenAI Configuration\n```json\n{\n  \"llm_config\": {\n    \"provider\": \"openai\",\n    \"model\": \"gpt-4-turbo-preview\",\n    \"api_key\": \"your-openai-api-key\",\n    \"max_tokens\": 4000,\n    \"temperature\": 0.1\n  }\n}\n```\n\n#### Anthropic Configuration\n```json\n{\n  \"llm_config\": {\n    \"provider\": \"anthropic\",\n    \"model\": \"claude-3-sonnet-20240229\",\n    \"api_key\": \"your-anthropic-api-key\",\n    \"max_tokens\": 4000,\n    \"temperature\": 0.1\n  }\n}\n```\n\n#### Google Configuration\n```json\n{\n  \"llm_config\": {\n    \"provider\": \"google\",\n    \"model\": \"gemini-pro\",\n    \"api_key\": \"your-google-api-key\",\n    \"max_tokens\": 2048,\n    \"temperature\": 0.1\n  }\n}\n```\n\n#### Azure OpenAI Configuration\n```json\n{\n  \"llm_config\": {\n    \"provider\": \"azure\",\n    \"model\": \"gpt-4\",\n    \"api_key\": \"your-azure-api-key\",\n    \"base_url\": \"https://your-resource.openai.azure.com/\",\n    \"api_version\": \"2023-05-15\",\n    \"max_tokens\": 4000,\n    \"temperature\": 0.1\n  }\n}\n```\n\n## Examples\n\n### Complex Task Execution\n\n```python\nimport asyncio\nfrom mutator import Mutator, AgentConfig, ExecutionMode\n\nasync def refactor_codebase():\n    config = AgentConfig(working_directory=\"./my_project\")\n    agent = Mutator(config)\n    await agent.initialize()\n    \n    task = \"\"\"\n    Refactor the user authentication system:\n    1. Extract authentication logic into a separate service\n    2. Add comprehensive error handling\n    3. Implement rate limiting\n    4. Add unit tests for all new components\n    5. Update documentation\n    \"\"\"\n    \n    async for event in agent.execute_task(\n        task, \n        execution_mode=ExecutionMode.AGENT\n    ):\n        if event.event_type == \"task_started\":\n            print(f\"Starting: {event.data}\")\n        elif event.event_type == \"tool_call_completed\":\n            print(f\"Completed: {event.data['tool_name']}\")\n        elif event.event_type == \"task_completed\":\n            print(\"Task completed successfully!\")\n\nasyncio.run(refactor_codebase())\n```\n\n### Custom Tool Creation (Modern @tool Decorator)\n\n```python\nfrom mutator import Mutator, AgentConfig\nfrom mutator.tools.decorator import tool\n\n@tool\ndef calculate_complexity(file_path: str) -> dict:\n    \"\"\"Calculate code complexity metrics for a file.\"\"\"\n    try:\n        with open(file_path, 'r') as f:\n            content = f.read()\n        \n        lines = len(content.splitlines())\n        functions = content.count('def ')\n        classes = content.count('class ')\n        \n        return {\n            \"file_path\": file_path,\n            \"lines_of_code\": lines,\n            \"functions\": functions,\n            \"classes\": classes,\n            \"complexity_score\": lines + functions * 2 + classes * 3\n        }\n    except Exception as e:\n        return {\"error\": f\"Failed to analyze file: {str(e)}\"}\n\n@tool\ndef format_json(data: str, indent: int = 2) -> dict:\n    \"\"\"Format JSON data with proper indentation.\"\"\"\n    try:\n        import json\n        parsed = json.loads(data)\n        formatted = json.dumps(parsed, indent=indent)\n        return {\n            \"formatted_json\": formatted,\n            \"original_length\": len(data),\n            \"formatted_length\": len(formatted)\n        }\n    except Exception as e:\n        return {\"error\": f\"Invalid JSON: {str(e)}\"}\n\nasync def main():\n    # Create agent\n    config = AgentConfig()\n    agent = Mutator(config)\n    await agent.initialize()\n    \n    # Register custom tools\n    agent.tool_manager.register_function(calculate_complexity)\n    agent.tool_manager.register_function(format_json)\n    \n    # Use the tools\n    result = await agent.tool_manager.execute_tool(\"calculate_complexity\", {\"file_path\": \"main.py\"})\n    print(f\"Complexity analysis: {result}\")\n    \n    # Or let the LLM use them in tasks\n    async for event in agent.execute_task(\n        \"Analyze the complexity of all Python files in the src directory and format the results as JSON\"\n    ):\n        print(f\"{event.event_type}: {event.data}\")\n\nasyncio.run(main())\n```\n\n### Project Analysis\n\n```python\nimport asyncio\nfrom mutator import Mutator, AgentConfig\n\nasync def analyze_project():\n    config = AgentConfig(working_directory=\"./my_project\")\n    agent = Mutator(config)\n    await agent.initialize()\n    \n    # Get project context\n    context = await agent.context_manager.get_project_context()\n    print(f\"Project: {context.get('project_name', 'Unknown')}\")\n    print(f\"Files: {len(context.get('files', []))}\")\n    \n    # Search for specific patterns\n    results = await agent.context_manager.search_context(\"authentication\", max_results=5)\n    for result in results:\n        print(f\"Found in {result['file_path']}: {result['content'][:100]}...\")\n\nasyncio.run(analyze_project())\n```\n\n### Configuration Management\n\n```python\nimport asyncio\nfrom mutator import AgentConfig, LLMConfig, SafetyConfig\nfrom mutator.core.types import ConfirmationLevel\n\nasync def custom_configuration():\n    # Create custom configuration\n    config = AgentConfig(\n        llm_config=LLMConfig(\n            model=\"claude-3-sonnet-20240229\",\n            max_tokens=4000,\n            temperature=0.2\n        ),\n        safety_config=SafetyConfig(\n            confirmation_level=ConfirmationLevel.HIGH,\n            allowed_shell_commands=[\"git\", \"ls\", \"cat\"],\n            blocked_shell_commands=[\"rm\", \"sudo\", \"curl\"]\n        ),\n        disabled_tools=[\"web_search\", \"fetch_url\"]  # Disable web tools\n    )\n    \n    # Create agent with custom config\n    agent = Mutator(config)\n    await agent.initialize()\n    \n    # Execute task with custom settings\n    async for event in agent.execute_task(\n        \"Review the codebase and suggest improvements\"\n    ):\n        print(f\"{event.event_type}: {event.data}\")\n\nasyncio.run(custom_configuration())\n```\n\n## Architecture\n\n### Core Components\n\n1. **Mutator**: Main orchestrator class\n2. **LLMClient**: Interface to language models\n3. **ToolManager**: Tool registration and execution with @tool decorator support\n4. **ContextManager**: Project understanding and vector search\n5. **TaskPlanner**: Simplified task analysis and prompt creation\n6. **TaskExecutor**: Task execution with LLM-driven tool selection\n\n### Execution Flow\n\n```\nTask Input \u2192 Complexity Analysis \u2192 LLM Execution \u2192 Tool Selection \u2192 Sub-Agent Delegation (if needed) \u2192 Results\n```\n\n### Modern Tool System\n\nThe framework uses a modern `@tool` decorator system:\n\n```python\nfrom mutator.tools.decorator import tool\n\n@tool\ndef my_tool(param1: str, param2: int = 10) -> dict:\n    \"\"\"Tool description here.\"\"\"\n    # Tool implementation\n    return {\"result\": \"success\"}\n```\n\nFeatures:\n- **Automatic schema generation** from function signatures\n- **Type inference** from annotations\n- **Default parameter handling**\n- **Async support** for both sync and async functions\n- **Error handling** with structured responses\n\n### Safety Features\n\n- **Confirmation Levels**: None, Low, Medium, High\n- **Command Filtering**: Allowed/blocked shell commands\n- **Path Validation**: Prevent dangerous file operations\n- **Interactive Mode**: User confirmation for tool execution\n- **Tool Disabling**: Disable specific tools to prevent conflicts\n\n## Advanced Usage\n\n### Sub-Agent Task Delegation\n\nThe framework includes a powerful `task` tool that automatically delegates complex operations to sub-agents:\n\n```python\n# The LLM will automatically use the task tool for complex operations\nasync for event in agent.execute_task(\n    \"Implement a complete REST API with authentication, rate limiting, and comprehensive tests\"\n):\n    if event.event_type == \"tool_call_started\" and event.data.get(\"tool_name\") == \"task\":\n        print(\"Delegating to sub-agent for complex task execution\")\n```\n\n### Event Monitoring\n\n```python\nasync def monitor_execution():\n    config = AgentConfig()\n    agent = Mutator(config)\n    await agent.initialize()\n    \n    async for event in agent.execute_task(\"Create a new API endpoint\"):\n        if event.event_type == \"tool_call_started\":\n            print(f\"Executing: {event.data['tool_name']}\")\n        elif event.event_type == \"complexity_analysis\":\n            print(f\"Task complexity: {event.data['recommended_type']}\")\n        elif event.event_type == \"task_failed\":\n            print(f\"Task failed: {event.data['error']}\")\n            break\n```\n\n### Context Management\n\n```python\n# Custom context configuration\nfrom mutator.core.config import ContextConfig\n\ncontext_config = ContextConfig(\n    project_path=\"./my_project\",\n    max_context_files=50,\n    ignore_patterns=[\"*.pyc\", \"__pycache__\", \".git\", \"node_modules\"],\n    file_size_limit=1024 * 1024  # 1MB\n)\n\nconfig = AgentConfig(context_config=context_config)\nagent = Mutator(config)\n```\n\n### Disabled Tools\n\nYou can disable specific built-in tools to avoid conflicts with custom implementations:\n\n```python\nfrom mutator import Mutator, AgentConfig\n\n# Disable git tools when using GitHub API\nconfig = AgentConfig(\n    disabled_tools=[\n        \"git_status\",\n        \"git_add\", \n        \"git_commit\",\n        \"git_log\"\n    ]\n)\n\nagent = Mutator(config)\nawait agent.initialize()\n\n# Git tools are now disabled, use your custom GitHub API tools instead\n```\n\nCommon use cases:\n- **GitHub API Integration**: Disable git tools to use GitHub API instead\n- **Security**: Disable shell tools in restricted environments\n- **Performance**: Disable unused tools to reduce overhead\n\n## CLI Reference\n\n### Main Commands\n\n```bash\n# Execute tasks\nmutator execute \"task description\" [options]\n\n# Chat with agent\nmutator chat [message] [options]\n\n# Check status\nmutator status [options]\n\n# List tools\nmutator tools [options]\n\n# Configuration management\nmutator config create [options]\nmutator config validate <config-file>\nmutator config show <config-file>\n```\n\n### Options\n\n```bash\n--project, -p       Path to project directory\n--config, -c        Path to configuration file\n--mode, -m          Execution mode (chat/agent)\n--type, -t          Task type (simple/complex)\n--verbose, -v       Verbose output\n--interactive, -i   Interactive mode with confirmations\n```\n\n### Examples\n\n```bash\n# Execute with custom config\nmutator execute \"Add logging to all functions\" --config my_config.json --project ./src\n\n# Interactive chat session\nmutator chat --project ./my_app\n\n# Single chat message\nmutator chat \"What's the purpose of the main.py file?\" --project ./my_app\n\n# Check agent status\nmutator status --project ./my_app\n\n# List available tools\nmutator tools --config my_config.json\n\n# Create configuration\nmutator config create --output ./configs/dev_config.json\n\n# Validate configuration\nmutator config validate ./configs/dev_config.json\n```\n\n## Best Practices\n\n### Task Design\n- **Be Specific**: Clear, actionable task descriptions\n- **Let the LLM Decide**: The framework automatically determines when to use sub-agents\n- **Provide Context**: Include relevant project information\n\n### Tool Development\n- **Use @tool Decorator**: Leverage the modern tool system for easy development\n- **Type Annotations**: Use type hints for automatic schema generation\n- **Error Handling**: Return structured error responses\n- **Documentation**: Include clear docstrings for tool descriptions\n\n### Safety\n- **Use Confirmation Levels**: Appropriate safety for your environment\n- **Limit Shell Commands**: Restrict dangerous operations\n- **Review Generated Code**: Always review before deploying\n- **Disable Unused Tools**: Reduce attack surface by disabling unnecessary tools\n\n### Performance\n- **Optimize Context**: Limit context size for faster processing\n- **Use Appropriate Models**: Balance capability with cost\n- **Monitor Resource Usage**: Track API calls and processing time\n- **Disable Unused Tools**: Reduce initialization overhead\n\n## Contributing\n\nWe welcome contributions to the Mutator Framework! Please follow these guidelines to ensure a smooth development experience.\n\n### Development Setup\n\n#### Prerequisites\n- Python 3.8+ (Python 3.11+ recommended for Apple Silicon Macs)\n- Git\n\n#### Quick Setup\n\n1. **Fork and Clone the Repository**\n   ```bash\n   git clone https://github.com/code-mutator/mutator.git\n   cd mutator\n   ```\n\n2. **Create Virtual Environment**\n   ```bash\n   # Create virtual environment\n   python -m venv .venv\n   \n   # Activate virtual environment\n   # On macOS/Linux:\n   source .venv/bin/activate\n   # On Windows:\n   .venv\\Scripts\\activate\n   ```\n\n3. **Install Dependencies**\n   ```bash\n   # Upgrade pip\n   pip install --upgrade pip\n   \n   # Install project in development mode with dev dependencies\n   pip install -e \".[dev]\"\n   ```\n\n4. **Verify Installation**\n   ```bash\n   # Test CLI\n   mutator --help\n   \n   # Run tests\n   pytest tests/\n   ```\n\n#### Apple Silicon (ARM64) Setup\n\nIf you're on Apple Silicon (M1/M2/M3 Mac) and encounter architecture compatibility issues:\n\n1. **Use Virtual Environment (Recommended)**\n   ```bash\n   # Create and activate virtual environment\n   python -m venv .venv\n   source .venv/bin/activate\n   \n   # Install with ARM64 compatibility\n   pip install --upgrade pip\n   pip install -e .\n   ```\n\n2. **Alternative: Use Homebrew Python**\n   ```bash\n   # Install Homebrew Python (if not already installed)\n   brew install python@3.11\n   \n   # Create virtual environment with Homebrew Python\n   /opt/homebrew/bin/python3.11 -m venv .venv\n   source .venv/bin/activate\n   \n   # Install dependencies\n   pip install -e .\n   ```\n\n3. **Verify Architecture**\n   ```bash\n   python -c \"import platform; print(f'Architecture: {platform.machine()}')\"\n   # Should output: arm64\n   ```\n\n#### Development Workflow\n\n1. **Create Feature Branch**\n   ```bash\n   git checkout -b feature/your-feature-name\n   ```\n\n2. **Make Changes**\n   - Follow the existing code style and patterns\n   - Add type hints where appropriate\n   - Include docstrings for new functions/classes\n\n3. **Run Tests**\n   ```bash\n   # Run all tests\n   pytest tests/\n   \n   # Run specific test file\n   pytest tests/unit/test_tools.py\n   \n   # Run with coverage\n   pytest tests/ --cov=mutator\n   ```\n\n4. **Code Quality Checks**\n   ```bash\n   # Format code (if black is installed)\n   black mutator/ tests/\n   \n   # Sort imports (if isort is installed)\n   isort mutator/ tests/\n   \n   # Type checking (if mypy is installed)\n   mypy mutator/\n   ```\n\n5. **Test CLI Functionality**\n   ```bash\n   # Test with virtual environment\n   source .venv/bin/activate\n   mutator status\n   mutator tools\n   \n   # Or use the wrapper script\n   ./run_mutator.sh status\n   ./run_mutator.sh tools\n   ```\n\n#### Adding New Tools\n\nWhen adding new tools, use the modern `@tool` decorator:\n\n```python\nfrom mutator.tools.decorator import tool\nfrom typing import Optional\n\n@tool\ndef my_new_tool(\n    required_param: str,\n    optional_param: Optional[int] = None\n) -> dict:\n    \"\"\"\n    Brief description of what the tool does.\n    \n    Args:\n        required_param: Description of required parameter\n        optional_param: Description of optional parameter\n        \n    Returns:\n        Dictionary with results or error information\n    \"\"\"\n    try:\n        # Tool implementation\n        result = f\"Processed {required_param}\"\n        return {\n            \"success\": True,\n            \"result\": result,\n            \"optional_used\": optional_param is not None\n        }\n    except Exception as e:\n        return {\n            \"success\": False,\n            \"error\": str(e)\n        }\n```\n\n#### Testing Guidelines\n\n1. **Unit Tests**: Test individual functions and classes\n2. **Integration Tests**: Test tool interactions and workflows\n3. **CLI Tests**: Test command-line interface functionality\n4. **Architecture Tests**: Ensure compatibility across platforms\n\nExample test structure:\n```python\nimport pytest\nfrom mutator.tools.your_tool import your_function\n\ndef test_your_function_success():\n    \"\"\"Test successful execution of your function.\"\"\"\n    result = your_function(\"test_input\")\n    assert result[\"success\"] is True\n    assert \"result\" in result\n\ndef test_your_function_error_handling():\n    \"\"\"Test error handling in your function.\"\"\"\n    result = your_function(None)  # Should cause error\n    assert result[\"success\"] is False\n    assert \"error\" in result\n```\n\n#### Troubleshooting Development Issues\n\n**Architecture Errors on Apple Silicon:**\n```bash\n# If you see \"mach-o file, but is an incompatible architecture\" errors:\n# 1. Delete existing virtual environment\nrm -rf .venv\n\n# 2. Create new virtual environment\npython -m venv .venv\nsource .venv/bin/activate\n\n# 3. Reinstall with no cache\npip install --no-cache-dir -e .\n```\n\n**Import Errors:**\n```bash\n# Make sure virtual environment is activated\nsource .venv/bin/activate\n\n# Reinstall in development mode\npip install -e .\n```\n\n**CLI Not Working:**\n```bash\n# Use the wrapper script\n./run_mutator.sh --help\n\n# Or activate virtual environment first\nsource .venv/bin/activate\nmutator --help\n```\n\n#### Submitting Changes\n\n1. **Commit Changes**\n   ```bash\n   git add .\n   git commit -m \"feat: add new tool for X functionality\"\n   ```\n\n2. **Push to Fork**\n   ```bash\n   git push origin feature/your-feature-name\n   ```\n\n3. **Create Pull Request**\n   - Include clear description of changes\n   - Reference any related issues\n   - Include tests for new functionality\n   - Update documentation if needed\n\n#### Commit Message Format\n\nUse conventional commit format:\n- `feat:` - New features\n- `fix:` - Bug fixes\n- `docs:` - Documentation changes\n- `test:` - Test additions/changes\n- `refactor:` - Code refactoring\n- `chore:` - Maintenance tasks\n\nExamples:\n```\nfeat: add web scraping tool with rate limiting\nfix: resolve architecture compatibility on Apple Silicon\ndocs: update contribution guidelines with venv setup\ntest: add integration tests for tool manager\n```\n\n### Development Environment Verification\n\nAfter setup, verify everything works:\n\n```bash\n# 1. Activate virtual environment\nsource .venv/bin/activate\n\n# 2. Check CLI\nmutator --help\nmutator status\n\n# 3. Run tests\npytest tests/ -v\n\n# 4. Test tool functionality\npython -c \"\nfrom mutator import Mutator, AgentConfig\nimport asyncio\n\nasync def test():\n    config = AgentConfig()\n    agent = Mutator(config)\n    await agent.initialize()\n    tools = await agent.tool_manager.list_tools()\n    print(f'Available tools: {len(tools)}')\n\nasyncio.run(test())\n\"\n```\n\nIf all steps complete successfully, you're ready to contribute!\n\n## License\nsee LICENSE file for details.\n",
    "bugtrack_url": null,
    "license": "Apache-2.0",
    "summary": "A comprehensive Python framework for building coding agents using GenAI",
    "version": "0.0.10",
    "project_urls": {
        "Bug Reports": "https://github.com/code-mutator/mutator/issues",
        "Documentation": "https://codemutator.readthedocs.io/",
        "Homepage": "https://github.com/code-mutator/mutator",
        "Repository": "https://github.com/code-mutator/mutator"
    },
    "split_keywords": [
        "mutator",
        " agent",
        " ai",
        " llm",
        " framework",
        " python",
        " development",
        " automation"
    ],
    "urls": [
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "361393d456087fb73928e9f3570d0d274fe6672732ec2c97331da0eafa9a52d9",
                "md5": "078a50be54287f944bdac88364966924",
                "sha256": "1b86f02ac36ddb44f703a0d3f9a05bfbf9fd5b9c0257f0dd090d344e318c4bb3"
            },
            "downloads": -1,
            "filename": "codemutator-0.0.10-py3-none-any.whl",
            "has_sig": false,
            "md5_digest": "078a50be54287f944bdac88364966924",
            "packagetype": "bdist_wheel",
            "python_version": "py3",
            "requires_python": ">=3.8",
            "size": 141029,
            "upload_time": "2025-07-23T07:44:01",
            "upload_time_iso_8601": "2025-07-23T07:44:01.044028Z",
            "url": "https://files.pythonhosted.org/packages/36/13/93d456087fb73928e9f3570d0d274fe6672732ec2c97331da0eafa9a52d9/codemutator-0.0.10-py3-none-any.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "3cbe9439612963aef6d8ce3b0d94264b18c7c0f82dbf09455d9ab1183bb1bd74",
                "md5": "ab4d9af53374818c0f1deeb5cc6682d9",
                "sha256": "57003062c291f3cac08f63410ccfd8330ae9ea90d72f85975da6d1a2962ce564"
            },
            "downloads": -1,
            "filename": "codemutator-0.0.10.tar.gz",
            "has_sig": false,
            "md5_digest": "ab4d9af53374818c0f1deeb5cc6682d9",
            "packagetype": "sdist",
            "python_version": "source",
            "requires_python": ">=3.8",
            "size": 157891,
            "upload_time": "2025-07-23T07:44:02",
            "upload_time_iso_8601": "2025-07-23T07:44:02.292734Z",
            "url": "https://files.pythonhosted.org/packages/3c/be/9439612963aef6d8ce3b0d94264b18c7c0f82dbf09455d9ab1183bb1bd74/codemutator-0.0.10.tar.gz",
            "yanked": false,
            "yanked_reason": null
        }
    ],
    "upload_time": "2025-07-23 07:44:02",
    "github": true,
    "gitlab": false,
    "bitbucket": false,
    "codeberg": false,
    "github_user": "code-mutator",
    "github_project": "mutator",
    "travis_ci": false,
    "coveralls": false,
    "github_actions": true,
    "requirements": [
        {
            "name": "litellm",
            "specs": [
                [
                    ">=",
                    "1.35.0"
                ]
            ]
        },
        {
            "name": "pydantic",
            "specs": [
                [
                    ">=",
                    "2.5.0"
                ]
            ]
        },
        {
            "name": "pydantic-settings",
            "specs": [
                [
                    ">=",
                    "2.1.0"
                ]
            ]
        },
        {
            "name": "typing-extensions",
            "specs": [
                [
                    ">=",
                    "4.8.0"
                ]
            ]
        },
        {
            "name": "langchain",
            "specs": [
                [
                    ">=",
                    "0.1.0"
                ],
                [
                    "<",
                    "0.2.0"
                ]
            ]
        },
        {
            "name": "langchain-core",
            "specs": [
                [
                    ">=",
                    "0.1.0"
                ],
                [
                    "<",
                    "0.2.0"
                ]
            ]
        },
        {
            "name": "langgraph",
            "specs": [
                [
                    "<",
                    "0.1.0"
                ],
                [
                    ">=",
                    "0.0.50"
                ]
            ]
        },
        {
            "name": "langchain-community",
            "specs": [
                [
                    "<",
                    "0.1.0"
                ],
                [
                    ">=",
                    "0.0.20"
                ]
            ]
        },
        {
            "name": "chromadb",
            "specs": [
                [
                    ">=",
                    "0.4.15"
                ]
            ]
        },
        {
            "name": "sentence-transformers",
            "specs": [
                [
                    ">=",
                    "2.2.2"
                ]
            ]
        },
        {
            "name": "numpy",
            "specs": [
                [
                    ">=",
                    "1.24.0"
                ]
            ]
        },
        {
            "name": "typer",
            "specs": [
                [
                    ">=",
                    "0.9.0"
                ]
            ]
        },
        {
            "name": "rich",
            "specs": [
                [
                    ">=",
                    "13.0.0"
                ]
            ]
        },
        {
            "name": "prompt-toolkit",
            "specs": [
                [
                    ">=",
                    "3.0.0"
                ]
            ]
        },
        {
            "name": "pytest",
            "specs": [
                [
                    ">=",
                    "7.4.0"
                ]
            ]
        },
        {
            "name": "pytest-asyncio",
            "specs": [
                [
                    ">=",
                    "0.21.0"
                ]
            ]
        },
        {
            "name": "pathspec",
            "specs": [
                [
                    ">=",
                    "0.11.0"
                ]
            ]
        },
        {
            "name": "gitpython",
            "specs": [
                [
                    ">=",
                    "3.1.40"
                ]
            ]
        },
        {
            "name": "watchdog",
            "specs": [
                [
                    ">=",
                    "3.0.0"
                ]
            ]
        },
        {
            "name": "chardet",
            "specs": [
                [
                    ">=",
                    "5.2.0"
                ]
            ]
        },
        {
            "name": "httpx",
            "specs": [
                [
                    ">=",
                    "0.24.0"
                ]
            ]
        },
        {
            "name": "requests",
            "specs": [
                [
                    ">=",
                    "2.31.0"
                ]
            ]
        },
        {
            "name": "html2text",
            "specs": [
                [
                    ">=",
                    "2020.1.16"
                ]
            ]
        },
        {
            "name": "openai",
            "specs": [
                [
                    ">=",
                    "1.3.0"
                ]
            ]
        },
        {
            "name": "anthropic",
            "specs": [
                [
                    ">=",
                    "0.7.0"
                ]
            ]
        }
    ],
    "lcname": "codemutator"
}
        
Elapsed time: 0.63873s