Files
chatgpt-codex-router/STATUS.md
mars 0dd6fe2c7d feat: 实现ChatGPT Codex路由器的核心功能
- 添加完整的项目基础结构,包括配置、类型定义和常量
- 实现OAuth认证流程和令牌管理
- 开发请求转换和响应处理逻辑
- 添加SSE流处理和ChatCompletions API转换
- 实现模型映射和提示指令系统
- 包含Docker部署配置和快速启动文档
- 添加自动登录功能和测试脚本
2026-01-07 10:51:54 +08:00

7.6 KiB
Raw Permalink Blame History

ChatGPT Codex Router - 项目完成状态

项目概述

一个 OpenAI 兼容的 API 路由器,通过 OAuth 认证将请求转发到 ChatGPT 后端。

位置: /home/mars/project/chatgpt-codex-router 状态: 完成 版本: 1.0.0


已完成功能

核心功能

  • OpenAI 兼容 API (/v1/chat/completions, /v1/responses)
  • OAuth 认证PKCE 流程)
  • 自动登录检查(新增)
  • GPT-5.x 模型支持6 种模型变体)
  • 流式传输SSE 支持)
  • 自动 Token 刷新
  • 详细日志系统
  • Docker 支持

文件和文档

  • plan.md - 详细实施计划
  • README.md - 项目主文档
  • AUTO_LOGIN.md - 自动登录功能说明
  • QUICK_START.md - 快速开始指南
  • 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/

核心逻辑:

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. 启动服务器(自动登录)

cd /home/mars/project/chatgpt-codex-router
npm start

2. 完成 OAuth 登录

  • 浏览器会自动打开(如果可能)
  • 登录 ChatGPT 账户
  • 授权应用
  • 看到"Authentication Successful"页面

3. 发送请求

curl http://localhost:3000/v1/chat/completions \
  -H "Content-Type: application/json" \
  -d '{
    "model": "gpt-5.2-codex",
    "messages": [{"role": "user", "content": "Hello!"}]
  }'

🔧 配置

默认配置

{
  "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 使用

# 构建镜像
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 个

测试验证

已测试的功能:

  • TypeScript 编译通过
  • 服务器启动成功
  • 自动登录触发正常
  • OAuth 服务器启动
  • Token 存储和读取
  • 请求转换和转发
  • 响应格式转换
  • 流式和非流式响应

📚 相关文档

  • 完整计划: plan.md
  • 项目主文档: README.md
  • 自动登录详解: AUTO_LOGIN.md
  • 快速开始指南: QUICK_START.md

🎉 完成总结

所有计划的功能已实现,新增了自动登录检查功能。项目已经可以正常使用:

  1. 启动时自动检查登录状态
  2. 未登录时自动发起 OAuth 流程
  3. Token 过期时提示重新登录
  4. 所有 API 端点正常工作
  5. Docker 支持完整

项目已交付! 🚀