Skip to content

2ue/AutoTeam

 
 

Repository files navigation

AutoTeam

ChatGPT Team 账号自动轮转管理工具

自动创建账号、注册、获取 Codex 认证、检查额度、智能轮换,并同步认证文件到 CLIProxyAPI

Python Playwright uv FastAPI Vue


特性

功能 描述
📧 自动注册 创建临时邮箱 → 注册 ChatGPT → 自动填写验证码/个人信息
🔐 Codex OAuth 自动完成 Codex 登录,保存 CPA 兼容的认证文件
📊 额度检查 检测 Codex 5h 额度,token 过期自动刷新/重新登录
🔄 智能轮转 额度低于阈值自动移出,复用前验证额度,万不得已才创建新号
☁️ CPA 同步 认证文件自动上传/删除,只同步 active 账号
👥 Team 管理 自动补满/清理成员,同步 Team 实际状态
🌐 HTTP API FastAPI 接口,方便对接外部系统、定时任务
🖥️ Web 面板 Vue 3 管理面板,账号状态、操作、任务历史、巡检设置
🔍 自动巡检 后台定时检查额度,低于阈值自动触发轮转,阈值可在面板配置

快速开始

安装

# 一键安装
bash setup.sh

# 或手动
uv sync
uv run playwright install chromium

配置

cp .env.example .env   # 复制配置模板,填入实际值

.env 配置项:

配置项 说明
CloudMail 临时邮箱服务地址和凭据
CPA CLIProxyAPI 地址和管理密钥
AUTO_CHECK_THRESHOLD 额度低于此百分比触发轮转,默认 10(可在 Web 面板修改)
AUTO_CHECK_INTERVAL 巡检间隔(秒),默认 300(5 分钟)
AUTO_CHECK_MIN_LOW 至少几个账号低于阈值才触发轮转,默认 2

管理员登录改为首次启动后在 Web 页面内完成,系统会自动保存:

  • 主号邮箱
  • session token
  • 主号密码(仅当登录流程要求输入密码时保存,供主号 Codex 同步复用)
  • Workspace / account ID
  • workspace 名称

以上信息统一写入项目根目录下的 state.json 文件,不再额外保存 session

使用

uv run autoteam <command> [args]
命令 说明
admin-login [--email] 交互式完成管理员主号登录,按提示输入邮箱、密码或验证码
main-codex-sync 交互式同步主号 Codex 到 CPA,按提示输入密码或验证码
status 查看所有账号状态(自动同步 Team 实际成员)
check 检查 active 账号额度,低于阈值标记 exhausted,token 失效按历史额度判断
rotate [N] 智能轮转:检查额度 → 移出低于阈值的 → 验证旧号额度后复用 → 补满到 N 个(默认 5)
add 手动添加一个新账号
fill [N] 补满 Team 成员到 N 个(默认 5)
cleanup [N] 清理多余成员到 N 个(只移除本地管理的)
sync 手动同步认证文件到 CPA
api 启动 HTTP API 服务器(默认端口 8787)

日常只需一条命令:

uv run autoteam rotate

首次配置管理员主号也可以直接用命令行:

uv run autoteam admin-login
uv run autoteam admin-login --email you@example.com
uv run autoteam main-codex-sync

主号 Codex Sync

main-codex-sync 用于把管理员主号的 Codex 登录态单独同步到 CPA。

  • 前置条件:先完成 admin-login,让系统拿到主号邮箱、session token、workspace/account ID
  • 交互方式:命令行或 Web 都可以发起;如果流程要求密码或邮箱验证码,会继续提示输入
  • 同步结果:成功后会生成 auths/codex-main-*.json,并立即推送到 CPA
  • 作用范围:这是主号专用的 Codex 认证,不会加入账号轮转池,也不会写入普通子号的账号列表

普通的 sync 只是把当前已有的认证文件重新推送到 CPA;main-codex-sync 则是在需要时重新完成一次主号 Codex 登录,并把新的主号认证同步过去。

