OpenAI Codex 多账户管理工具 — Go 桌面版
CodexManagerGo 是一个基于 Wails v2 构建的跨平台桌面应用,用于集中管理多个 OpenAI / ChatGPT 账户。支持账户导入、OAuth 登录、额度查询、订阅信息同步、会话历史浏览以及一键切换当前 Codex 活跃账户等功能。
| 功能模块 | 说明 |
|---|---|
| 多账户管理 | 支持添加、删除、编辑、排序多个 OpenAI 账户,带备注和标签 |
| OAuth 登录 | 基于 PKCE 的 OAuth 2.0 授权码流程,通过本地回调服务器自动完成登录 |
| 账户导入 | 从 Codex 本地 auth.json 或手动粘贴 JSON 内容批量导入账户 |
| 额度监控 | 实时查询账户的 API 使用额度(主/次窗口)、重置时间 |
| 订阅信息 | 获取并展示账户的订阅计划类型、到期/续费时间 |
| 一键切换 | 将选定账户写入 Codex auth.json 并自动重启 Codex 桌面端 |
| 会话浏览 | 读取并展示本地 Codex 会话历史记录(.jsonl 格式) |
| 代理设置 | 支持 HTTP 代理配置与连通性测试 |
| 批量预热 | 批量刷新所有账户的额度和订阅信息 |
| 浏览器检测 | 自动检测系统已安装的浏览器,支持指定浏览器打开链接 |
| 跨平台 | 支持 Windows、macOS、Linux |
| 层级 | 技术 |
|---|---|
| 后端框架 | Go 1.25 |
| 桌面框架 | Wails v2 — Go + WebView2 混合架构 |
| 前端 | 嵌入式 Web 前端(frontend/dist,通过 go:embed 打包) |
| 数据库 | SQLite(纯 Go 驱动 modernc.org/sqlite,无 CGO 依赖) |
| 认证 | OpenAI OAuth 2.0 + PKCE(auth.openai.com) |
codex-manager-go/
├── main.go # 应用入口 & Wails 绑定层(App 结构体)
├── wails.json # Wails 项目配置
├── go.mod / go.sum # Go 模块依赖
├── build.bat # Windows 正式版构建脚本
├── build-debug.ps1 # Windows 调试版构建脚本(PowerShell)
├── migrations/
│ └── 001_init.sql # 数据库初始化迁移(顶层副本)
├── frontend/
│ ├── dist/ # 前端构建产物(嵌入到二进制)
│ └── wailsjs/ # Wails 自动生成的 JS 绑定
└── internal/ # 核心业务逻辑(9 个包)
├── account/ # 账户 CRUD、Token 管理、使用快照
├── auth/ # OAuth 2.0 登录流程(PKCE)
├── codex/ # Codex 环境检测、账户切换、会话管理
├── db/ # SQLite 数据库初始化 & 自动迁移
├── httpclient/ # 全局 HTTP 客户端(代理支持)
├── logger/ # 文件日志 + 自动轮转
├── settings/ # 应用配置持久化
├── types/ # 全局类型定义
└── usage/ # 额度 & 订阅信息获取
App 结构体作为 Wails 的绑定对象,其公开方法自动暴露给前端调用。主要 API 分类如下:
| 分类 | 方法 | 说明 |
|---|---|---|
| 账户 | AccountList / AccountGet / AccountDelete |
账户列表、详情、删除 |
| 账户 | AccountUpdateLabel / AccountUpdateStatus / AccountUpdateMetadata |
更新标签、状态、备注 |
| 认证 | AuthGetLoginURL / AuthWaitForLogin / AuthHandleCallback |
OAuth 登录全流程 |
| 导入 | ImportFromCodexAuth / ImportFromCodexAuthJSON |
从文件或 JSON 导入 |
| 额度 | UsageRefresh / SubscriptionRefresh |
刷新单个账户额度/订阅 |
| 切换 | SwitchCurrentAccount |
切换 Codex 当前账户并重启 |
| 预热 | WarmupAccounts |
批量刷新所有账户状态 |
| 会话 | CodexSessionList / CodexSessionGet / CodexSessionDelete |
会话历史管理 |
| 设置 | SettingsGet / SettingsSet / SetProxySettings / TestProxy |
应用设置与代理 |
| 工具 | DetectCodexInstallation / DetectBrowsers / OpenURL |
环境检测 |
核心数据层,封装所有账户、Token、使用快照、订阅信息的 CRUD 操作:
- 账户管理:
List/Get/Insert(Upsert) /Delete/UpdateStatus/UpdateLabel - 排序控制:
UpdateSort/MoveToTop/NextSort— 支持手动排序和置顶 - Token 管理:
InsertToken/GetToken/ListTokens/SetTokenExpired - 使用快照:
InsertUsage/GetLatestUsage— 记录额度使用历史 - 订阅信息:
UpsertSubscription/GetSubscription - 元数据:
UpsertAccountMetadata/GetAccountMetadata— 备注和标签 - 聚合查询:
ListAccountSummaries— 组合账户、Token、额度、订阅、元数据生成列表视图
实现完整的 OpenAI OAuth 2.0 + PKCE 登录流程:
- 生成登录 URL:
GetLoginURL()— 生成 state、code_verifier,构建授权 URL - 本地回调服务器:
StartCallbackServer()— 在127.0.0.1:1455(端口自动递增)监听回调 - Token 交换:
exchangeAndPersist()— 用 authorization code 交换 access_token / refresh_token / id_token - 用户信息提取:从 JWT claims 和
/v1/meAPI 获取 email、name、picture 等信息 - 异步等待:
WaitForLoginResult()— 前端轮询等待登录结果(超时 3 分钟)
三个文件分别负责不同功能:
detect.go— 检测 Codex 安装、读取auth.json/auth/目录、解析多种格式的认证文件、JWT 解码、切换当前账户(写入auth.json)、重启 Codex 桌面端(Windows/macOS/Linux)import.go— 从 Codex 本地文件或 JSON 内容批量导入账户,支持智能去重(按 chatgpt_account_id / workspace_id / subject / account_id 匹配已有账户)sessions.go— 读取 Codex 会话历史(.jsonl格式),提取会话摘要(标题、消息数、时间)和消息内容
- 额度获取:调用
chatgpt.com/backend-api/wham/usage获取 rate_limit 信息,支持 Cloudflare 挑战重试和 EOF 重试 - 订阅获取:调用
chatgpt.com/backend-api/subscriptions获取订阅计划,优先从 Token JWT claims 中提取 - Token 过期检测:401 响应自动标记 Token 过期状态
- 使用纯 Go SQLite 驱动(
modernc.org/sqlite),无需 CGO - 自动迁移系统:嵌入 SQL 文件,通过
schema_migrations表跟踪版本 - WAL 模式 + 5 秒 busy_timeout 确保并发安全
全局共享的 HTTP 客户端,支持:
- HTTP 代理动态配置与热更新
- 代理连通性测试(Google / Cloudflare 检测点)
- 线程安全的客户端实例管理
- 文件日志 + 控制台输出
- 自动轮转:单文件上限 5MB,最多保留 3 个备份
- 多级别:
Debug/Info/Warn/Error/Fatal - 自动初始化:Windows 写入
%APPDATA%/com.codexmanager.go/logs/,macOS/Linux 写入~/.codexmanager/logs/
键值对形式存储在 SQLite app_settings 表中,支持的配置项:
| 配置键 | 说明 | 默认值 |
|---|---|---|
route_strategy |
路由策略 | ordered |
locale |
语言 | zh-CN |
theme |
主题 | tech |
appearance_preset |
外观预设 | classic |
proxy_enabled / proxy_host / proxy_port |
代理设置 | 禁用 |
auto_refresh_interval |
自动刷新间隔 | 0(关闭) |
┌──────────────────┐ 1:1 ┌──────────────┐
│ accounts │◄────────────│ tokens │
│ (主键: id) │ │ (主键: aid) │
│ label, email │ │ access_token │
│ status, sort │ │ refresh_token │
│ chatgpt_acct_id │ │ id_token │
│ workspace_id │ └──────────────-┘
│ preferred │
│ token_expired │ 1:1 ┌──────────────────────┐
│ created/updated │◄────────────│ account_metadata │
└──────────────────┘ │ (备注 note, 标签 tags)│
│ └──────────────────────┘
│ 1:N
▼ ┌──────────────────────┐
┌──────────────────┐ 1:1 │ account_subscriptions │
│ usage_snapshots │◄───────────│ has_subscription │
│ used_percent │ │ plan_type │
│ window_minutes │ │ expires_at │
│ resets_at │ │ renews_at │
│ credits_json │ └──────────────────────┘
│ plan_type │
└──────────────────┘
┌──────────────────┐
│ app_settings │
│ (键值对存储) │
└──────────────────┘
- Go ≥ 1.25
- Wails CLI v2:
go install github.com/wailsapp/wails/v2/cmd/wails@latest - Node.js(如需修改前端)
wails dev应用将在 http://localhost:1420 启动热重载的前端开发服务器。
Windows:
# 正式版(无控制台窗口、无 DevTools)
build.bat
# 调试版(保留控制台、带日志)
powershell -File build-debug.ps1macOS / Linux:
wails build -clean构建产物输出到 build/bin/ 目录。
| 变量 | 说明 | 默认值 |
|---|---|---|
CODEX_HOME |
Codex 配置目录 | ~/.codex |
CODEXMANAGER_DB_PATH |
数据库文件路径 | %APPDATA%/com.codexmanager.go/codexmanager.db |
CODEXMANAGER_ISSUER |
OAuth Issuer URL | https://auth.openai.com |
- 所有 Token 存储在本地 SQLite 数据库中,文件权限
0600 - OAuth 登录使用 PKCE 流程,无需暴露 client_secret
- 回调服务器仅监听
127.0.0.1(本地回环),不对外暴露 - 代理密码不持久化存储
本项目仅供个人学习和使用。