Skip to content

marchFantasy/codex-manager-go

Repository files navigation

CodexManagerGo

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/                 # 额度 & 订阅信息获取

🧩 模块详解

main.go — 应用入口 & API 绑定

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 环境检测

internal/account — 账户服务

核心数据层,封装所有账户、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、额度、订阅、元数据生成列表视图

internal/auth — OAuth 认证

实现完整的 OpenAI OAuth 2.0 + PKCE 登录流程:

  1. 生成登录 URLGetLoginURL() — 生成 state、code_verifier,构建授权 URL
  2. 本地回调服务器StartCallbackServer() — 在 127.0.0.1:1455(端口自动递增)监听回调
  3. Token 交换exchangeAndPersist() — 用 authorization code 交换 access_token / refresh_token / id_token
  4. 用户信息提取:从 JWT claims 和 /v1/me API 获取 email、name、picture 等信息
  5. 异步等待WaitForLoginResult() — 前端轮询等待登录结果(超时 3 分钟)

internal/codex — Codex 集成

三个文件分别负责不同功能:

  • 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 格式),提取会话摘要(标题、消息数、时间)和消息内容

internal/usage — 额度与订阅

  • 额度获取:调用 chatgpt.com/backend-api/wham/usage 获取 rate_limit 信息,支持 Cloudflare 挑战重试和 EOF 重试
  • 订阅获取:调用 chatgpt.com/backend-api/subscriptions 获取订阅计划,优先从 Token JWT claims 中提取
  • Token 过期检测:401 响应自动标记 Token 过期状态

internal/db — 数据库

  • 使用纯 Go SQLite 驱动(modernc.org/sqlite),无需 CGO
  • 自动迁移系统:嵌入 SQL 文件,通过 schema_migrations 表跟踪版本
  • WAL 模式 + 5 秒 busy_timeout 确保并发安全

internal/httpclient — HTTP 客户端

全局共享的 HTTP 客户端,支持:

  • HTTP 代理动态配置与热更新
  • 代理连通性测试(Google / Cloudflare 检测点)
  • 线程安全的客户端实例管理

internal/logger — 日志系统

  • 文件日志 + 控制台输出
  • 自动轮转:单文件上限 5MB,最多保留 3 个备份
  • 多级别:Debug / Info / Warn / Error / Fatal
  • 自动初始化:Windows 写入 %APPDATA%/com.codexmanager.go/logs/,macOS/Linux 写入 ~/.codexmanager/logs/

internal/settings — 应用设置

键值对形式存储在 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 v2go install github.com/wailsapp/wails/v2/cmd/wails@latest
  • Node.js(如需修改前端)

开发模式

wails dev

应用将在 http://localhost:1420 启动热重载的前端开发服务器。

构建正式版

Windows:

# 正式版(无控制台窗口、无 DevTools)
build.bat

# 调试版(保留控制台、带日志)
powershell -File build-debug.ps1

macOS / 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(本地回环),不对外暴露
  • 代理密码不持久化存储

📄 License

本项目仅供个人学习和使用。

About

codex manager

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages