# rcoder **Repository Path**: nuwax/rcoder ## Basic Information - **Project Name**: rcoder - **Description**: 通过 Agent Client Protocol 调用 AI - **Primary Language**: Rust - **License**: MIT - **Default Branch**: main - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-03-24 - **Last Updated**: 2026-03-28 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # RCoder - AI驱动的开发平台 > [English](README_EN.md) RCoder 是一个基于 Rust 构建的现代化 AI 驱动开发平台,通过 **SACP (Symposium ACP)** 协议实现与多种 AI 代理的统一交互。项目采用**微服务架构**,支持 **Docker 容器化部署**和 **gRPC 高性能通信**。 ## ✨ 核心特性 - 🔁 **反向代理**:集成 Cloudflare Pingora,高性能端口路由 `/proxy/{port}/{path}` - 🌐 **HTTP API**:基于 Axum 的现代化 REST API 与统一 SSE 进度流 - 🤖 **多代理支持**:统一接入 Claude Code、Codex 等 AI 代理 - 🐳 **容器化架构**:每个项目对应独立的 Docker 容器,实现隔离和资源管理 - ⚡ **gRPC 通信**:基于 Tonic 的高性能内部通信,支持 Server Streaming - 🔧 **配置系统**:命令行 > 环境变量 > 配置文件,多层配置优先级 - 📜 **API 文档**:自动化 API 文档(utoipa + Swagger UI) - 📊 **可观测性**:Tracing + OpenTelemetry 完整链路追踪 + Pyroscope 性能分析 - 🖥️ **Computer Agent**:容器化 AI 代理环境,集成 VNC 远程桌面、音频流和 IME 输入 ## 🏠 架构概览 ### 整体架构 ``` 外部客户端 (HTTP/SSE) ↓ RCoder (HTTP API Server + Docker 管理 + gRPC 客户端) ↓ gRPC (Chat, CancelSession, SubscribeProgress) Agent Runner (gRPC Server in Docker) ↓ Server Streaming (实时进度事件) RCoder (转换为 SSE) ↓ 外部客户端 (SSE) ``` ### 核心组件 - **RCoder 主服务**:Axum HTTP 服务 + 容器管理 + gRPC 客户端 - **Agent Runner**:独立的 AI 代理运行环境(Docker 容器内),提供 gRPC 服务 - **Pingora 代理**:高性能反向代理服务,支持端口路由 - **Docker Manager**:全局容器生命周期管理 ### 🛠️ 技术栈 | 组件类型 | 技术选型 | 说明 | |----------|---------|------| | **编程语言** | Rust 2024 Edition | 现代化系统编程语言 | | **HTTP 框架** | Axum + Tower | 高性能异步 Web 框架 | | **RPC 框架** | Tonic (gRPC) | 高性能 RPC 通信 | | **AI 协议** | SACP + MCP | 支持多种 AI 代理协议 | | **容器化** | Docker + Bollard | 容器管理和编排 | | **数据库** | DuckDB + SQLx | 嵌入式分析数据库 | | **日志系统** | Tracing + OpenTelemetry | 结构化日志和分布式追踪 | | **性能分析** | Pyroscope | 持续性能剖析 | | **命令行** | clap | 现代化命令行参数解析 | ## 🚀 快速开始 ### 📝 环境要求 - Rust: 1.75+(2024 Edition) - Docker(用于容器化部署) - 可选:Claude Code CLI(用于 Claude 代理) ### 🛠️ 安装与运行 #### 本地开发 ```bash # 克隆仓库 git clone https://github.com/your-org/rcoder.git cd rcoder # 本地编译 cargo build --workspace # 运行主服务 cargo run --bin rcoder # 指定端口和项目目录 cargo run --bin rcoder -- --port 8087 --projects-dir ./my-projects ``` #### Docker 开发模式(推荐) ```bash # 构建镜像并启动容器 make dev-build # 构建 Docker 镜像 make dev-up # 启动开发容器 # 代码修改后重启 make dev-restart # 重新构建并重启 # 查看日志 make dev-logs # 停止容器 make dev-down ``` #### 启用反向代理 ```bash # 启用 Pingora 反向代理 cargo run --bin rcoder -- --enable-proxy --proxy-port 8080 # 指定默认后端端口 cargo run --bin rcoder -- --enable-proxy --proxy-port 8080 --backend-port 3000 ``` ### 💻 命令行参数 | 参数 | 短参数 | 说明 | 示例 | |------|--------|------|------| | `--port` | `-p` | 设置主服务端口 | `--port 8087` | | `--projects-dir` | `-d` | 设置项目工作目录 | `--projects-dir ./projects` | | `--enable-proxy` | 无 | 启用 Pingora 反向代理 | `--enable-proxy` | | `--proxy-port` | 无 | 设置 Pingora 监听端口 | `--proxy-port 8080` | | `--backend-port` | 无 | 默认后端端口 | `--backend-port 3000` | ```bash # 查看所有参数 cargo run --bin rcoder -- --help ``` ## 📚 API 文档 ### 🔁 Pingora 反向代理 Pingora 是项目内置的高性能反向代理。 ```bash # 启用代理 cargo run --bin rcoder -- --enable-proxy --proxy-port 8080 # 代理请求示例(转发到 5173 端口) curl "http://127.0.0.1:8080/proxy/5173/page/123/" ``` ### 🏥 核心端点 | 端点 | 方法 | 说明 | |------|------|------| | `/health` | GET | 健康检查 | | `/chat` | POST | 发送聊天消息给 AI 代理 | | `/agent/progress/{session_id}` | GET (SSE) | 获取实时进度流 | | `/agent/session/cancel` | POST | 取消正在执行的任务 | | `/agent/stop` | POST | 停止 Agent | | `/agent/status/{project_id}` | GET | 查询 Agent 状态 | | `/api/docs` | GET | Swagger UI API 文档 | ### gRPC 服务 (Agent Runner) | 方法 | 类型 | 说明 | |------|------|------| | `Chat` | Unary | 发送聊天请求 | | `SubscribeProgress` | Server Streaming | 订阅进度事件流 | | `CancelSession` | Unary | 取消会话任务 | | `GetStatus` | Unary | 查询 Agent 状态 | | `StopAgent` | Unary | 停止 Agent | | `GetContainerStatus` | Unary | 查询容器状态 | | `GetVncStatus` | Unary | 查询 VNC 服务状态 | ### 🖥️ Computer Agent 端点 Computer Agent 提供容器化的 AI 代理环境,支持 VNC 远程桌面、音频流和 IME 输入。每个用户对应独立的 Docker 容器,多个项目可共享同一容器。 #### 核心接口 | 端点 | 方法 | 说明 | |------|------|------| | `/computer/chat` | POST | 发送聊天消息到 Computer Agent | | `/computer/progress/{session_id}` | GET (SSE) | 获取实时进度流 | | `/computer/agent/stop` | POST | 停止指定项目的 Agent(不销毁容器) | | `/computer/agent/status` | POST | 查询 Agent 状态(alive/idle/busy) | | `/computer/agent/session/cancel` | POST | 取消正在执行的会话 | #### 桌面与媒体代理(通过 Pingora) | 端点 | 方法 | 说明 | |------|------|------| | `/computer/desktop/{user_id}/{project_id}` | GET | 获取 VNC 桌面访问地址 | | `/computer/vnc/{user_id}/{project_id}/{*path}` | GET | VNC/noVNC 代理(端口 6080) | | `/computer/audio/{user_id}/{project_id}/{*path}` | GET | 音频流代理(端口 6089/6090) | | `/computer/ime/{user_id}/{project_id}/{*path}` | GET | IME 输入法代理(端口 6091) | #### Pod/容器管理 | 端点 | 方法 | 说明 | |------|------|------| | `/computer/pod/count` | GET | 容器数量统计(按服务类型分组) | | `/computer/pod/list` | GET | 列出所有容器详情(支持分页 `?limit=100`) | | `/computer/pod/ensure` | POST | 确保容器存在(幂等,不启动 Agent) | | `/computer/pod/keepalive` | POST | 刷新容器活跃时间(防止自动清理) | | `/computer/pod/restart` | POST | 重启容器(销毁并重建) | | `/computer/pod/status` | GET | 查询容器状态(`?user_id=xxx`) | | `/computer/pod/vnc-status` | GET | 查询 VNC 服务就绪状态 | #### Computer Chat 请求示例 ```bash curl -X POST http://localhost:8087/computer/chat \ -H "Content-Type: application/json" \ -d '{ "user_id": "user-123", "project_id": "my-project", "prompt": "帮我创建一个 Python Web 应用" }' ``` ### 🚑 健康检查 ```bash curl -X GET http://localhost:8087/health ``` 响应: ```json { "status": "ok", "timestamp": "2024-01-01T00:00:00Z" } ``` ### 💬 聊天接口 ```bash curl -X POST http://localhost:8087/chat \ -H "Content-Type: application/json" \ -d '{ "prompt": "你好,请帮我创建一个 Rust Web API 项目", "project_id": "my-project", "session_id": "optional-session-id" }' ``` ### 📊 实时进度流 ```bash curl -X GET http://localhost:8087/agent/progress/your-session-id \ -H "Accept: text/event-stream" ``` ## 📁 项目结构 ``` crates/ ├── agent_abstraction/ # Agent 抽象层 ├── agent_config/ # Agent 配置管理 ├── agent_runner/ # Agent 运行时(gRPC 服务端) │ ├── src/ │ │ ├── grpc/ # gRPC 服务实现 │ │ ├── proxy_agent/ # ACP 代理实现 │ │ └── service/ # 核心服务 │ └── Cargo.toml ├── docker_manager/ # Docker 容器管理 ├── duckdb_manager/ # DuckDB 数据库管理 ├── rcoder/ # 主应用 │ ├── src/ │ │ ├── grpc/ # gRPC 客户端 │ │ ├── handler/ # HTTP 处理器 │ │ ├── service/ # 业务服务 │ │ └── cleanup_task/ # 清理任务 │ └── Cargo.toml ├── rcoder-proxy/ # Pingora 代理封装 ├── rcoder-telemetry/ # 遥测和追踪 └── shared_types/ # 共享类型和 Proto 定义 └── proto/ └── agent.proto # gRPC 协议定义 ``` ## 配置 ### 配置优先级 1. **命令行参数** - 最高优先级 2. **环境变量** - 中等优先级 3. **配置文件** - 较低优先级 4. **默认配置** - 最低优先级 ### 配置文件 (config.yml) ```yaml # 默认 Agent ID default_agent_id: "claude-code-acp-ts" # 项目工作目录 projects_dir: "./project_workspace" # 主服务端口 port: 8087 # Docker 配置 docker_config: network_mode: "bridge" network_base_name: "agent-network" work_dir: "/app" auto_cleanup: true container_ttl_seconds: 3600 api_timeout_seconds: 10 cache_status_ttl_seconds: 10 # 容器清理配置 cleanup_config: enabled: true idle_timeout_seconds: 600 cleanup_interval_seconds: 300 container_protection_seconds: 300 # API Key 鉴权配置 api_key_auth: enabled: false api_key: "sk-xxx" # 反向代理配置 proxy_config: listen_port: 8088 default_backend_port: 8086 backend_host: "127.0.0.1" ``` ### 环境变量 | 变量名 | 说明 | 默认值 | |--------|------|--------| | `RCODER_PORT` | 服务端口 | 8087 | | `RCODER_PROJECTS_DIR` | 项目目录 | ./project_workspace | | `RCODER_NETWORK_MODE` | Docker 网络模式 | bridge | | `RCODER_NETWORK_BASE_NAME` | 网络基础名称 | agent-network | | `RCODER_API_TIMEOUT_SECONDS` | Docker API 超时 | 10 | | `RCODER_API_KEY_ENABLED` | 启用 API Key 鉴权 | false | | `RCODER_API_KEY` | API Key 密钥 | - | | `RUST_LOG` | 日志级别 | info | ### 使用示例 ```bash # 使用环境变量 RCODER_PORT=8080 RUST_LOG=debug cargo run --bin rcoder # 命令行参数优先级最高 RCODER_PORT=8080 cargo run --bin rcoder -- --port 9000 ``` ## 🔧 开发指南 ### 运行测试 ```bash # 运行所有测试 cargo test --workspace # 运行单元测试 make test-unit # 运行集成测试 make test-integration ``` ### 代码质量 ```bash # 代码格式化 cargo fmt # 代码检查 cargo clippy # 全面检查 cargo clippy -- -D warnings ``` ### 本地开发 ```bash # 启动开发服务器 RUST_LOG=debug cargo run --bin rcoder -- --port 8087 # 监视文件变化 cargo install cargo-watch cargo watch -x "run --bin rcoder" ``` ## 🚀 部署指南 ### Docker 部署 ```bash # 构建镜像 make docker-build # 或分别构建 make docker-build-master # 主服务镜像 make docker-build-agent-runner # Agent Runner 镜像 # 生产镜像(无调试工具) make docker-build-agent-production ``` ### Docker Compose ```bash # 启动服务 make dev-up # 查看状态 docker-compose -f docker/docker-compose.yml ps # 停止服务 make dev-down ``` ### Pyroscope 性能分析 ```bash # 启动 Pyroscope Server make pyroscope-up # 访问 Web UI open http://localhost:4040 # 停止服务 make pyroscope-down ``` ## 🐛 问题排查 ### 常见问题 - **端口被占用**:使用 `--port` 参数指定其他端口 - **容器启动失败**:检查 Docker 服务状态和网络配置 - **gRPC 连接失败**:确认容器网络和端口配置 - **API Key 错误**:检查 `api_key_auth` 配置 ### 调试模式 ```bash # 启用详细日志 RUST_LOG=debug cargo run --bin rcoder # 查看容器日志 make dev-logs # 进入容器调试 docker exec -it /bin/bash ``` ## 📈 更新日志 ### v0.1.0 (当前版本) #### 新增功能 - ✅ 基于 SACP 协议的 AI 代理统一管理 - ✅ gRPC 高性能通信架构 - ✅ Docker 容器化部署(项目级隔离) - ✅ VNC/noVNC 远程桌面支持 - ✅ API Key 鉴权中间件 - ✅ 容器自动清理机制 - ✅ 多镜像配置支持 - ✅ Pyroscope 性能分析集成 #### 技术特性 - ✅ Rust 2024 Edition - ✅ Tonic gRPC (v0.14.2) - ✅ SACP 协议 (v10.1.0) - ✅ MCP 协议支持 (rmcp v0.12.0) - ✅ DuckDB 数据库 - ✅ OpenTelemetry 追踪 - ✅ eBPF 调试工具支持 ## 🔗 相关链接 - **项目仓库**: [GitHub](https://github.com/your-org/rcoder) - **问题追踪**: [Issues](https://github.com/your-org/rcoder/issues) - **SACP 协议**: [Symposium ACP](https://crates.io/crates/sacp) - **MCP 协议**: [rmcp](https://crates.io/crates/rmcp) ## 📝 许可证 本项目采用 MIT 或 Apache-2.0 双许可证。详见 [LICENSE](LICENSE) 文件。 ## 🤝 贡献 欢迎贡献!请阅读 [CONTRIBUTING.md](CONTRIBUTING.md) 了解如何参与开发。 ### 贡献指南 1. Fork 项目 2. 创建特性分支 (`git checkout -b feature/amazing-feature`) 3. 提交更改 (`git commit -m 'Add amazing feature'`) 4. 推送到分支 (`git push origin feature/amazing-feature`) 5. 开启 Pull Request --- 💫 **由 RCoder 团队精心打造,致力于推进 AI 驱动的现代化开发体验。**