# OpenAI Pool Orchestrator
## 项目愿景
自动化 OpenAI 账号注册、Token 管理与多平台账号池维护工具。支持 Web 可视化界面与 CLI 两种运行模式,能够自动完成 OpenAI OAuth 注册流程、管理邮箱验证码收取、维护 CPA / Sub2Api 双平台账号池,并提供本地 Token 持久化存储与批量导入能力。
## 架构总览
单体 Python 应用,后端基于 FastAPI + Uvicorn,前端为原生 HTML/CSS/JS(嵌入式 SPA)。核心业务分为三大模块:注册引擎、邮箱提供商适配层、账号池维护器。通过 SSE(Server-Sent Events)实现前后端实时日志推送与任务状态同步。
**技术栈**:Python 3.10+ / FastAPI / Uvicorn / curl-cffi / aiohttp / requests
**版本**:v2.0.0(pyproject.toml)/ 前端 v5.2.1(index.html)
**协议**:MIT
**运行端口**:18421
```
openai_pool_orchestrator/ -- 项目根目录
|-- run.py -- 快捷启动脚本(Web 或 CLI 模式)
|-- pyproject.toml -- 项目元数据与依赖
|-- requirements.txt -- pip 依赖锁定
|-- Dockerfile -- Docker 构建文件
|-- docker-compose.yml -- Docker Compose 编排
|-- AGENTS.md -- Codex/Agent 使用指南
|-- config/
| `-- sync_config.example.json -- 配置模板
|-- openai_pool_orchestrator/ -- 主包
| |-- __init__.py -- 包初始化、路径常量
| |-- __main__.py -- python -m 入口、Uvicorn 启动
| |-- server.py -- FastAPI 服务、全部 REST API + SSE
| |-- register.py -- OpenAI OAuth 注册引擎(核心业务逻辑)
| |-- pool_maintainer.py -- CPA / Sub2Api 双平台池维护
| |-- mail_providers.py -- 邮箱提供商抽象层(4 种实现)
| `-- static/
| |-- index.html -- Web UI 主页面
| |-- app.js -- 前端交互逻辑
| `-- style.css -- iOS Flat Design 样式
`-- data/ -- 运行时数据(.gitignore 排除)
|-- sync_config.json -- 实际运行配置
|-- state.json -- 成功/失败计数持久化
`-- tokens/ -- 注册获取的 Token 文件
```
## 模块结构图
```mermaid
graph TD
A["(根) openai_pool_orchestrator"] --> B["openai_pool_orchestrator (主包)"]
A --> C["config"]
A --> D["run.py 启动入口"]
B --> E["server.py
FastAPI 服务"]
B --> F["register.py
注册引擎"]
B --> G["pool_maintainer.py
池维护"]
B --> H["mail_providers.py
邮箱适配层"]
B --> I["static/
Web 前端"]
E --> F
E --> G
E --> H
F --> H
click B "./openai_pool_orchestrator/CLAUDE.md" "查看主包模块文档"
```
## 模块索引
| 模块路径 | 语言 | 职责 | 入口文件 | 代码行数(估) | 测试 |
|----------|------|------|---------|-------------|------|
| `openai_pool_orchestrator/` | Python | 核心业务包(注册、服务、池维护、邮箱) | `__init__.py` / `__main__.py` | ~5800+ | 无 |
| `openai_pool_orchestrator/static/` | HTML/CSS/JS | Web 可视化界面 | `index.html` | ~2500+ | 无 |
| `config/` | JSON | 配置模板 | `sync_config.example.json` | 55 | N/A |
## 运行与开发
### 安装依赖
```bash
pip install -r requirements.txt
pip install -e . # 可编辑安装,注册 openai-pool 命令
```
### 启动方式
```bash
# Web 服务模式(推荐)
python run.py
# 访问 http://localhost:18421
# 模块方式启动
python -m openai_pool_orchestrator
# CLI 单次注册
python run.py --cli --proxy http://127.0.0.1:7897 --once
# Docker
docker compose up -d
```
### 配置
1. 复制 `config/sync_config.example.json` 为 `data/sync_config.json`
2. 在 Web UI 配置中心或直接编辑 JSON 填入敏感信息(代理、平台地址、Token、邮箱提供商配置)
3. 运行时数据持久化到 `data/` 目录
### Docker 部署
```bash
docker compose up -d
# 数据卷映射:/opt/openai-pool/data -> /app/data, /opt/openai-pool/config -> /app/config
# 使用 host 网络模式,端口 18421
```
### 语法检查
```bash
python -m compileall openai_pool_orchestrator
```
## 测试策略
**当前状态**:项目尚未建立测试套件。
**建议**:
- 测试目录:`tests/`,文件命名 `test_*.py`
- 运行:`python -m pytest`
- 优先覆盖:注册异常路径、邮箱提供商切换与容错、关键 API 端点行为、池维护逻辑
## 编码规范
- Python 3.10+ 语法,遵循 PEP 8,4 空格缩进
- 命名:模块/函数/变量 `snake_case`,类 `PascalCase`,常量 `UPPER_SNAKE_CASE`
- `server.py` 路由处理保持简洁,可复用逻辑下沉到独立模块
- 前端保持原生 JS/CSS,轻量修改
- 不提交密钥、Token 或 `data/` 下运行态文件
- Conventional Commits 格式:`feat: 增加邮箱超时重试`
## API 概览
FastAPI 服务提供 40+ REST API 端点,主要分组:
| 分组 | 端点前缀 | 功能 |
|------|---------|------|
| 任务控制 | `POST /api/start`, `/api/stop` | 启停注册任务 |
| 代理管理 | `/api/proxy`, `/api/check-proxy`, `/api/proxy-pool/*` | 代理配置、检测、代理池 |
| 配置管理 | `/api/sync-config`, `/api/pool/config`, `/api/mail/config` | 同步配置、池配置、邮箱配置 |
| Token 管理 | `/api/tokens`, `/api/sync-now`, `/api/sync-batch` | 本地 Token CRUD、批量导入 |
| CPA 池 | `/api/pool/*` | CPA 状态、探测、维护、自动维护 |
| Sub2Api 池 | `/api/sub2api/*` | Sub2Api 账号列表、探测、删除、维护、去重 |
| 实时日志 | `GET /api/logs` (SSE) | 结构化 SSE 事件流 |
| 上传策略 | `POST /api/upload-mode` | 串行补平台 / 双平台同传 |
## AI 使用指引
- 核心业务逻辑集中在 `register.py`(~1600 行)和 `server.py`(~3500 行),修改前请仔细理解上下文
- `server.py` 中 `TaskState` 类管理全局任务状态与多 Worker 运行时快照
- 邮箱提供商通过 `MailProvider` 抽象基类 + 工厂模式扩展,新增提供商需实现 `create_mailbox()` 和 `wait_for_otp()`
- 池维护器分 `PoolMaintainer`(CPA)和 `Sub2ApiMaintainer`(Sub2Api),各自独立
- 配置通过内存 + `data/sync_config.json` 双层持久化,读写有锁保护
- 前端通过 SSE 接收结构化事件(`task_snapshot`、`runtime_snapshot`、`stats`、`log` 等)
## 变更记录 (Changelog)
| 时间 | 操作 | 说明 |
|------|------|------|
| 2026-03-18 09:19:57 | 初始扫描 | 首次生成 CLAUDE.md,覆盖全部源文件 |