HTTP API

启动 API 服务器后,所有管理功能均可通过 HTTP 调用,方便对接定时任务平台、Web 面板等外部系统。

uv run autoteam api                # 默认 0.0.0.0:8787
uv run autoteam api --port 9000   # 自定义端口

启动后访问 http://localhost:8787/docs 查看交互式 API 文档(Swagger UI)。

端点一览

同步端点(即时返回)

方法 路径 说明
GET /api/status 账号状态 + active 实时额度
GET /api/accounts 所有账号列表
GET /api/accounts/active 活跃账号
GET /api/accounts/standby 待命账号
GET /api/admin/status 当前管理员登录状态
POST /api/admin/login/start 开始管理员登录 {"email":"admin@example.com"}
POST /api/admin/login/password 提交密码 {"password":"..."}
POST /api/admin/login/code 提交邮箱验证码 {"code":"123456"}
POST /api/admin/login/workspace 提交组织选择 {"option_id":"0"}
POST /api/admin/login/cancel 取消正在进行的管理员登录
POST /api/admin/logout 清除已保存的管理员登录态
GET /api/main-codex/status 当前主号 Codex 同步状态
POST /api/main-codex/start 开始主号 Codex 同步
POST /api/main-codex/password 提交主号密码 {"password":"..."}
POST /api/main-codex/code 提交主号验证码 {"code":"123456"}
POST /api/main-codex/cancel 取消正在进行的主号 Codex 同步
POST /api/sync 同步认证文件到 CPA
POST /api/sync/main-codex 兼容旧接口,等价于 /api/main-codex/start
GET /api/cpa/files CPA 认证文件列表
GET /api/config/auto-check 获取巡检配置
PUT /api/config/auto-check 修改巡检配置(运行时生效)

后台任务端点(返回 task_id,轮询获取结果)

方法 路径 说明
POST /api/tasks/rotate 智能轮转 {"target": 5}
POST /api/tasks/check 检查所有 active 额度
POST /api/tasks/add 添加新账号
POST /api/tasks/fill 补满成员 {"target": 5}
POST /api/tasks/cleanup 清理多余成员 {"max_seats": null}
GET /api/tasks 查看所有任务
GET /api/tasks/{task_id} 查看任务状态和结果

调用示例

# 查看账号状态
curl http://localhost:8787/api/status

# 触发轮转(后台执行)
curl -X POST http://localhost:8787/api/tasks/rotate \
  -H 'Content-Type: application/json' \
  -d '{"target": 5}'
# 返回: {"task_id": "a1b2c3d4e5f6", "status": "pending", ...}

# 查看任务进度
curl http://localhost:8787/api/tasks/a1b2c3d4e5f6
# 返回: {"task_id": "...", "status": "completed", "result": ..., ...}

后台任务使用线程锁防止并发冲突,同一时间只允许一个 Playwright 操作。若有任务正在执行,新请求返回 409 Conflict

Web 管理面板

启动 API 后直接访问 http://localhost:8787 即可打开 Web 面板,无需额外安装 Node.js(构建产物已内置)。

面板功能:

  • 管理员登录 — 首次启动直接输入主号邮箱,按页面提示继续提交密码或邮箱验证码,成功后自动保存登录态
  • Dashboard — 账号统计卡片(活跃/待命/用完/总计)+ 账号表格(实时额度、颜色标签、重置时间)
  • 操作面板 — 一键执行轮转、检查额度、补满、添加、清理、同步 CPA、同步主号 Codex;未完成管理员登录时自动禁用
  • 任务历史 — 所有任务记录,实时状态跟踪(等待中/执行中/已完成/失败),耗时统计
  • 巡检设置 — 可视化配置巡检间隔、额度阈值、触发账号数,修改后运行时立即生效

面板每 10 分钟自动刷新数据,有任务执行或管理员登录进行中时切换为 10 秒轮询,结束后自动恢复。

前端开发(可选):

