Skip to content

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

1 Commit
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

c0mmandc0de2api

⚠️ 免责声明

本项目仅供个人学习与使用,目的是方便在习惯的 CLI 工具(如 OpenCode)中调用 CommandCode 模型,不改变任何计费逻辑,亦不提供对第三方的服务能力。

禁止用于以下用途:

  • 搭建公开或私有的 API 反代中转站
  • 任何形式的商业运营、售卖或转售 API 配额
  • 对不特定第三方提供服务

使用者应当自行遵守 CommandCode 的服务条款。因违反上述约定产生的任何后果由使用者自行承担。

Command Code 私有格式 → OpenAI 兼容 API 反代。将 Command Code 的 /alpha/generate SSE 协议转换为标准 OpenAI /v1/chat/completions 接口,让 Cursor、Continue、Cline 等支持 OpenAI 兼容 API 的客户端直接使用 Command Code 后端。

快速开始

# 安装依赖
npm install

# 开发模式(tsx 热重载)
npm run dev

# 打包单文件 + 运行
npm run bundle
npm start

服务默认监听 localhost:3000,启动时自动查找 API Key,找不到会打开浏览器触发 OAuth 登录。

使用方式

在客户端中将 API Base URL 配置为 http://localhost:3000/v1(或你设置的自定义端口):

# 以 Cursor 为例,配置 OpenAI Base URL
http://localhost:3000/v1

# 如果设置了代理层认证(环境变量 API_KEY),需填写 API Key
# 否则可以留空或随便填

软件兼容:支持所有使用 OpenAI 兼容 API 的客户端,包括 Cursor、VS Code 插件(Continue / Cline / Roo Code)、ChatBox、OpenCat 等。无需更改客户端代码,将 API 地址指向本服务即可。

API Key 配置

按优先级查找,找到即停:

优先级 方式 示例
1 环境变量 COMMANDCODE_API_KEY export COMMANDCODE_API_KEY=user_...
2 环境变量 COMMANDCODE_API_KEYS export COMMANDCODE_API_KEYS=key1,key2,key3
3 ~/.commandcode/auth.json {"apiKey":"user_..."}
4 ~/.pi/agent/auth.json pi 兼容({"commandcode":"user_..."}
5 ~/.omp/agent/auth.json OMP 兼容

auth.json 支持三种格式:

  • {"apiKey": "user_..."}
  • {"commandcode": "user_..."}
  • {"command-code": {"type": "api", "key": "user_..."}}

多 Key 模式下,COMMANDCODE_API_KEYS 支持逗号或换行分隔,自动去重并按顺序轮询。单个 key 触发限流时自动切换下一个,所有 key 都硬限流后进入 5 分钟冷却期。

OpenAI 兼容端点

端点 方法 说明
/v1/models GET 模型列表(从 CC Provider API 动态获取)
/v1/chat/completions POST 聊天补全(流式 + 非流式)
/health GET 健康检查

环境变量

变量 说明 默认值
COMMANDCODE_API_KEY 单个 API Key -
COMMANDCODE_API_KEYS 多个 API Key(逗号/换行分隔) -
COMMANDCODE_API_BASE CC API 地址 https://api.commandcode.ai
COMMANDCODE_MODELS_URL 模型列表地址 ${API_BASE}/provider/v1/models
COMMANDCODE_AUTH_TIMEOUT_MS OAuth 浏览器回传超时 15000
API_KEY 代理层认证 Key(设置后客户端必须携带) -
PORT 监听端口 3000
BIND 绑定地址 127.0.0.1
DEBUG 调试模式,输出完整请求/响应日志 -

特色

反指纹检测

CC 后端会检测请求来源,本项目针对性地做了反指纹处理:

  • 工作目录随机化:不暴露真实部署路径。每次启动随机生成一个符合真实用户画像的假工作目录(如 /Users/krqmsb/dev/jteox),重启后自动变化,防止形成跨重启固定指纹
  • config 假值:每个请求的 config 字段使用统一的虚假值(空结构体、非 Git 仓库等),隐藏代理的部署环境
  • threadId 每次刷新:对齐官方 CLI 0.38.2 行为,不跨请求复用 threadId

Key 池 + 智能重试

  • 支持多个 Key 轮询,单个 key 触发 429 / 额度不足时自动切换
  • 所有 key 都触发硬限流(含 "Your limit resets at" 提示)时进入 5 分钟冷却,期间直接返回 429 避免无谓请求
  • 流中断自动重试(保留 threadId 维持会话上下文),最多 3 次指数退避

推理内容透传

支持带 reasoning_effort 参数的模型(如 Claude),将 CC 的 reasoning-start / reasoning-delta / reasoning-end 事件转换为 OpenAI 格式的 reasoning_content 字段。

OAuth 自动登录

未配置 API Key 时会自动打开浏览器进行 Command Code 登录,本地启动一次性回调服务器接收 Key 并保存到 ~/.commandcode/auth.json。支持 state 校验防 CSRF、浏览器回传超时后的终端粘贴回退,以及粘贴 JSON/控制字符清理。

安全遮蔽

  • 启动日志和错误输出中自动遮蔽 Key(仅显示前 4 + 后 4 位)
  • 上游错误响应中的 Key 自动替换为遮罩,防止泄露到客户端

架构

客户端 (OpenAI JSON)
  → index.ts 收到请求
  → convert-request.ts 转为 CommandCode /alpha/generate 格式
  → POST 到 api.commandcode.ai (SSE 流)
  → convert-response.ts 解析 CC SSE 事件,转为 OpenAI streaming chunks
  → 返回 text/event-stream

文件说明

文件 职责
src/index.ts Express 服务器、路由、Key 池、重试逻辑、SSE 读写循环
src/convert-request.ts OpenAI 消息/工具 → CommandCode 格式
src/convert-response.ts CommandCode SSE 事件 → OpenAI streaming chunks
src/config.ts API Key 多来源加载
src/oauth.ts 浏览器 OAuth 登录流程
src/auth-server.ts 本地 HTTP 回调服务器(接收 CC 网页 POST 回的 Key)
src/models.ts /v1/models 端点,调用 CC Provider API
src/types.ts 全部类型定义
src/debug.ts DEBUG=true 时启用调试日志
scripts/bundle.js esbuild 单文件打包脚本

打包

npm run bundle   # 输出 dist/server.js(单文件)
npm start        # 运行打包文件

打包后的 dist/server.js 可直接部署到任何 Node.js 环境,无需 node_modules

License

MIT

About

Not related to Command Code

Resources

Stars

2 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages