QQ 交流群:1127955876
欢迎交流使用反馈、功能建议、部署经验和开源协作。
一个面向 Team 空间和 Free 账号池的轻量管理台,适合需要统一维护 Team、账号、席位轮转和 Sub2API 数据的个人开发者与小型团队。
Team 轮转提供前后端一体的本地管理能力:前端负责 Team 与账号记录、额度和运行状态展示,服务端负责状态持久化、额度检测、自动补位、OAuth 登录流程衔接以及 Sub2API JSON 导入/导出。项目默认以本地部署为主,不内置演示账号,也不会伪造登录、邮箱验证码、Turnstile 或浏览器设备校验结果。
项目当前定位为可替换适配层和管理工具,真实登录、Team 邀请、workspace 切换、额度查询与 Sub2API 推送均保留了独立边界,便于按实际服务环境继续接入和扩展。
- 在 Team 维护中查看所有者、席位和当前成员。
- 在 Team 成员列表中查看每个账号的 5h / 7d 额度。
- 自动踢出条件可选择 5h、7d 或按加入时间;按时间模式默认加入 12 小时后轮转,可在设置中自定义小时数。额度仍会检测并更新,但不会作为按时间模式的踢出条件。
- 从待加入池补满空席位。
- 封号检测只接受明确的 OpenAI 停用/封禁错误信号;确认后从 Team 移出、在 Free 记录中永久标记,并排除后续补位。
- 每个 Team 默认每天最多轮转 3 个账号,可在 Team 编辑中单独调整;跨日自动重置。
- 在 Free 账号维护中记录邮箱、密码/2FA 是否已录入、加入过的 Team 和 Sub2API 状态。
- 下载 Sub2API JSON,后续可替换为真实推送适配器。
- icloud-mail:另一个独立开源项目,帮助有需要的朋友注册 iCloud 邮箱,让邮箱账号更充足。
本项目采用 MIT License 开源。你可以自由使用、复制、修改、合并、发布和再授权本项目,但请保留原作者版权声明和许可声明。协议不对软件适用性、稳定性或特定用途作任何明示或默示保证;使用项目处理真实账号、凭据和第三方服务时,请自行承担相应的安全、合规与运营责任。
安装 Node.js 22.12.0 或更高的兼容版本,推荐 Node.js 24 LTS,并安装 Git。在终端运行:
git clone https://github.com/sheelkiro/auto-team-custom.git
cd auto-team-custom
npm ci
npm run build
npm run server打开 http://127.0.0.1:8786/,使用默认密码 xiaoyu 登录。不使用 Git 时,也可以在仓库页面选择 Code → Download ZIP,解压后在项目目录执行最后三条命令。首次启动是空数据,需要自行导入账号和配置服务连接;Roxy 自动授权需要另行安装 Roxy 并配置其本机 API。
npm install
npm run server在另一个终端运行前端开发服务:
npm run dev然后打开 http://localhost:5173,使用默认密码 xiaoyu 登录。开发模式需要同时运行 npm run server 和 npm run dev:Vite 将 /api 代理至本机服务端。前端和服务端默认从空状态启动,不包含预置母号、子号或历史记录。数据以服务端 data/state.json 为准;该文件使用 AES-256-GCM 加密,可以在“设置”中调整预警阈值和轮询周期。
前端不会生成演示账号。Free 账号可以通过“导入 Sub2API JSON”导入真实 accounts[].credentials 和 accounts[].extra,也可以粘贴 邮箱----密码----2FA(或使用 |、逗号)保存已完成手机号验证的登录凭据。开启自动补位后,没有 Free JSON 的账号会先通过 RT 或邮箱、密码、2FA 完成 Codex OAuth;已有 AT 过期时优先用 RT 刷新。遇到额外邮箱验证码、Turnstile 或浏览器设备校验时不会伪造成功,界面会保留验证状态。JSON 的完整凭据只提交并加密保存在服务端,界面和 API 响应只返回脱敏 token。
配置并启用 Sub2API 后,Codex OAuth 优先使用目标连接的 /api/v1/admin/openai/generate-auth-url 创建 PKCE 会话,登录完成后通过 /api/v1/admin/openai/exchange-code 换取完整凭据,再按“邮箱 + chatgpt_account_id”写入指定分组。Free JSON 使用列表中的默认连接并选择 personal 空间;Team JSON 使用该 Team 绑定的连接并选择其 accountId 空间。未配置可用连接时保留本地 PKCE 流程,生成的 JSON 仍可手动导出或推送。
混合 Sub2API 文件会按 credentials.plan_type 分流:team 记录按 chatgpt_account_id 合并为空间,并保留该空间的多个所有者;free 记录进入 Free 账号池。同一邮箱同时存在 Free 和 Team 记录时不会互相覆盖。
正式部署并由服务端提供已构建页面时,先构建再运行:
npm run build
npm run server服务监听 http://127.0.0.1:8786,并提供 /api/state、/api/history、/api/settings、/api/mothers/*(Team 所有者与空间操作)、/api/children/import、/api/children/:id/login、/api/children/:id/acquire、/api/children/:id/join、/api/children/:id/switch、/api/children/:id/kick、/api/maintenance/check、/api/maintenance/refill 和 /api/sub2api/export。Free 账号只用于登录、取得凭据和加入 Team,不单独检测额度;5h / 7d 额度只保存和检测在对应 Team 空间下。/api/state 额外返回脱敏的 teams 汇总、账号凭据状态、加入历史和 Sub2API 状态;前端同步时可传 includeHistory=false 跳过历史。/api/history?page=1&pageSize=20 返回当前页 items 及 total、totalPages 等分页信息,不带分页参数时保持返回完整数组。单个成员检测失败只记录为部分失败,不会阻断其他成员或已确认额度状态的补位。
当前版本以 package.json 的 version 为准,并在管理台显示为版本标识。项目不连接 GitHub 仓库检测更新;版本变更记录见 CHANGELOG.md。
发布时按语义化版本更新 package.json 与 package-lock.json,并补充变更记录。
- 管理台默认登录密码是
xiaoyu;启动服务端前设置TEAM_ROTATION_LOGIN_PASSWORD可覆盖。远程部署应更换强密码。登录成功后使用路径为/api的 HttpOnly、SameSite=Lax Cookie,会话有效期 7 天并仅保存在服务端内存中;服务端重启后需要重新登录,退出会使当前会话失效。 - 默认只监听
127.0.0.1。设置非本机HOST时,必须同时设置TEAM_ROTATION_API_TOKEN,否则服务拒绝启动。管理台登录不替代 API Token:配置了 Token 时,页面登录后访问受保护 API 仍需输入 Token,Token 仅保存到当前浏览器会话并在退出时清除。携带有效 Token 的程序化 HTTP 客户端可不建立管理台 Cookie 会话。 - 状态文件默认使用
data/.state-key加密;非本机监听必须设置独立的TEAM_ROTATION_DATA_KEY(32 字节 Base64、64 位十六进制或高强度口令),并单独备份该密钥。密钥丢失后无法解密状态数据。 - 跨域前端通过
TEAM_ROTATION_ALLOWED_ORIGINS配置允许来源,多个来源使用逗号分隔。默认只允许同源以及本机 Vite 开发地址。 - MCP 认证机制不受管理台登录影响:默认复用
TEAM_ROTATION_API_TOKEN,也可以单独设置MCP_AUTH_TOKEN。远程部署仍应在 HTTPS 反向代理后使用。
服务端同时提供符合 MCP Streamable HTTP 规范的 POST /mcp 端点。先启动 npm run server,然后在支持 HTTP MCP 的 Agent 中配置:
{
"mcpServers": {
"team-rotation": {
"url": "http://127.0.0.1:8786/mcp"
}
}
}只支持本地 stdio 的客户端可以使用仓库内的桥接命令(同样需要服务端运行)。将 cwd 替换为你解压或克隆项目后的实际绝对路径:
{
"mcpServers": {
"team-rotation": {
"command": "npm",
"args": ["run", "mcp"],
"cwd": "/path/to/auto-team-custom",
"env": { "QUOTA_HUB_MCP_URL": "http://127.0.0.1:8786/mcp" }
}
}
}MCP 工具包括 get_state、list_teams、list_accounts、get_history、check_team_quota、check_all_teams、refill_team、refill_all_teams、acquire_missing_free_json 和 update_settings。其中检测、补位、批量获取 Free JSON 和设置更新会真实改变系统状态;MCP 返回沿用脱敏投影,不返回完整密码、2FA、Access Token 或 refresh token。需要跨机器接入时设置 HOST=0.0.0.0 和 MCP_AUTH_TOKEN,客户端使用 Authorization: Bearer <token>。