cd web
npm install
npm run dev       # Vite dev server :5173,自动代理 /api → :8787
npm run build     # 构建产物输出到 src/autoteam/web/dist/

工作原理

轮转流程

                    ┌─────────────┐
                    │  同步 Team   │
                    │  实际状态    │
                    └──────┬──────┘
                           ▼
                    ┌─────────────┐
                    │  检查所有    │
                    │ active 额度  │
                    └──────┬──────┘
                           ▼
              ┌────────────┴────────────┐
              ▼                         ▼
        额度 ≥ 阈值 ✅          额度 < 阈值 ❌
        保持不动                  移出 Team
                                       │
                           ┌───────────┴───────────┐
                           ▼                       ▼
                    旧号额度 ≥ 阈值?         全部不可用?
                     验证后复用 ♻️           创建新号 🆕
                           │                       │
                           └───────────┬───────────┘
                                       ▼
                                ┌─────────────┐
                                │  同步到 CPA  │
                                └─────────────┘

账号状态机

  ┌──────────┐  额度<阈值  ┌───────────┐   移出Team   ┌──────────┐
  │  active  │ ──────────→ │ exhausted  │ ──────────→ │ standby  │
  └──────────┘             └───────────┘              └────┬─────┘
       ▲                                                   │
       └──────── 额度恢复(验证通过),重新加入 ───────────┘
状态 含义
active 在 Team 中,额度高于阈值
exhausted 在 Team 中,额度低于阈值,等待移出
standby 已移出 Team,等待额度恢复后复用(复用前验证)
pending 已创建,等待注册完成

项目结构

autoteam/
├── pyproject.toml              # 项目配置 + 依赖
├── setup.sh                    # 一键安装脚本
├── .env.example                # 配置模板
├── src/autoteam/
│   ├── manager.py              # CLI 入口,所有命令
│   ├── api.py                  # HTTP API(FastAPI)
│   ├── config.py               # 配置加载(从 .env)
│   ├── display.py              # 虚拟显示器自动设置
│   ├── accounts.py             # 账号池持久化管理
│   ├── chatgpt_api.py          # ChatGPT 内部 API
│   ├── cloudmail.py            # CloudMail API 客户端
│   ├── codex_auth.py           # Codex OAuth + token 管理
│   ├── cpa_sync.py             # CPA 认证文件同步
│   ├── invite.py               # 注册流程自动化
│   └── web/dist/               # 前端构建产物(已内置)
└── web/                        # 前端源码(Vue 3 + Vite + Tailwind)
    ├── src/
    │   ├── App.vue             # 主组件
    │   ├── api.js              # API 调用封装
    │   └── components/         # Dashboard / TaskPanel / TaskHistory
    ├── package.json
    └── vite.config.js

认证文件格式

兼容 CLIProxyAPI,文件名格式:codex-{email}-{plan_type}-{hash}.json

{
  "type": "codex",
  "id_token": "eyJ...",
  "access_token": "eyJ...",
  "refresh_token": "rt_...",
  "account_id": "...",
  "email": "...",
  "expired": "2026-04-20T10:00:00Z",
  "last_refresh": "2026-04-10T10:00:00Z"
}

依赖

依赖 用途
Python 3.10+ 运行环境
uv 包管理
Playwright 浏览器自动化 (Chromium)
FastAPI HTTP API 框架
Rich 终端美化输出
Vue 3 Web 管理面板前端框架
Tailwind CSS 前端样式
xvfb Linux 无头服务器虚拟显示
CloudMail Cloudflare Workers 临时邮箱服务
CLIProxyAPI Codex 代理,认证文件同步目标

友情链接

感谢 LinuxDo 社区的支持!

LinuxDo


Star History

Star History Chart

About

ChatGPT Team 账号自动轮转管理 - Codex 额度监控、自动换号、CPA 认证同步

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages

  • Python 79.2%
  • Vue 18.9%
  • JavaScript 1.4%
  • Other 0.5%