# 项目概述 **本文档引用的文件** - [README.md](file://README.md) - [Cargo.toml](file://Cargo.toml) - [crates/rcoder/Cargo.toml](file://crates/rcoder/Cargo.toml) - [crates/rcoder/src/main.rs](file://crates/rcoder/src/main.rs) - [crates/rcoder/src/lib.rs](file://crates/rcoder/src/lib.rs) - [crates/rcoder/src/router.rs](file://crates/rcoder/src/router.rs) - [crates/rcoder/src/config.rs](file://crates/rcoder/src/config.rs) - [crates/pingora-proxy/src/lib.rs](file://crates/pingora-proxy/src/lib.rs) - [crates/acp_adapter/src/lib.rs](file://crates/acp_adapter/src/lib.rs) - [crates/rcoder/src/handler/chat_handler.rs](file://crates/rcoder/src/handler/chat_handler.rs) - [crates/rcoder/src/handler/agent_session_notification.rs](file://crates/rcoder/src/handler/agent_session_notification.rs) - [crates/shared_types/src/model/agent_model.rs](file://crates/shared_types/src/model/agent_model.rs) - [crates/shared_types/src/service_config.rs](file://crates/shared_types/src/service_config.rs) - [crates/docker_manager/src/lib.rs](file://crates/docker_manager/src/lib.rs) ## 目录 1. [简介](#简介) 2. [项目结构](#项目结构) 3. [核心组件](#核心组件) 4. [架构概览](#架构概览) 5. [详细组件分析](#详细组件分析) 6. [依赖关系分析](#依赖关系分析) 7. [配置系统](#配置系统) 8. [API接口](#api接口) 9. [使用示例](#使用示例) 10. [故障排除](#故障排除) ## 简介 RCoder 是一个基于 Rust 构建的现代化 AI 驱动开发平台,通过 ACP (Agent Client Protocol) 协议实现与多种 AI 代理的统一交互。平台提供简洁的 HTTP API 接口,让开发者能够轻松集成和管理 AI 辅助开发功能。 RCoder 采用模块化设计,通过 Rust 的 Workspace 特性组织多个功能组件,包括主应用、代理运行器、Docker 管理器、Pingora 反向代理等。平台支持多种 AI 代理,如 Codex 和 Claude Code,并通过反向代理机制实现高性能的端口路由。 **本文档引用的文件** - [README.md](file://README.md#L1-L652) - [Cargo.toml](file://Cargo.toml#L1-L205) ## 项目结构 RCoder 项目采用 Rust Workspace 结构,将不同功能模块分离到独立的 crate 中,实现高内聚低耦合的设计。 ```mermaid graph TD A[crates/] --> B[rcoder] A --> C[agent_runner] A --> D[shared_types] A --> E[acp_adapter] A --> F[pingora-proxy] A --> G[docker_manager] A --> H[claude-code-agent] A --> I[codex-acp-agent] B --> J[src/] C --> K[src/] D --> L[src/] E --> M[src/] F --> N[src/] G --> O[src/] J --> P[main.rs] J --> Q[router.rs] J --> R[config.rs] J --> S[handler/] J --> T[service/] K --> U[proxy_agent/] K --> V[service/] L --> W[model/] M --> X[types.rs] N --> Y[server.rs] O --> Z[manager.rs] ``` **图表来源** - [README.md](file://README.md#L269-L377) **本文档引用的文件** - [README.md](file://README.md#L269-L377) - [Cargo.toml](file://Cargo.toml#L1-L205) ## 核心组件 RCoder 的核心组件包括主应用、代理适配器、反向代理和 Docker 管理器。这些组件协同工作,提供完整的 AI 代理管理功能。 主应用(rcoder)负责处理 HTTP 请求、管理会话状态和协调各个组件。代理适配器(acp_adapter)提供与 ACP 协议兼容的通信功能。反向代理(pingora-proxy)基于 Cloudflare Pingora 实现高性能的端口路由。Docker 管理器(docker_manager)负责容器的生命周期管理。 **本文档引用的文件** - [crates/rcoder/src/main.rs](file://crates/rcoder/src/main.rs#L1-L451) - [crates/acp_adapter/src/lib.rs](file://crates/acp_adapter/src/lib.rs#L1-L13) - [crates/pingora-proxy/src/lib.rs](file://crates/pingora-proxy/src/lib.rs#L1-L250) - [crates/docker_manager/src/lib.rs](file://crates/docker_manager/src/lib.rs#L1-L211) ## 架构概览 RCoder 采用分层架构设计,各组件职责明确,通过清晰的接口进行通信。 ```mermaid graph TB A[Client] --> B[Axum HTTP Server] A --> C[Pingora Proxy] B --> D[API Routes] B --> E[Agent Worker (LocalSet)] C --> F[Backends: 127.0.0.1:{port}] D --> G[Handler Modules] G --> H[Container Manager] H --> I[Docker Manager] I --> J[Docker Engine] G --> K[Session Cache] G --> L[Config Manager] ``` **图表来源** - [README.md](file://README.md#L18-L25) **本文档引用的文件** - [README.md](file://README.md#L16-L25) - [crates/rcoder/src/main.rs](file://crates/rcoder/src/main.rs#L31-L451) ## 详细组件分析 ### 主应用分析 主应用是 RCoder 的核心,负责启动服务、处理请求和协调各个组件。 #### 主函数分析 ```mermaid flowchart TD Start([启动 RCoder]) --> InitTelemetry["初始化遥测系统"] InitTelemetry --> ParseArgs["解析命令行参数"] ParseArgs --> LoadConfig["加载配置文件"] LoadConfig --> CreateDir["创建项目目录"] CreateDir --> InitPathResolver["初始化路径解析器"] InitPathResolver --> InitDockerManager["初始化 Docker Manager"] InitDockerManager --> CleanupContainers["清理遗留容器"] CleanupContainers --> StartProxy["启动 Pingora 代理"] StartProxy --> SetupSignal["设置信号处理器"] SetupSignal --> CreateState["创建应用状态"] CreateState --> StartCleanup["启动清理任务"] CreateState --> CreateRouter["创建路由"] CreateRouter --> StartServer["启动 HTTP 服务器"] StartServer --> WaitShutdown["等待关闭信号"] WaitShutdown --> CleanupAll["清理所有容器"] CleanupAll --> End([服务关闭]) ``` **图表来源** - [crates/rcoder/src/main.rs](file://crates/rcoder/src/main.rs#L31-L451) **本文档引用的文件** - [crates/rcoder/src/main.rs](file://crates/rcoder/src/main.rs#L31-L451) - [crates/rcoder/src/config.rs](file://crates/rcoder/src/config.rs#L1-L403) #### 配置系统分析 ```mermaid classDiagram class AppConfig { +default_agent : AgentType +projects_dir : PathBuf +port : u16 +proxy_config : Option +docker_config : Option } class CliArgs { +port : Option +projects_dir : Option +enable_proxy : bool +proxy_port : Option +default_backend_port : Option } class ProxyConfig { +listen_port : u16 +default_backend_port : u16 +backend_host : String +port_param : String +health_check : HealthCheckConfig } class DockerConfig { +multi_image_config : Option +network_mode : Option +work_dir : Option +auto_cleanup : Option +container_ttl_seconds : Option } class HealthCheckConfig { +enabled : bool +interval_seconds : u64 +timeout_seconds : u64 +healthy_threshold : u32 +unhealthy_threshold : u32 } AppConfig --> ProxyConfig : "包含" AppConfig --> DockerConfig : "包含" DockerConfig --> MultiImageConfig : "包含" ``` **图表来源** - [crates/rcoder/src/config.rs](file://crates/rcoder/src/config.rs#L38-L109) **本文档引用的文件** - [crates/rcoder/src/config.rs](file://crates/rcoder/src/config.rs#L1-L403) - [crates/shared_types/src/service_config.rs](file://crates/shared_types/src/service_config.rs#L1-L513) ### 聊天处理器分析 聊天处理器负责处理用户发送的聊天消息,并将其转发到相应的 AI 代理。 ```mermaid sequenceDiagram participant Client as "客户端" participant Handler as "ChatHandler" participant Container as "ContainerManager" participant Docker as "DockerManager" participant Agent as "AgentRunner" Client->>Handler : POST /chat Handler->>Container : get_or_create_container() Container->>Docker : create_container() Docker-->>Container : ContainerInfo Container-->>Handler : ContainerInfo Handler->>Agent : 转发聊天请求 Agent-->>Handler : 返回响应 Handler->>Client : 返回响应 ``` **图表来源** - [crates/rcoder/src/handler/chat_handler.rs](file://crates/rcoder/src/handler/chat_handler.rs#L1-L431) **本文档引用的文件** - [crates/rcoder/src/handler/chat_handler.rs](file://crates/rcoder/src/handler/chat_handler.rs#L1-L431) - [crates/rcoder/src/service/container_manager.rs](file://crates/rcoder/src/service/container_manager.rs) ### SSE 通知处理器分析 SSE 通知处理器负责处理 Server-Sent Events (SSE) 连接,实现实时进度流。 ```mermaid flowchart TD A[收到SSE连接请求] --> B{找到对应容器?} B --> |是| C[获取容器SSE端点URL] B --> |否| D[返回404错误] C --> E[建立SSE代理连接] E --> F[转发SSE事件] F --> G[客户端接收实时消息] D --> H[客户端收到错误] ``` **图表来源** - [crates/rcoder/src/handler/agent_session_notification.rs](file://crates/rcoder/src/handler/agent_session_notification.rs#L1-L378) **本文档引用的文件** - [crates/rcoder/src/handler/agent_session_notification.rs](file://crates/rcoder/src/handler/agent_session_notification.rs#L1-L378) - [crates/rcoder/src/proxy_agent/docker_container_agent.rs](file://crates/rcoder/src/proxy_agent/docker_container_agent.rs) ## 依赖关系分析 RCoder 项目采用依赖注入和模块化设计,各组件之间的依赖关系清晰。 ```mermaid graph LR A[rcoder] --> B[shared_types] A --> C[acp_adapter] A --> D[pingora-proxy] A --> E[docker_manager] A --> F[claude-code-agent] B --> G[agent-client-protocol] C --> G D --> H[pingora] E --> I[bollard] F --> J[serde] F --> K[reqwest] A --> L[axum] A --> M[tokio] A --> N[tracing] L --> O[tower] M --> P[futures] N --> Q[tracing-subscriber] ``` **图表来源** - [Cargo.toml](file://Cargo.toml#L1-L205) - [crates/rcoder/Cargo.toml](file://crates/rcoder/Cargo.toml#L1-L91) **本文档引用的文件** - [Cargo.toml](file://Cargo.toml#L1-L205) - [crates/rcoder/Cargo.toml](file://crates/rcoder/Cargo.toml#L1-L91) - [crates/agent_runner/Cargo.toml](file://crates/agent_runner/Cargo.toml#L1-L79) ## 配置系统 RCoder 提供灵活的配置系统,支持多种配置方式,优先级从高到低为:命令行参数 > 环境变量 > 配置文件 > 默认配置。 ### 配置优先级 ```mermaid flowchart TD A[命令行参数] --> B[环境变量] B --> C[配置文件] C --> D[默认配置] D --> E[最终配置] ``` ### 配置文件结构 ```yaml # rcoder 配置文件 # 默认使用的 AI 代理类型 # 可选值: "Codex", "Claude" default_agent: Codex # 项目工作的根目录 projects_dir: "./project_workspace" # 服务端口 port: 3000 # 反向代理配置 proxy_config: listen_port: 8088 default_backend_port: 8086 backend_host: "127.0.0.1" port_param: "port" health_check: enabled: true interval_seconds: 5 timeout_seconds: 1 healthy_threshold: 2 unhealthy_threshold: 3 # Docker 配置 docker_config: multi_image_config: services: rcoder: image: null arm64_image: "registry.yichamao.com/rcoder:latest-arm64" amd64_image: "registry.yichamao.com/rcoder:latest-amd64" default_image: "registry.yichamao.com/rcoder:latest" image_tag_prefix: "rcoder" enabled: true environment: RUST_LOG: "info" SERVICE_MODE: "full" API_PORT: "8086" mounts: [] command: - "/app/bin/agent_runner" - "--port" - "8086" entrypoint: null resource_limits: memory_limit: 2147483648 cpu_limit: 2 swap_limit: 4294967296 disk_limit: null process_limit: null work_dir: "/app" network_mode: "bridge" container_path_template: "/app/project_workspace/{project_id}" agent-runner: image: null arm64_image: "registry.yichamao.com/rcoder-agent-runner:latest-arm64" amd64_image: "registry.yichamao.com/rcoder-agent-runner:latest-amd64" default_image: "registry.yichamao.com/rcoder-agent-runner:latest" image_tag_prefix: "rcoder-agent-runner" enabled: false environment: RUST_LOG: "debug" SERVICE_MODE: "agent-only" AGENT_PORT: "8086" mounts: [] command: - "/app/bin/agent_runner" - "--port" - "8086" entrypoint: null resource_limits: memory_limit: 4294967296 cpu_limit: 3 swap_limit: 8589934592 disk_limit: null process_limit: null work_dir: "/app" network_mode: "bridge" container_path_template: "/app/project_workspace/{project_id}" global_defaults: image: null arm64_image: null amd64_image: null default_image: null registry_prefix: null selection_strategy: ServiceOnly cache_config: enabled: true ttl_seconds: 3600 max_entries: 100 network_mode: "bridge" work_dir: "/app" auto_cleanup: true container_ttl_seconds: 3600 ``` **本文档引用的文件** - [crates/rcoder/src/config.rs](file://crates/rcoder/src/config.rs#L1-L403) - [crates/rcoder/src/rcoder_default.yml](file://crates/rcoder/src/rcoder_default.yml) ## API接口 RCoder 提供 RESTful API 接口,支持健康检查、聊天交互、进度流等功能。 ### 核心端点 | 端点 | 方法 | 说明 | |------|------|------| | `/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 文档 | ### Pingora 代理相关端点 | 端点 | 方法 | 说明 | |------|------|------| | `/proxy/status` | GET | 查看代理服务状态 | | `/proxy/config` | GET | 查看代理配置 | | `/proxy/stats` | GET | 查看代理统计信息 | | `/proxy/{port}/{path}` | GET | 代理到指定端口的服务 | **本文档引用的文件** - [README.md](file://README.md#L209-L227) - [crates/rcoder/src/router.rs](file://crates/rcoder/src/router.rs#L52-L84) ## 使用示例 ### 启动服务 ```bash # 使用默认端口 3000 cargo run --bin rcoder # 指定端口和项目目录 cargo run --bin rcoder -- --port 8087 --projects-dir ./my-projects # 启用并运行 Pingora 反向代理 cargo run --bin rcoder -- --enable-proxy --proxy-port 8080 # 指定默认后端端口 cargo run --bin rcoder -- --enable-proxy --proxy-port 8080 --default-backend-port 3000 ``` ### API 调用示例 ```bash # 健康检查 curl -X GET http://localhost:3000/health # 发送聊天消息 curl -X POST http://localhost:3000/chat \ -H "Content-Type: application/json" \ -d '{ "prompt": "你好,请帮我创建一个 Rust Web API 项目", "project_id": "my-rust-project" }' # 获取实时进度流 curl -X GET http://localhost:3000/agent/progress/your-session-id \ -H "Accept: text/event-stream" # 代理请求示例 curl "http://127.0.0.1:8080/proxy/5173/page/1977625137029189632/prod/" ``` **本文档引用的文件** - [README.md](file://README.md#L61-L198) - [http_test.rest](file://http_test.rest) ## 故障排除 ### 常见问题 - **端口被占用**: 使用 `--port` 参数指定其他端口 - **AI 代理连接失败**: 检查 API 密钥和网络连接 - **配置文件错误**: 检查 YAML 格式和字段名称 - **容器自检测失败**: 检查 Docker socket 路径和权限 ### Docker 配置帮助 ```bash # 确保 docker-compose.yml 包含以下配置 services: rcoder: environment: - DOCKER_SOCKET_PATH=/var/run/docker.sock volumes: - /var/run/docker.sock:/var/run/docker.sock:ro - ./data/rcoder/project_workspace:/app/project_workspace ``` **本文档引用的文件** - [README.md](file://README.md#L611-L626) - [crates/rcoder/src/main.rs](file://crates/rcoder/src/main.rs#L322-L350)