feat: 实现ChatGPT Codex路由器的核心功能
- 添加完整的项目基础结构,包括配置、类型定义和常量 - 实现OAuth认证流程和令牌管理 - 开发请求转换和响应处理逻辑 - 添加SSE流处理和ChatCompletions API转换 - 实现模型映射和提示指令系统 - 包含Docker部署配置和快速启动文档 - 添加自动登录功能和测试脚本
This commit is contained in:
278
STATUS.md
Normal file
278
STATUS.md
Normal 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 支持完整
|
||||
|
||||
**项目已交付!** 🚀
|
||||
Reference in New Issue
Block a user