feat: 实现ChatGPT Codex路由器的核心功能

- 添加完整的项目基础结构,包括配置、类型定义和常量
- 实现OAuth认证流程和令牌管理
- 开发请求转换和响应处理逻辑
- 添加SSE流处理和ChatCompletions API转换
- 实现模型映射和提示指令系统
- 包含Docker部署配置和快速启动文档
- 添加自动登录功能和测试脚本
This commit is contained in:
mars
2026-01-07 10:51:54 +08:00
commit 0dd6fe2c7d
45 changed files with 8286 additions and 0 deletions

278
STATUS.md Normal file
View File

@@ -0,0 +1,278 @@
# ChatGPT Codex Router - 项目完成状态
## 项目概述
一个 OpenAI 兼容的 API 路由器,通过 OAuth 认证将请求转发到 ChatGPT 后端。
**位置**: `/home/mars/project/chatgpt-codex-router`
**状态**: ✅ 完成
**版本**: 1.0.0
---
## ✅ 已完成功能
### 核心功能
- [x] OpenAI 兼容 API (`/v1/chat/completions`, `/v1/responses`)
- [x] OAuth 认证PKCE 流程)
- [x] **自动登录检查**(新增)
- [x] GPT-5.x 模型支持6 种模型变体)
- [x] 流式传输SSE 支持)
- [x] 自动 Token 刷新
- [x] 详细日志系统
- [x] Docker 支持
### 文件和文档
- [x] plan.md - 详细实施计划
- [x] README.md - 项目主文档
- [x] AUTO_LOGIN.md - 自动登录功能说明
- [x] QUICK_START.md - 快速开始指南
- [x] STATUS.md - 项目状态(本文件)
---
## 🚀 自动登录功能(新增)
### 功能说明
服务器启动时自动检查认证状态:
1. 检查是否存在 Token 文件
2. 验证 Token 是否过期
3. 如果未登录或 Token 过期,自动发起 OAuth 流程
### 启动行为
**首次启动(无 Token**
```
[WARN] No authentication token found. Initiating OAuth login...
[INFO] Starting OAuth flow with state: xxx
[INFO] Local OAuth server started on port 1455
[INFO] OAuth login initiated.
[INFO] Please complete the OAuth flow in your browser.
[INFO] OAuth URL: https://auth.openai.com/oauth/authorize?...
[INFO] Browser should have opened automatically.
[INFO] Server started on http://0.0.0.0:3000
```
**已有有效 Token**
```
[INFO] Authentication token found and valid.
[INFO] Server started on http://0.0.0.0:3000
```
**Token 过期:**
```
[WARN] Authentication token expired. Please login again.
[INFO] Starting OAuth flow with state: xxx
...
```
### 实现细节
**新增文件/修改:**
- `src/index.ts` - 添加了 `checkAuthAndAutoLogin()``initiateOAuthLogin()` 函数
- `package.json` - 更新了 build 脚本,复制 oauth-success.html 到 dist/
**核心逻辑:**
```typescript
async function checkAuthAndAutoLogin(): Promise<boolean> {
const tokenData = loadToken();
if (!tokenData) {
logWarn(null, "No authentication token found. Initiating OAuth login...");
return await initiateOAuthLogin();
}
if (isTokenExpired(tokenData)) {
logWarn(null, "Authentication token expired. Please login again.");
return await initiateOAuthLogin();
}
logInfo(null, "Authentication token found and valid.");
return true;
}
```
---
## 📁 项目结构
```
chatgpt-codex-router/
├── src/
│ ├── auth/ # OAuth 认证模块
│ │ ├── oauth.ts # OAuth 流程
│ │ ├── token-storage.ts # Token 存储
│ │ ├── token-refresh.ts # Token 刷新
│ │ ├── server.ts # OAuth 服务器
│ │ └── browser.ts # 浏览器工具
│ ├── request/ # 请求处理
│ │ ├── model-map.ts # 模型映射
│ │ ├── reasoning.ts # Reasoning 配置
│ │ ├── transformer.ts # 请求转换
│ │ ├── headers.ts # Header 生成
│ │ └── validator.ts # 请求验证
│ ├── response/ # 响应处理
│ │ ├── sse-parser.ts # SSE 解析
│ │ ├── converter.ts # 响应转换
│ │ ├── chat-completions.ts # Chat Completions 格式
│ │ └── handler.ts # 响应处理器
│ ├── prompts/ # Codex 系统提示
│ │ ├── gpt-5-1.md
│ │ ├── gpt-5-2.md
│ │ ├── gpt-5-1-codex.md
│ │ ├── gpt-5-1-codex-max.md
│ │ ├── gpt-5-1-codex-mini.md
│ │ ├── gpt-5-2-codex.md
│ │ └── index.ts
│ ├── config.ts # 配置管理
│ ├── logger.ts # 日志系统
│ ├── constants.ts # 常量定义
│ ├── types.ts # TypeScript 类型
│ ├── router.ts # API 路由
│ ├── server.ts # 服务器配置
│ └── index.ts # 入口(含自动登录)
├── public/
│ └── oauth-success.html # OAuth 成功页面
├── docker/
│ ├── Dockerfile # Docker 镜像
│ ├── docker-compose.yml # Docker Compose
│ └── .dockerignore
├── dist/ # 编译输出
├── data/ # 数据目录Token 存储)
├── logs/ # 日志目录
├── plan.md # 实施计划
├── README.md # 主文档
├── AUTO_LOGIN.md # 自动登录说明
├── QUICK_START.md # 快速开始
├── STATUS.md # 本文件
├── package.json # 项目配置
├── tsconfig.json # TypeScript 配置
└── .gitignore # Git 忽略规则
```
---
## 🎯 支持的模型
### GPT-5.1 系列
- `gpt-5.1` (none/low/medium/high) - 通用模型
- `gpt-5.1-codex` (low/medium/high) - Codex 模型
- `gpt-5.1-codex-max` (low/medium/high/xhigh) - Codex Max 模型
- `gpt-5.1-codex-mini` (medium/high) - Codex Mini 模型
### GPT-5.2 系列
- `gpt-5.2` (none/low/medium/high/xhigh) - 最新通用模型
- `gpt-5.2-codex` (low/medium/high/xhigh) - 最新 Codex 模型
---
## 📝 快速使用
### 1. 启动服务器(自动登录)
```bash
cd /home/mars/project/chatgpt-codex-router
npm start
```
### 2. 完成 OAuth 登录
- 浏览器会自动打开(如果可能)
- 登录 ChatGPT 账户
- 授权应用
- 看到"Authentication Successful"页面
### 3. 发送请求
```bash
curl http://localhost:3000/v1/chat/completions \
-H "Content-Type: application/json" \
-d '{
"model": "gpt-5.2-codex",
"messages": [{"role": "user", "content": "Hello!"}]
}'
```
---
## 🔧 配置
### 默认配置
```json
{
"server": { "port": 3000, "host": "0.0.0.0" },
"oauth": {
"clientId": "app_EMoamEEZ73f0CkXaXp7hrann",
"redirectUri": "http://localhost:1455/auth/callback",
"localServerPort": 1455
},
"backend": { "url": "https://chatgpt.com/backend-api", "timeout": 120000 },
"logging": { "level": "info", "dir": "./logs", "enableRequestLogging": false },
"codex": { "mode": true, "defaultReasoningEffort": "medium", "defaultTextVerbosity": "medium" }
}
```
### 环境变量
- `PORT` - 服务器端口(默认 3000
- `LOG_LEVEL` - 日志级别error/warn/info/debug
- `ENABLE_REQUEST_LOGGING` - 启用请求日志true/false
---
## 🐳 Docker 使用
```bash
# 构建镜像
docker build -f docker/Dockerfile -t chatgpt-codex-router .
# 运行容器
docker-compose -f docker/docker-compose.yml up -d
# 查看日志
docker-compose -f docker/docker-compose.yml logs -f
```
---
## 📊 项目统计
- **TypeScript 文件**: 24 个
- **总代码行数**: ~2000+ 行
- **API 端点**: 4 个
- **支持的模型**: 6 个系列
- **依赖包**: 15 个
- **文档文件**: 5 个
---
## ✅ 测试验证
已测试的功能:
- [x] TypeScript 编译通过
- [x] 服务器启动成功
- [x] 自动登录触发正常
- [x] OAuth 服务器启动
- [x] Token 存储和读取
- [x] 请求转换和转发
- [x] 响应格式转换
- [x] 流式和非流式响应
---
## 📚 相关文档
- **完整计划**: `plan.md`
- **项目主文档**: `README.md`
- **自动登录详解**: `AUTO_LOGIN.md`
- **快速开始指南**: `QUICK_START.md`
---
## 🎉 完成总结
所有计划的功能已实现,新增了自动登录检查功能。项目已经可以正常使用:
1. ✅ 启动时自动检查登录状态
2. ✅ 未登录时自动发起 OAuth 流程
3. ✅ Token 过期时提示重新登录
4. ✅ 所有 API 端点正常工作
5. ✅ Docker 支持完整
**项目已交付!** 🚀