Skip to content

mengxn/codebuddy-proxy-gateway

Repository files navigation

CodeBuddy Proxy Gateway

Codex CLIClaude Code 的 API 请求转发到本地 CodeBuddy CLI --serve 模式。

快速开始

1. 安装依赖

cd codebuddy-proxy-gateway
python3 -m venv venv && source venv/bin/activate
pip install -r requirements.txt

2. 启动服务

# 一键启动(自动启动 CodeBuddy --serve + 代理网关)
bash service.sh start

# 指定模型
CB_PROXY_MODEL=deepseek-v4-pro bash service.sh start

3. 管理服务

bash service.sh start     # 启动
bash service.sh stop      # 关闭
bash service.sh restart   # 重启
bash service.sh status    # 查看状态

代理默认监听 http://127.0.0.1:8081,CodeBuddy 默认 :8080

4. 配置客户端

Codex CLI

编辑 ~/.codex/config.toml:

model_provider = "codebuddy"
model = "Deepseek-V4-Pro"       # 可选: GLM-5.1, Deepseek-V4-Flash

[model_providers.codebuddy]
name = "CodeBuddy"
base_url = "http://127.0.0.1:8081/v1"
wire_api = "responses"
requires_openai_auth = true

[model_providers.codebuddy.models]
default = "Deepseek-V4-Pro"
Deepseek-V4-Pro = "Deepseek-V4-Pro"
GLM-5.1 = "GLM-5.1"
Deepseek-V4-Flash = "Deepseek-V4-Flash"

或设置环境变量:

export OPENAI_BASE_URL="http://127.0.0.1:8081/v1"
export OPENAI_API_KEY="sk-proxy"

Claude Code

export ANTHROPIC_BASE_URL="http://127.0.0.1:8081"
export ANTHROPIC_AUTH_TOKEN="sk-proxy"

端点说明

端点 客户端 说明
POST /v1/responses Codex CLI OpenAI Responses API
GET /v1/responses/{id} Codex CLI 查询响应状态
POST /v1/messages Claude Code Anthropic Messages API(支持流式和非流式)
GET /v1/models 两者 模型列表(Anthropic 格式支持 gateway discovery)
POST /v1/messages/count_tokens Claude Code Token 估算
GET /docs - Swagger UI
GET /health - 代理健康检查

环境变量

所有配置通过 CB_PROXY_ 前缀环境变量覆盖:

变量 默认值 说明
CB_PROXY_MODEL deepseek-v4-pro CodeBuddy --serve 使用的模型
CB_PROXY_CODEBUDDY_BASE_URL http://127.0.0.1:8080 CodeBuddy --serve 地址
CB_PROXY_CODEBUDDY_PORT 8080 CodeBuddy --serve 端口(service.sh 用)
CB_PROXY_CODEBUDDY_REQUEST_HEADER 1 X-CodeBuddy-Request 请求头值
CB_PROXY_CODEBUDDY_SENDER_ID gateway 发送给 CodeBuddy 的 sender.id
CB_PROXY_CODEBUDDY_SENDER_NAME ProxyGateway 发送给 CodeBuddy 的 sender.name
CB_PROXY_PROXY_HOST 127.0.0.1 代理监听地址
CB_PROXY_PROXY_PORT 8081 代理监听端口
CB_PROXY_REQUEST_TIMEOUT 300 CodeBuddy API 请求总超时(秒)
CB_PROXY_SSE_IDLE_TIMEOUT 120 SSE 流无数据时最大空闲等待(秒)
CB_PROXY_SSE_KEEPALIVE_INTERVAL 15 SSE keepalive ping 间隔(秒)
CB_PROXY_HTTPX_CONNECT_TIMEOUT 10.0 httpx 连接超时(秒)
CB_PROXY_HTTPX_WRITE_TIMEOUT 10.0 httpx 写入超时(秒)
CB_PROXY_HTTPX_POOL_TIMEOUT 5.0 httpx 连接池超时(秒)
CB_PROXY_TOKEN_DIVISOR 4 字符数 / N ≈ token 数估算除数
CB_PROXY_LOG_LEVEL INFO 日志级别

工作原理

Codex CLI / Claude Code
       │
       ▼  POST /v1/responses 或 /v1/messages
┌──────────────────────┐
│   Proxy Gateway      │  ← 协议翻译层
│   127.0.0.1:8081     │
└──────────────────────┘
       │
       ▼  POST /api/v1/runs
┌──────────────────────┐
│   CodeBuddy --serve  │
│   127.0.0.1:8080     │
└──────────────────────┘

项目结构

codebuddy-proxy-gateway/
├── main.py                # FastAPI 应用入口、生命周期管理
├── config.py              # 集中配置 (pydantic-settings) + 模型列表
├── schemas.py             # Pydantic 数据模型(请求/响应/SSE事件)
├── codebuddy_client.py    # CodeBuddy HTTP 客户端(lru_cache 单例)
├── translator.py          # 输入翻译 (Codex/Claude → 纯文本 prompt)
├── sse_translator.py      # SSE 输出翻译 (CodeBuddy → OpenAI/Anthropic 格式)
├── proxy_core.py          # 公共代理逻辑(请求解析、错误格式、流式响应)
├── utils.py               # 通用工具(ID生成、SSE构建、Token估算、keepalive)
├── routes_codex.py        # Codex CLI 兼容路由
├── routes_claude.py       # Claude Code 兼容路由
├── tests/                 # 单元测试
│   ├── test_utils.py      # 工具函数测试
│   ├── test_translator.py # 输入翻译层测试
│   └── test_sse_translator.py  # SSE翻译层测试
├── requirements.txt       # 依赖清单
├── service.sh             # 服务管理脚本 (start/stop/restart/status)
└── README.md              # 本文件

模块职责

模块 职责 依赖
config.py 全局配置 + 模型列表常量
utils.py ID 生成、SSE 构建、Token 估算、keepalive 包装 config
schemas.py 所有 Pydantic 数据模型 utils
codebuddy_client.py CodeBuddy API 异步客户端 config
translator.py Codex/Claude → 纯文本翻译 schemas
sse_translator.py CodeBuddy SSE → OpenAI/Anthropic SSE utils, config
proxy_core.py 公共代理逻辑:请求解析、校验、流式响应构建 codebuddy_client
routes_codex.py Codex CLI 路由 proxy_core, translator, sse_translator
routes_claude.py Claude Code 路由 proxy_core, translator, sse_translator, utils
main.py 应用入口、生命周期、全局异常处理 所有路由模块

运行测试

cd codebuddy-proxy-gateway
python -m pytest tests/ -v

限制与说明

  • CodeBuddy 的 /api/v1/runs 是单次 agent 执行模式,CodeBuddy 内部处理工具调用
  • 代理将 Codex/Claude 的对话和工具定义统一翻译为文本 prompt 发送给 CodeBuddy
  • Codex previous_response_id 增量请求的上下文管理尚未实现——每次请求都是独立 run
  • 代理自动在 SSE 流中插入 keepalive ping,防止客户端超时断连
  • 支持 Anthropic 格式的 gateway model discovery(Claude Code v2.1.129+)

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors