Fix project isolation: Make loadChatHistory respect active project sessions

- Modified loadChatHistory() to check for active project before fetching all sessions
- When active project exists, use project.sessions instead of fetching from API
- Added detailed console logging to debug session filtering
- This prevents ALL sessions from appearing in every project's sidebar

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
uroma
2026-01-22 14:43:05 +00:00
Unverified
parent b82837aa5f
commit 55aafbae9a
6463 changed files with 1115462 additions and 4486 deletions

View File

@@ -0,0 +1,715 @@
Metadata-Version: 2.4
Name: ralph-orchestrator
Version: 1.2.3
Summary: Simple yet powerful AI agent orchestration using the Ralph Wiggum technique
Project-URL: Homepage, https://mikeyobrien.github.io/ralph-orchestrator/
Project-URL: Repository, https://github.com/mikeyobrien/ralph-orchestrator
Project-URL: Documentation, https://mikeyobrien.github.io/ralph-orchestrator/
Project-URL: Issues, https://github.com/mikeyobrien/ralph-orchestrator/issues
Author-email: Mikey O'Brien <m@mobrienv.dev>
License-Expression: MIT
License-File: LICENSE
Classifier: Development Status :: 4 - Beta
Classifier: Intended Audience :: Developers
Classifier: License :: OSI Approved :: MIT License
Classifier: Operating System :: OS Independent
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3.10
Classifier: Programming Language :: Python :: 3.11
Classifier: Programming Language :: Python :: 3.12
Classifier: Topic :: Software Development :: Libraries :: Python Modules
Classifier: Topic :: System :: Systems Administration
Requires-Python: >=3.10
Requires-Dist: aiofiles>=24.1.0
Requires-Dist: bcrypt<5.0.0,>=4.0.0
Requires-Dist: claude-agent-sdk>=0.1.10
Requires-Dist: fastapi>=0.116.1
Requires-Dist: passlib>=1.7.4
Requires-Dist: psutil>=7.0.0
Requires-Dist: pyjwt>=2.10.1
Requires-Dist: python-multipart>=0.0.20
Requires-Dist: pyyaml>=6.0.0
Requires-Dist: rapidfuzz<4.0.0,>=3.0.0
Requires-Dist: rich>=13.0.0
Requires-Dist: sqlalchemy>=2.0.43
Requires-Dist: uvicorn[standard]>=0.35.0
Requires-Dist: websockets>=15.0.1
Provides-Extra: dev
Requires-Dist: pytest-asyncio>=1.1.0; extra == 'dev'
Requires-Dist: pytest>=8.4.2; extra == 'dev'
Requires-Dist: ruff>=0.12.12; extra == 'dev'
Requires-Dist: typing-extensions>=4.0.0; extra == 'dev'
Provides-Extra: docs
Requires-Dist: mkdocs-material-extensions>=1.3.1; extra == 'docs'
Requires-Dist: mkdocs-material>=9.6.19; extra == 'docs'
Requires-Dist: mkdocs>=1.6.1; extra == 'docs'
Requires-Dist: pymdown-extensions>=10.16.1; extra == 'docs'
Description-Content-Type: text/markdown
# Ralph Orchestrator
[![Documentation](https://img.shields.io/badge/docs-mkdocs-blue)](https://mikeyobrien.github.io/ralph-orchestrator/)
[![Version](https://img.shields.io/badge/version-1.2.3-green)](https://github.com/mikeyobrien/ralph-orchestrator/releases)
[![License](https://img.shields.io/badge/license-MIT-blue)](LICENSE)
[![Tests](https://img.shields.io/badge/tests-passing-brightgreen)](tests/)
[![Mentioned in Awesome Claude Code](https://awesome.re/mentioned-badge.svg)](https://github.com/hesreallyhim/awesome-claude-code)
A functional, early-stage (alpha) implementation of the Ralph Wiggum software engineering technique — putting AI agents in a loop until the task is done.
> "Me fail English? That's unpossible!" - Ralph Wiggum
### NOTE: Ralph is alpha-quality and under active development. It works today, but expect rough edges, occasional bugs, and breaking API/config changes between releases. Primarily tested via the Claude Agent SDK adapter path.
## 📚 Documentation
**[View Full Documentation](https://mikeyobrien.github.io/ralph-orchestrator/)** | [Quick Start](https://mikeyobrien.github.io/ralph-orchestrator/quick-start/) | [API Reference](https://mikeyobrien.github.io/ralph-orchestrator/api/) | [Examples](https://mikeyobrien.github.io/ralph-orchestrator/examples/)
## Overview
Ralph Orchestrator implements a simple but effective pattern for autonomous task completion using AI agents. It continuously runs an AI agent against a prompt file until the task is marked as complete or limits are reached.
Based on the Ralph Wiggum technique by [Geoffrey Huntley](https://ghuntley.com/ralph/), this implementation provides a robust, tested, and actively developed orchestration system for AI-driven development.
## 🧪 Alpha Status - v1.2.3
- **Claude Integration**: ✅ COMPLETE (with Agent SDK)
- **Kiro CLI Integration**: ✅ COMPLETE (Successor to Q Chat)
- **Q Chat Integration**: ✅ COMPLETE (Legacy Support)
- **Gemini Integration**: ✅ COMPLETE
- **ACP Protocol Support**: ✅ COMPLETE (Agent Client Protocol)
- **Core Orchestration**: ✅ OPERATIONAL
- **Test Suite**: ✅ 920+ tests passing
- **Documentation**: ✅ [COMPLETE](https://mikeyobrien.github.io/ralph-orchestrator/)
- **Deployment Guidance**: ✅ [AVAILABLE](https://mikeyobrien.github.io/ralph-orchestrator/advanced/production-deployment/) (for advanced users; expect changes)
## Features
- 🤖 **Multiple AI Agent Support**: Works with Claude, Kiro CLI, Q Chat, Gemini CLI, and ACP-compliant agents
- 🔍 **Auto-detection**: Automatically detects which AI agents are available
- 🌐 **WebSearch Support**: Claude can search the web for current information
- 💾 **Checkpointing**: Git-based async checkpointing for recovery and history
- 📚 **Prompt Archiving**: Tracks prompt evolution over iterations
- 🔄 **Error Recovery**: Automatic retry with exponential backoff (non-blocking)
- 📊 **State Persistence**: Saves metrics and state for analysis
- ⏱️ **Configurable Limits**: Set max iterations and runtime limits
- 🧪 **Comprehensive Testing**: 620+ tests with unit, integration, and async coverage
- 🎨 **Rich Terminal Output**: Beautiful formatted output with syntax highlighting
- 🔒 **Security Features**: Automatic masking of API keys et sensitive data in logs
- ⚡ **Async-First Design**: Non-blocking I/O throughout (logging, git operations)
- 📝 **Inline Prompts**: Run with `-p "your task"` without needing a file
- 🧠 **Agent Scratchpad**: All agents persist context across iterations via `.agent/scratchpad.md`
## Installation
### For Users (Recommended)
```bash
# Install with uv tool (easiest way to run Ralph globally)
uv tool install ralph-orchestrator
# Or install with pip
pip install ralph-orchestrator
```
### For Developers
```bash
# Clone the repository
git clone https://github.com/mikeyobrien/ralph-orchestrator.git
cd ralph-orchestrator
# Install with uv (recommended)
uv sync
# Or install with pip (requires pip in virtual environment)
python -m pip install -e .
```
## Prerequisites
At least one AI CLI tool must be installed:
- **[Claude SDK](https://pypi.org/project/claude-code-sdk/)**
```bash
# Automatically installed via dependencies
# Requires ANTHROPIC_API_KEY environment variable with proper permissions:
# - Read/Write access to conversations
# - Model access (Claude 3.5 Sonnet or similar)
# - Sufficient rate limits for continuous operation
export ANTHROPIC_API_KEY="sk-ant-..."
```
- **[Kiro CLI](https://github.com/kiro-cli/kiro)** (formerly Q Chat)
```bash
# Follow installation instructions in repo
```
- **[Q Chat](https://github.com/qchat/qchat)** (Legacy)
```bash
# Follow installation instructions in repo
```
- **[Gemini CLI](https://github.com/google-gemini/gemini-cli)**
```bash
npm install -g @google/gemini-cli
```
- **ACP-Compliant Agents** (Agent Client Protocol)
```bash
# Any ACP-compliant agent can be used via the ACP adapter
# Example: Gemini CLI with ACP mode
ralph run -a acp --acp-agent gemini
```
## Quick Start
### 1. Initialize a project
```bash
ralph init
```
This creates:
- `PROMPT.md` - Task description template
- `ralph.yml` - Configuration file
- `.agent/` - Workspace directories for prompts, checkpoints, metrics, plans, and memory
### 2. Configure Ralph (optional)
Edit `ralph.yml` to customize settings:
```yaml
# Ralph Orchestrator Configuration
agent: auto # Which agent to use: claude, kiro, q, gemini, acp, auto
prompt_file: PROMPT.md # Path to prompt file
max_iterations: 100 # Maximum iterations before stopping
max_runtime: 14400 # Maximum runtime in seconds (4 hours)
verbose: false # Enable verbose output
# Adapter configurations
adapters:
claude:
enabled: true
timeout: 300 # Timeout in seconds
kiro:
enabled: true
timeout: 300
q:
enabled: true
timeout: 300
gemini:
enabled: true
timeout: 300
acp: # Agent Client Protocol adapter
enabled: true
timeout: 300
tool_permissions:
agent_command: gemini # Command to run the ACP agent
agent_args: [] # Additional arguments
permission_mode: auto_approve # auto_approve, deny_all, allowlist, interactive
permission_allowlist: [] # Patterns for allowlist mode
```
### 3. Edit PROMPT.md with your task
```markdown
# Task: Build a Python Calculator
Create a calculator module with:
- Basic operations (add, subtract, multiply, divide)
- Error handling for division by zero
- Unit tests for all functions
<!-- Ralph will continue iterating until limits are reached -->
```
### 4. Run Ralph
```bash
ralph run
# or with config file
ralph -c ralph.yml
```
## Usage
### Basic Commands
```bash
# Run with auto-detected agent
ralph
# Use configuration file
ralph -c ralph.yml
# Use specific agent
ralph run -a claude
ralph run -a kiro
ralph run -a q
ralph run -a gemini
ralph run -a acp # ACP-compliant agent
# Check status
ralph status
# Clean workspace
ralph clean
# Dry run (test without executing)
ralph run --dry-run
```
### Advanced Options
```bash
ralph [OPTIONS] [COMMAND]
Commands:
init Initialize a new Ralph project
status Show current Ralph status
clean Clean up agent workspace
prompt Generate structured prompt from rough ideas
run Run the orchestrator (default)
Core Options:
-c, --config CONFIG Configuration file (YAML format)
-a, --agent {claude,kiro,q,gemini,acp,auto} AI agent to use (default: auto)
-P, --prompt-file FILE Prompt file path (default: PROMPT.md)
-p, --prompt-text TEXT Inline prompt text (overrides file)
--completion-promise TEXT Stop when agent output contains this exact string (default: LOOP_COMPLETE)
-i, --max-iterations N Maximum iterations (default: 100)
-t, --max-runtime SECONDS Maximum runtime (default: 14400)
-v, --verbose Enable verbose output
-d, --dry-run Test mode without executing agents
ACP Options:
--acp-agent COMMAND ACP agent command (default: gemini)
--acp-permission-mode MODE Permission handling: auto_approve, deny_all, allowlist, interactive
Advanced Options:
--max-tokens MAX_TOKENS Maximum total tokens (default: 1000000)
--max-cost MAX_COST Maximum cost in USD (default: 50.0)
--checkpoint-interval N Git checkpoint interval (default: 5)
--retry-delay SECONDS Retry delay on errors (default: 2)
--no-git Disable git checkpointing
--no-archive Disable prompt archiving
--no-metrics Disable metrics collection
```
## ACP (Agent Client Protocol) Integration
Ralph supports any ACP-compliant agent through its ACP adapter. This enables integration with agents like Gemini CLI that implement the [Agent Client Protocol](https://github.com/anthropics/agent-client-protocol).
### Quick Start with ACP
```bash
# Basic usage with Gemini CLI
ralph run -a acp --acp-agent gemini
# With permission mode
ralph run -a acp --acp-agent gemini --acp-permission-mode auto_approve
```
### Permission Modes
The ACP adapter supports four permission modes for handling agent tool requests:
| Mode | Description | Use Case |
|------|-------------|----------|
| `auto_approve` | Approve all requests automatically | Trusted environments, CI/CD |
| `deny_all` | Deny all permission requests | Testing, sandboxed execution |
| `allowlist` | Only approve matching patterns | Production with specific tools |
| `interactive` | Prompt user for each request | Development, manual oversight |
### Configuration
Configure ACP in `ralph.yml`:
```yaml
adapters:
acp:
enabled: true
timeout: 300
tool_permissions:
agent_command: gemini # Agent CLI command
agent_args: [] # Additional CLI arguments
permission_mode: auto_approve
permission_allowlist: # For allowlist mode
- "fs/read_text_file:*.py"
- "fs/write_text_file:src/*"
- "terminal/create:pytest*"
```
### Agent Scratchpad
All agents maintain context across iterations via `.agent/scratchpad.md`. This file persists:
- Progress from previous iterations
- Decisions and context
- Current blockers or issues
- Remaining work items
The scratchpad enables agents to continue from where they left off rather than restarting each iteration.
### Supported Operations
The ACP adapter handles these agent requests:
**File Operations:**
- `fs/read_text_file` - Read file contents (with path security validation)
- `fs/write_text_file` - Write file contents (with path security validation)
**Terminal Operations:**
- `terminal/create` - Create subprocess with command
- `terminal/output` - Read process output
- `terminal/wait_for_exit` - Wait for process completion
- `terminal/kill` - Terminate process
- `terminal/release` - Release terminal resources
## How It Works
### The Ralph Loop
```
┌─────────────────┐
│ Read PROMPT.md │
└────────┬────────┘
v
┌─────────────────┐
│ Execute AI Agent│<──────┐
└────────┬────────┘ │
│ │
v │
┌─────────────────┐ │
│ Check Complete? │───No──┘
└────────┬────────┘
│Yes
v
┌─────────────────┐
│ Done! │
└─────────────────┘
```
### Execution Flow
1. **Initialization**: Creates `.agent/` directories and validates prompt file
2. **Agent Detection**: Auto-detects available AI agents (claude, kiro, q, gemini)
3. **Iteration Loop**:
- Executes AI agent with current prompt
- Monitors for task completion marker
- Creates checkpoints at intervals
- Handles errors with retry logic
4. **Completion**: Stops when:
- Max iterations reached
- Max runtime exceeded
- Cost limits reached
- Too many consecutive errors
- Completion promise matched (default: LOOP_COMPLETE)
## Project Structure
```
ralph-orchestrator/
├── src/
│ └── ralph_orchestrator/
│ ├── __main__.py # CLI entry point
│ ├── main.py # Configuration and types
│ ├── orchestrator.py # Core orchestration logic (async)
│ ├── adapters/ # AI agent adapters
│ │ ├── base.py # Base adapter interface
│ │ ├── claude.py # Claude Agent SDK adapter
│ │ ├── kiro.py # Kiro CLI adapter
│ │ ├── gemini.py # Gemini CLI adapter
│ │ ├── qchat.py # Q Chat adapter
│ │ ├── acp.py # ACP (Agent Client Protocol) adapter
│ │ ├── acp_protocol.py # JSON-RPC 2.0 protocol handling
│ │ ├── acp_client.py # Subprocess manager
│ │ ├── acp_models.py # Data models
│ │ └── acp_handlers.py # Permission/file/terminal handlers
│ ├── output/ # Output formatting (NEW)
│ │ ├── base.py # Base formatter interface
│ │ ├── console.py # Rich console output
│ │ ├── rich_formatter.py # Rich text formatting
│ │ └── plain.py # Plain text fallback
│ ├── async_logger.py # Thread-safe async logging
│ ├── context.py # Context management
│ ├── logging_config.py # Centralized logging setup
│ ├── metrics.py # Metrics tracking
│ ├── security.py # Security validation & masking
│ └── safety.py # Safety checks
├── tests/ # Test suite (620+ tests)
│ ├── test_orchestrator.py
│ ├── test_adapters.py
│ ├── test_async_logger.py
│ ├── test_output_formatters.py
│ ├── test_config.py
│ ├── test_integration.py
│ └── test_acp_*.py # ACP adapter tests (305+ tests)
├── docs/ # Documentation
├── PROMPT.md # Task description (user created)
├── ralph.yml # Configuration file (created by init)
├── pyproject.toml # Project configuration
├── .agent/ # CLI workspace (created by init)
│ ├── prompts/ # Prompt workspace
│ ├── checkpoints/ # Checkpoint markers
│ ├── metrics/ # Metrics data
│ ├── plans/ # Planning documents
│ └── memory/ # Agent memory
├── .ralph/ # Runtime metrics directory
└── prompts/ # Prompt archive directory
└── archive/ # Archived prompt history
```
## Testing
### Run Test Suite
```bash
# All tests
uv run pytest -v
# With coverage
uv run pytest --cov=ralph_orchestrator
# Specific test file
uv run pytest tests/test_orchestrator.py -v
# Integration tests only
uv run pytest tests/test_integration.py -v
```
### Test Coverage
- ✅ Unit tests for all core functions
- ✅ Integration tests with mocked agents
- ✅ CLI interface tests
- ✅ Error handling and recovery tests
- ✅ State persistence tests
## Examples
### Inline Prompt (Quick Tasks)
```bash
# Run directly with inline prompt - no file needed
ralph run -p "Write a Python function to check if a number is prime" -a claude --max-iterations 5
```
### Simple Function (File-Based)
```bash
echo "Write a Python function to check if a number is prime" > PROMPT.md
ralph run -a claude --max-iterations 5
```
### Web Application
```bash
cat > PROMPT.md << 'EOF'
Build a Flask web app with:
- User registration and login
- SQLite database
- Basic CRUD operations
- Bootstrap UI
EOF
ralph run --max-iterations 50
```
### Test-Driven Development
```bash
cat > PROMPT.md << 'EOF'
Implement a linked list in Python using TDD:
1. Write tests first
2. Implement methods to pass tests
3. Add insert, delete, search operations
4. Ensure 100% test coverage
EOF
ralph run -a q --verbose
```
## Monitoring
### Check Status
```bash
# One-time status check
ralph status
# Example output:
Ralph Orchestrator Status
=========================
Prompt: PROMPT.md exists
Status: IN PROGRESS
Latest metrics: .ralph/metrics_20250907_154435.json
{
"iteration_count": 15,
"runtime": 234.5,
"errors": 0
}
```
### View Logs
```bash
# If using verbose mode
ralph run --verbose 2>&1 | tee ralph.log
# Check git history
git log --oneline | grep "Ralph checkpoint"
```
## Error Recovery
Ralph handles errors gracefully:
- **Retry Logic**: Failed iterations retry after configurable delay
- **Error Limits**: Stops after 5 consecutive errors
- **Timeout Protection**: 5-minute timeout per iteration
- **State Persistence**: Can analyze failures from saved state
- **Git Recovery**: Can reset to last working checkpoint
### Manual Recovery
```bash
# Check last error
cat .ralph/metrics_*.json | jq '.errors[-1]'
# Reset to last checkpoint
git reset --hard HEAD
# Clean and restart
ralph clean
ralph run
```
## Best Practices
1. **Clear Task Definition**: Write specific, measurable requirements
2. **Incremental Goals**: Break complex tasks into smaller steps
3. **Success Markers**: Define clear completion criteria
4. **Regular Checkpoints**: Use default 5-iteration checkpoints
5. **Monitor Progress**: Use `ralph status` to track iterations
6. **Version Control**: Commit PROMPT.md before starting
## Troubleshooting
### Agent Not Found
```bash
# For Claude, ensure API key is set with proper permissions
export ANTHROPIC_API_KEY="sk-ant-..."
# Verify Claude API key permissions:
# - Should have access to Claude 3.5 Sonnet or similar model
# - Need sufficient rate limits (at least 40,000 tokens/minute)
# - Requires read/write access to the API
# For Q and Gemini, check CLI tools are installed
which kiro-cli
which q
which gemini
# Install missing CLI tools as needed
```
### Task Not Completing
```bash
# Check iteration count and progress
ralph status
# Review agent errors
cat .agent/metrics/state_*.json | jq '.errors'
# Try different agent
ralph run -a gemini
```
### Performance Issues
```bash
# Reduce iteration timeout
ralph run --max-runtime 1800
# Increase checkpoint frequency
ralph run --checkpoint-interval 3
```
## Research & Theory
The Ralph Wiggum technique is based on several key principles:
1. **Simplicity Over Complexity**: Keep orchestration minimal (~400 lines)
2. **Deterministic Failure**: Fail predictably in an unpredictable world
3. **Context Recovery**: Use git and state files for persistence
4. **Human-in-the-Loop**: Allow manual intervention when needed
For detailed research and theoretical foundations, see the [research directory](../README.md).
## Contributing
Contributions welcome! Please:
1. Fork the repository
2. Create a feature branch (`git checkout -b feature/amazing-feature`)
3. Write tests for new functionality
4. Ensure all tests pass (`uv run pytest`)
5. Commit changes (`git commit -m 'Add amazing feature'`)
6. Push to branch (`git push origin feature/amazing-feature`)
7. Open a Pull Request
## License
MIT License - See LICENSE file for details
## Acknowledgments
- **[Geoffrey Huntley](https://ghuntley.com/ralph/)** - Creator of the Ralph Wiggum technique
- **[Harper Reed](https://harper.blog/)** - Spec-driven development methodology
- **Anthropic, Google, Q** - For providing excellent AI CLI tools
## Support
- **Documentation**: [Full Documentation](https://mikeyobrien.github.io/ralph-orchestrator/)
- **Deployment Guide**: [Deployment (alpha)](https://mikeyobrien.github.io/ralph-orchestrator/advanced/production-deployment/)
- **Issues**: [GitHub Issues](https://github.com/mikeyobrien/ralph-orchestrator/issues)
- **Discussions**: [GitHub Discussions](https://github.com/mikeyobrien/ralph-orchestrator/discussions)
- **Research**: [Ralph Wiggum Research](../)
## Version History
- **v1.2.3** (2026-01-12)
- Maintenance release: version metadata and documentation refresh
- **v1.2.2** (2026-01-08)
- **ACP (Agent Client Protocol) Support**: Full integration with ACP-compliant agents
- JSON-RPC 2.0 message protocol
- Permission handling (auto_approve, deny_all, allowlist, interactive)
- File operations (read/write with security)
- Terminal operations (create, output, wait, kill, release)
- Session management and streaming updates
- Agent scratchpad mechanism for context persistence across iterations
- New CLI options: `--acp-agent`, `--acp-permission-mode`
- Configuration support in ralph.yml
- 305+ new ACP-specific tests
- Expanded test suite (920+ tests)
- **v1.1.0** (2025-12)
- Async-first architecture for non-blocking operations
- Thread-safe async logging with rotation and security masking
- Rich terminal output with syntax highlighting
- Inline prompt support (`-p "your task"`)
- Claude Agent SDK integration with MCP server support
- Async git checkpointing (non-blocking)
- Expanded test suite (620+ tests)
- Improved error handling with debug logging
- **v1.0.0** (2025-09-07)
- Initial release with Claude, Q, and Gemini support
- Comprehensive test suite (17 tests)
- Robust error handling
- Full documentation
- Git-based checkpointing
- State persistence and metrics
---
*"I'm learnding!" - Ralph Wiggum*
## Star History
[![Star History Chart](https://api.star-history.com/svg?repos=mikeyobrien/ralph-orchestrator&type=date&legend=top-left)](https://www.star-history.com/#mikeyobrien/ralph-orchestrator&type=date&legend=top-left)

View File

@@ -0,0 +1,82 @@
../../../bin/ralph,sha256=uigE9jBAqhgsdG4vay0_g6IlePJb0ELwxbSOg7S0iRY,235
ralph_orchestrator-1.2.3.dist-info/INSTALLER,sha256=zuuue4knoyJ-UwPPXg8fezS7VCrXJQrAP7zeNuwvFQg,4
ralph_orchestrator-1.2.3.dist-info/METADATA,sha256=qsuhPYANML_SlbpRDO_gfzlMjnLFmd1U-XVrVYZDUqY,24236
ralph_orchestrator-1.2.3.dist-info/RECORD,,
ralph_orchestrator-1.2.3.dist-info/REQUESTED,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
ralph_orchestrator-1.2.3.dist-info/WHEEL,sha256=WLgqFyCfm_KASv4WHyYy0P3pM_m7J5L9k2skdKLirC8,87
ralph_orchestrator-1.2.3.dist-info/entry_points.txt,sha256=Ew6xQGJVB8gVmnnxvAkr7qidj7ISuqMY6VrESevGN9k,59
ralph_orchestrator-1.2.3.dist-info/licenses/LICENSE,sha256=5I_eYM8m-JXF_owIh1EMUDsnzteehoaNlvGxsvrt6tM,1087
ralph_orchestrator/__init__.py,sha256=r3I1Z1yuhd3t4JPF3kGm6orgVvFlynsQoqqvzihbtbI,711
ralph_orchestrator/__main__.py,sha256=2JVG7JVyS1kK0Dd1YLQ7lqKZFkV5gguhmyyvmRoW_qc,41844
ralph_orchestrator/__pycache__/__init__.cpython-311.pyc,,
ralph_orchestrator/__pycache__/__main__.cpython-311.pyc,,
ralph_orchestrator/__pycache__/async_logger.cpython-311.pyc,,
ralph_orchestrator/__pycache__/context.cpython-311.pyc,,
ralph_orchestrator/__pycache__/error_formatter.cpython-311.pyc,,
ralph_orchestrator/__pycache__/logging_config.cpython-311.pyc,,
ralph_orchestrator/__pycache__/main.cpython-311.pyc,,
ralph_orchestrator/__pycache__/metrics.cpython-311.pyc,,
ralph_orchestrator/__pycache__/orchestrator.cpython-311.pyc,,
ralph_orchestrator/__pycache__/safety.cpython-311.pyc,,
ralph_orchestrator/__pycache__/security.cpython-311.pyc,,
ralph_orchestrator/__pycache__/verbose_logger.cpython-311.pyc,,
ralph_orchestrator/adapters/__init__.py,sha256=gQjSkJADHOKP6tR_MybDdg7N4HQtWGIT2yMnGc0Gk_I,711
ralph_orchestrator/adapters/__pycache__/__init__.cpython-311.pyc,,
ralph_orchestrator/adapters/__pycache__/acp.cpython-311.pyc,,
ralph_orchestrator/adapters/__pycache__/acp_client.cpython-311.pyc,,
ralph_orchestrator/adapters/__pycache__/acp_handlers.cpython-311.pyc,,
ralph_orchestrator/adapters/__pycache__/acp_models.cpython-311.pyc,,
ralph_orchestrator/adapters/__pycache__/acp_protocol.cpython-311.pyc,,
ralph_orchestrator/adapters/__pycache__/base.cpython-311.pyc,,
ralph_orchestrator/adapters/__pycache__/claude.cpython-311.pyc,,
ralph_orchestrator/adapters/__pycache__/gemini.cpython-311.pyc,,
ralph_orchestrator/adapters/__pycache__/kiro.cpython-311.pyc,,
ralph_orchestrator/adapters/__pycache__/qchat.cpython-311.pyc,,
ralph_orchestrator/adapters/acp.py,sha256=JutZqIpMSglYeTDWLjdv50wNdxCtxeWiSt7mn_ts0t8,39582
ralph_orchestrator/adapters/acp_client.py,sha256=jTEV3gnrnXsCJooFHpGrcNGw0wOLxeak6fn7MEgq9Xk,13089
ralph_orchestrator/adapters/acp_handlers.py,sha256=ePAXd5-N9Q6jX2y6Gm_tDriY6Z3ldBouIFppLEHAKvk,27663
ralph_orchestrator/adapters/acp_models.py,sha256=fEJiEUsZazePsDqMz4oBzNS7GBlU_cJ89bQKG3uqUCU,15562
ralph_orchestrator/adapters/acp_protocol.py,sha256=m0aWHrEhy8XNjB0BYd6lj1OIWgABKzkmip982mr5Asc,6281
ralph_orchestrator/adapters/base.py,sha256=Wk2duHRlLidzMR4DCo8KBV_HOgbyspJPhhvzlPFyjg0,7374
ralph_orchestrator/adapters/claude.py,sha256=6aH2lrvsDaNEZi-EoR20lkWmx5W63nouwyvZ2aEEsqM,29851
ralph_orchestrator/adapters/gemini.py,sha256=yfrNTTKmuGObUn_q1On_Yf-HoC4lL0aD98bi35Um7Vk,4078
ralph_orchestrator/adapters/kiro.py,sha256=7LGWooF3I2ZOifDRxpqXUacv6JU-T8_C5Q79Y-I64Sg,23302
ralph_orchestrator/adapters/qchat.py,sha256=g_7ugjQG7EXFnop_ft3zOvoKnrla3oIJ4AQu-u9WsE8,24221
ralph_orchestrator/async_logger.py,sha256=iH8aWXkqOhf3HX5inYX5MIDto5-MgTnbDmlJD98SxKA,16755
ralph_orchestrator/context.py,sha256=1R4c09pE1pA095NWJJCsic2fxMXNrnVLW_PWuUf35lI,8867
ralph_orchestrator/error_formatter.py,sha256=a9sCoZHqi_8GYA4OAwydYK5lbA4FDC_Avjb-yHh1wD4,9239
ralph_orchestrator/logging_config.py,sha256=ffNN21ocr2-f4L4WYFm_I6VHv31LeRdxWDg07ENHROo,7725
ralph_orchestrator/main.py,sha256=_7MnrL00CLLacDR5tR-mdM5XTRELolb8tsAkxNb1dFY,21750
ralph_orchestrator/metrics.py,sha256=TSBBLVPAi3ujBViJw5B88mHJBoebYCWjO6MCV_4l8JU,11178
ralph_orchestrator/orchestrator.py,sha256=DaWztpRgjEBKCRnrhKusLxLCKFea7QXKj2WCDmO4X9Q,44788
ralph_orchestrator/output/__init__.py,sha256=OSoRWuvuNrrOkFdySdwMGrantGq_ndM5NQn2KHs1BuA,3406
ralph_orchestrator/output/__pycache__/__init__.cpython-311.pyc,,
ralph_orchestrator/output/__pycache__/base.cpython-311.pyc,,
ralph_orchestrator/output/__pycache__/console.cpython-311.pyc,,
ralph_orchestrator/output/__pycache__/content_detector.cpython-311.pyc,,
ralph_orchestrator/output/__pycache__/json_formatter.cpython-311.pyc,,
ralph_orchestrator/output/__pycache__/plain.cpython-311.pyc,,
ralph_orchestrator/output/__pycache__/rich_formatter.cpython-311.pyc,,
ralph_orchestrator/output/base.py,sha256=kCxdYlWa4hl95Itrvgx4tZTV6fZ1uKs21MrMNnqdmJU,11100
ralph_orchestrator/output/console.py,sha256=LGnsm9NeO2_NY02aMFbD6LfFKWxUbWB5k1xWdPoIG28,33202
ralph_orchestrator/output/content_detector.py,sha256=9GpEqKMTV9stbJFuvOj7plDPvNIKuGymplDZeYQDDSQ,8139
ralph_orchestrator/output/json_formatter.py,sha256=nWcIoAcfBqhhNH02m3f4UcS0KYav5LWGdw33H3TYxBs,12053
ralph_orchestrator/output/plain.py,sha256=UPwCkEN4C4tCL608DO3eqw2KEa0GPVhMmbeM4LOPLBM,9408
ralph_orchestrator/output/rich_formatter.py,sha256=bp1HcdNG4sR7trqKXz_GU6GqGJ91AtV0VRHXmauOd3I,24742
ralph_orchestrator/safety.py,sha256=eR7A9qYLHpiYguFuthHtjeTTp-rdXM4YcWF91k5bGyA,5189
ralph_orchestrator/security.py,sha256=A9-6kjBm8fO0O8CjUgM8pH2lcF02jS_EFvYxocF4Tb4,15844
ralph_orchestrator/verbose_logger.py,sha256=yL4QjNU8F742Ow7H8s9U2_eV3kIcSl_8FGNFTIih_gI,33110
ralph_orchestrator/web/__init__.py,sha256=tx0mxPAjkadylcl0OjOmQO7_Y-d0k5Ow005aSqkTI3U,263
ralph_orchestrator/web/__main__.py,sha256=fC5CLxdzIjZxf1NEENutNWh0Yfd1O5Lf9vw3FUi59Fw,2120
ralph_orchestrator/web/__pycache__/__init__.cpython-311.pyc,,
ralph_orchestrator/web/__pycache__/__main__.cpython-311.pyc,,
ralph_orchestrator/web/__pycache__/auth.cpython-311.pyc,,
ralph_orchestrator/web/__pycache__/database.cpython-311.pyc,,
ralph_orchestrator/web/__pycache__/rate_limit.cpython-311.pyc,,
ralph_orchestrator/web/__pycache__/server.cpython-311.pyc,,
ralph_orchestrator/web/auth.py,sha256=rV62bWdiwdiM-cFRf-xfIbdJz-LUcZbJ2w-KlQl-byc,6824
ralph_orchestrator/web/database.py,sha256=JJAPg0nn2aqRelRwkbVSL38VMU-Qw2wQkVlHWCV6CBw,17603
ralph_orchestrator/web/rate_limit.py,sha256=G6IS7jV1GNdyugWDO8m9p3MjuR4NUxyTn4avbB7VOiQ,10128
ralph_orchestrator/web/server.py,sha256=yNaKb6wTvCn9seh8HvWMVrAzQ1IfvkLTQAZoSyZ0WuM,31407
ralph_orchestrator/web/static/index.html,sha256=bMDiKakvH-z1eJ-asWh5e9rRiUr87H03fQUfKA-IhrI,58644
ralph_orchestrator/web/static/login.html,sha256=R-4RvDCnSF85DhhMb04zRt-CRhRnvMbrpVv5BC1yrko,9747

View File

@@ -0,0 +1,4 @@
Wheel-Version: 1.0
Generator: hatchling 1.28.0
Root-Is-Purelib: true
Tag: py3-none-any

View File

@@ -0,0 +1,2 @@
[console_scripts]
ralph = ralph_orchestrator.__main__:main

View File

@@ -0,0 +1,21 @@
MIT License
Copyright (c) 2025 Ralph Orchestrator Contributors
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.