# 变更日志 **本文引用的文件** - [README.md](file://README.md) - [Cargo.toml](file://Cargo.toml) - [crates/rcoder/src/main.rs](file://crates/rcoder/src/main.rs) - [crates/rcoder/src/config.rs](file://crates/rcoder/src/config.rs) - [crates/rcoder/src/router.rs](file://crates/rcoder/src/router.rs) - [crates/rcoder/src/handler/proxy_api.rs](file://crates/rcoder/src/handler/proxy_api.rs) - [crates/pingora-proxy/src/lib.rs](file://crates/pingora-proxy/src/lib.rs) - [crates/pingora-proxy/src/config.rs](file://crates/pingora-proxy/src/config.rs) - [crates/docker_manager/src/lib.rs](file://crates/docker_manager/src/lib.rs) - [crates/docker_manager/src/types.rs](file://crates/docker_manager/src/types.rs) - [specs/multi-docker-image-design.md](file://specs/multi-docker-image-design.md) ## 目录 1. [简介](#简介) 2. [项目结构](#项目结构) 3. [核心组件](#核心组件) 4. [架构总览](#架构总览) 5. [详细组件分析](#详细组件分析) 6. [依赖关系分析](#依赖关系分析) 7. [性能考量](#性能考量) 8. [故障排查指南](#故障排查指南) 9. [结论](#结论) 10. [附录](#附录) ## 简介 本文件旨在系统化梳理 RCoder 项目在版本迭代中的变更,围绕功能更新、缺陷修复与架构演进,结合代码库中的实际实现,解释变更日志在版本控制、升级路径与向后兼容性中的作用,并提供升级评估与问题排查的最佳实践。由于仓库未包含 CHANGELOG.md 文件,本文将基于现有 README 与源码,对 v0.1.0 版本的现状与关键特性进行总结,并给出面向未来的变更日志模板与生成建议,以便团队在后续版本中持续完善。 ## 项目结构 RCoder 采用多 crate 的工作区组织,核心模块包括: - 主应用与路由:rcodes/rcoder - Pingora 反向代理封装:crates/pingora-proxy - Docker 容器管理:crates/docker_manager - 共享类型与协议:crates/shared_types - 代理适配器与示例:acp_adapter、claude-code-agent、codex-acp-agent 等 ```mermaid graph TB subgraph "工作区" A["crates/rcoder
主应用/路由/配置/代理启动"] B["crates/pingora-proxy
Pingora 反向代理库"] C["crates/docker_manager
Docker 管理器/镜像选择/全局实例"] D["crates/shared_types
共享模型/多镜像配置"] E["crates/acp_adapter
ACP 协议适配"] F["crates/claude-code-agent
Claude 代理示例"] G["crates/codex-acp-agent
Codex 代理示例"] end A --> B A --> C A --> D A --> E A --> F A --> G ``` 图表来源 - [Cargo.toml](file://Cargo.toml#L1-L20) - [README.md](file://README.md#L269-L378) 章节来源 - [Cargo.toml](file://Cargo.toml#L1-L20) - [README.md](file://README.md#L269-L378) ## 核心组件 - 主应用与配置系统:命令行参数、环境变量、配置文件三段式优先级,支持代理与 Docker 配置的加载与覆盖。 - Pingora 反向代理:Axum + Pingora 的双服务架构,主服务提供 API/SSE,Pingora 独立监听代理端口,路径前缀路由到目标后端。 - Docker 管理器:全局单例、镜像选择策略、容器生命周期管理、清理任务与网络/挂载配置。 - 共享类型:多镜像配置结构、服务类型枚举、镜像选择器与缓存策略。 章节来源 - [crates/rcoder/src/config.rs](file://crates/rcoder/src/config.rs#L1-L120) - [crates/rcoder/src/main.rs](file://crates/rcoder/src/main.rs#L160-L210) - [crates/pingora-proxy/src/lib.rs](file://crates/pingora-proxy/src/lib.rs#L1-L120) - [crates/docker_manager/src/lib.rs](file://crates/docker_manager/src/lib.rs#L140-L211) - [specs/multi-docker-image-design.md](file://specs/multi-docker-image-design.md#L40-L120) ## 架构总览 RCoder 采用“主服务 + Pingora 代理”的双服务架构: - 主服务(Axum):提供健康检查、聊天、SSE 实时进度、代理状态/配置/统计等接口。 - Pingora 代理:独立监听代理端口,按路径前缀 /proxy/{port}/{path} 转发到指定后端,支持动态后端发现与健康检查。 ```mermaid graph TB Client["客户端"] --> Axum["主服务(Axum)
端口: config.port"] Client --> Pingora["Pingora 代理
端口: proxy_config.listen_port"] Axum --> API["业务 API/SSE"] Axum --> ProxyDocs["/proxy/* 文档接口"] Pingora --> Backend["后端服务
127.0.0.1:{port}"] ``` 图表来源 - [README.md](file://README.md#L133-L206) - [crates/rcoder/src/router.rs](file://crates/rcoder/src/router.rs#L52-L84) - [crates/rcoder/src/main.rs](file://crates/rcoder/src/main.rs#L168-L209) 章节来源 - [README.md](file://README.md#L133-L206) - [crates/rcoder/src/router.rs](file://crates/rcoder/src/router.rs#L52-L84) - [crates/rcoder/src/main.rs](file://crates/rcoder/src/main.rs#L168-L209) ## 详细组件分析 ### 变更日志模板与生成建议 为保证变更日志的可追溯性与可维护性,建议采用如下模板(示例,非仓库既有内容): - 版本号:vX.Y.Z - 发布日期:YYYY-MM-DD - 关键变更 - 新增:新增 API 端点、代理支持类型扩展、配置系统优化、可观测性增强等 - 修复:缺陷修复、兼容性问题修正、性能回归修复等 - 变更:架构调整、依赖升级、行为变更、弃用项等 - 升级指引:影响范围、破坏性变更、迁移步骤、兼容性说明 - 问题排查:常见问题、诊断方法、相关日志位置 说明:本仓库未包含 CHANGELOG.md 文件,本文基于现有 README 与源码总结 v0.1.0 的现状与关键特性,作为后续版本变更日志的参考。 章节来源 - [README.md](file://README.md#L627-L652) ### v0.1.0 版本要点(基于现有 README 与源码) - 新增功能 - 基于 ACP 协议的 AI 代理统一管理(Codex、Claude Code) - HTTP API 接口与统一 SSE 进度流 - 多层配置系统(命令行 > 环境变量 > 配置文件 > 默认) - OpenTelemetry 集成与分布式追踪 - Swagger UI API 文档 - 项目文件解析器(Nuwax Parser) - 技术特性 - 基于 Rust 2024 Edition - 异步架构(Tokio) - 模块化设计(Workspace Crates) - 实时通信(SSE) - 结构化日志(Tracing) 章节来源 - [README.md](file://README.md#L627-L652) ### Pingora 反向代理能力与变更要点 - 能力概述 - 独立监听代理端口,路径前缀路由到目标后端 - 支持动态后端发现与健康检查 - 提供状态、配置、统计等查询接口(Axum 文档接口) - 关键实现 - 主应用在启动时根据配置创建 Pingora 服务器管理器,并在后台启动 - 路由中提供 /proxy/* 文档接口,真实代理请求需直接发送到 Pingora 端口 - 代理库提供便捷函数与错误类型,支持快速启动与错误处理 ```mermaid sequenceDiagram participant Client as "客户端" participant Axum as "主服务(Axum)" participant Router as "路由" participant Pingora as "Pingora 代理" participant Backend as "后端服务" Client->>Axum : "GET /proxy/status" Axum->>Router : "匹配 /proxy/*" Router-->>Client : "返回状态/配置/统计(文档接口)" Client->>Pingora : "GET /proxy/{port}/{path}" Pingora->>Backend : "转发到 127.0.0.1 : {port}" Backend-->>Pingora : "响应" Pingora-->>Client : "返回代理响应" ``` 图表来源 - [crates/rcoder/src/main.rs](file://crates/rcoder/src/main.rs#L168-L209) - [crates/rcoder/src/router.rs](file://crates/rcoder/src/router.rs#L67-L79) - [crates/rcoder/src/handler/proxy_api.rs](file://crates/rcoder/src/handler/proxy_api.rs#L1-L120) - [crates/pingora-proxy/src/lib.rs](file://crates/pingora-proxy/src/lib.rs#L1-L120) 章节来源 - [crates/rcoder/src/main.rs](file://crates/rcoder/src/main.rs#L168-L209) - [crates/rcoder/src/router.rs](file://crates/rcoder/src/router.rs#L67-L79) - [crates/rcoder/src/handler/proxy_api.rs](file://crates/rcoder/src/handler/proxy_api.rs#L1-L120) - [crates/pingora-proxy/src/lib.rs](file://crates/pingora-proxy/src/lib.rs#L1-L120) ### Docker 容器管理与镜像选择能力 - 能力概述 - 全局 DockerManager 单例,支持自动检测平台、镜像选择与缓存 - 多镜像配置结构,支持服务类型(rcoder/agent-runner)与架构(arm64/amd64)选择 - 项目级镜像覆盖与环境变量注入 - 关键实现 - DockerManagerConfig 默认配置与全局初始化 - ImageSelector 选择策略(ServiceOnly),支持缓存与校验 - 容器生命周期管理、清理任务与网络/挂载配置 ```mermaid classDiagram class DockerManager { +new(config) +create_container(config) +get_multi_image_config() } class DockerManagerConfig { +docker_host +default_image +default_platform +default_network_mode +default_work_dir +auto_cleanup +container_ttl_seconds +multi_image_config } class ImageSelector { +select_image(service_type, project_overrides) +get_service_config(service_type) } class MultiImageConfig { +services +global_defaults +selection_strategy +cache_config } DockerManager --> DockerManagerConfig : "使用" DockerManager --> ImageSelector : "创建并使用" ImageSelector --> MultiImageConfig : "读取配置" ``` 图表来源 - [crates/docker_manager/src/lib.rs](file://crates/docker_manager/src/lib.rs#L140-L211) - [crates/docker_manager/src/types.rs](file://crates/docker_manager/src/types.rs#L175-L233) - [specs/multi-docker-image-design.md](file://specs/multi-docker-image-design.md#L120-L200) 章节来源 - [crates/docker_manager/src/lib.rs](file://crates/docker_manager/src/lib.rs#L140-L211) - [crates/docker_manager/src/types.rs](file://crates/docker_manager/src/types.rs#L175-L233) - [specs/multi-docker-image-design.md](file://specs/multi-docker-image-design.md#L120-L200) ### 配置系统与升级影响评估 - 配置优先级 - 命令行参数 > 环境变量 > 配置文件 > 默认配置 - 代理配置 - 主应用根据命令行与配置文件决定是否启用 Pingora 代理及其监听端口、默认后端端口等 - 升级影响评估 - 若新增代理端口参数或健康检查配置项,需确保命令行与环境变量覆盖逻辑一致 - Docker 配置新增字段时,应提供默认值与校验逻辑,避免破坏性变更 ```mermaid flowchart TD Start(["启动"]) --> ParseCLI["解析命令行参数"] ParseCLI --> LoadFile["加载配置文件(若存在)"] LoadFile --> ApplyEnv["应用环境变量覆盖"] ApplyEnv --> MergeProxy["合并代理配置(端口/默认后端)"] MergeProxy --> Validate["验证配置(含 Docker 多镜像)"] Validate --> InitDocker["初始化 DockerManager(全局单例)"] InitDocker --> StartProxy{"是否启用代理?"} StartProxy --> |是| RunProxy["启动 Pingora 代理服务"] StartProxy --> |否| RunMain["启动主服务(Axum)"] RunProxy --> Done(["完成"]) RunMain --> Done ``` 图表来源 - [crates/rcoder/src/config.rs](file://crates/rcoder/src/config.rs#L253-L332) - [crates/rcoder/src/main.rs](file://crates/rcoder/src/main.rs#L168-L209) 章节来源 - [crates/rcoder/src/config.rs](file://crates/rcoder/src/config.rs#L253-L332) - [crates/rcoder/src/main.rs](file://crates/rcoder/src/main.rs#L168-L209) ## 依赖关系分析 - 工作区与依赖 - 工作区包含多个 crate,主应用默认成员包含 rcoder、agent_runner、shared_types、docker_manager、acp_adapter、claude-code-agent、pingora-proxy - 依赖包括 axum、tokio、clap、utoipa、pingora、bollard 等 - 组件耦合 - rcoder 依赖 pingora-proxy 与 docker_manager,通过配置与全局实例进行解耦 - 共享类型在 rcoder 与 docker_manager 之间传递,避免重复定义 ```mermaid graph LR rcoder["rcoder"] --> pingora_proxy["pingora-proxy"] rcoder --> docker_manager["docker_manager"] rcoder --> shared_types["shared_types"] docker_manager --> shared_types ``` 图表来源 - [Cargo.toml](file://Cargo.toml#L1-L20) 章节来源 - [Cargo.toml](file://Cargo.toml#L1-L20) ## 性能考量 - 双服务架构 - 主服务与 Pingora 代理并行运行,互不阻塞,提高吞吐与隔离性 - 代理性能 - 基于 Rust 异步 I/O 的高性能代理,支持动态后端发现与健康检查 - 观测性 - OpenTelemetry 与 Tracing 集成,便于定位性能瓶颈与异常 章节来源 - [README.md](file://README.md#L133-L206) - [crates/pingora-proxy/src/lib.rs](file://crates/pingora-proxy/src/lib.rs#L1-L120) ## 故障排查指南 - 代理请求未转发 - 确认请求是否发送到 Pingora 监听端口,而非主服务端口 - 检查路径前缀是否符合 /proxy/{port}/{path} - 后端不可达 - 确认目标后端端口已启动且可访问 - Docker 相关 - 检查 Docker socket 路径、权限与挂载 - 查看全局 DockerManager 初始化日志与清理任务输出 章节来源 - [README.md](file://README.md#L193-L206) - [crates/rcoder/src/main.rs](file://crates/rcoder/src/main.rs#L322-L351) ## 结论 - v0.1.0 版本已具备核心能力:统一 AI 代理接入、HTTP API 与 SSE、Pingora 反向代理、Docker 容器管理与多镜像配置、可观测性与文档化。 - 变更日志应聚焦于功能新增、缺陷修复与架构变更,并提供升级指引与兼容性说明。 - 建议在后续版本中补充 CHANGELOG.md,并建立自动化生成与校验流程,确保变更可追溯、可审计。 ## 附录 ### 变更日志生成最佳实践 - 自动化生成 - 使用 Git 标签与提交信息生成候选条目 - 通过 CI 校验变更类型(feat/fix/refactor/chore)与语义化版本 - 人工审核 - 评审破坏性变更与迁移成本 - 补充升级指引与兼容性说明 - 模板字段 - 版本号、发布日期、变更类型、影响范围、修复问题、相关 PR/Issue ### 代码级变更示例(基于现有实现) - 代理端口与默认后端端口 - 主应用根据配置创建 Pingora 服务器管理器并启动 - 路由提供 /proxy/* 文档接口,真实代理请求需直接发送到 Pingora 端口 - Docker 镜像选择 - ImageSelector 采用 ServiceOnly 策略,优先使用服务特定镜像,支持缓存与校验 - DockerManagerConfig 默认配置与全局初始化,支持项目级镜像覆盖 章节来源 - [crates/rcoder/src/main.rs](file://crates/rcoder/src/main.rs#L168-L209) - [crates/rcoder/src/router.rs](file://crates/rcoder/src/router.rs#L67-L79) - [specs/multi-docker-image-design.md](file://specs/multi-docker-image-design.md#L250-L415)