src/app/page.tsx: 主界面(账号中心)、账号卡片、搜索、批量刷新、创建/编辑/写入本地 auth 对话框。src/app/api/profiles/route.ts: 账号列表与创建;创建支持prefetchedQuota/prefetchedFailure。src/app/api/profiles/[id]/route.ts: 单账号读取、更新(备注+rawJson)、删除。src/app/api/profiles/quota/preview/route.ts: 创建前额度预览。src/app/api/profiles/import-auth/route.ts: 从~/.codex/auth.json导入 JSON。src/app/api/profiles/[id]/replace-auth/route.ts: 将已存账号 JSON 写回~/.codex/auth.json。src/app/api/profiles/[id]/quota/refresh/route.ts: 手动刷新某个账号额度。src/app/api/profiles/[id]/quota/latest/route.ts: 获取该账号最新 quota 快照。src/lib/auth: auth JSON 检测、归一化、基础信息预览(支持tokens与openai-codex)。src/lib/quota: 上游请求、quota 解析、刷新与失效标记逻辑。src/lib/db: SQLite 初始化与兼容迁移(client.ts)+ Drizzle schema(schema.ts)。src/lib/ui: 纯 UI 逻辑工具(accountCard.ts、autoRefreshSettings.ts)。src/store/useAuthProfilesStore.ts: 前端全局状态与 API 编排。src/components/ui/ActionTooltip.tsx: 通用提示组件。db/: 本地 SQLite 文件(app.db、WAL/SHM、备份文件)。drizzle/: 迁移 SQL 与元数据快照。auth/: 本地 auth JSON 示例/临时文件(敏感,勿提交真实内容)。codex_quota.py: quota 相关独立辅助脚本。
pnpm dev: 本地开发(http://localhost:3000)。pnpm build: 生产构建。pnpm start: 本地运行生产构建。pnpm lint: ESLint 检查。pnpm test: Vitest 单次运行。pnpm db:generate: 根据src/lib/db/schema.ts生成 Drizzle migration。pnpm -s tsc --noEmit: 类型检查(推荐在 UI/store 变更后执行)。
- 使用 TypeScript 且保持
strict兼容。 - 保持现有格式:2 空格缩进、分号、双引号。
- 优先使用
@/路径别名导入src模块。 - 命名规范:组件/类型
PascalCase,函数/变量camelCase,hooks/stores 使用useXxx。 - 模块保持领域边界清晰:
auth、quota、db、ui、store,避免跨层耦合。 - API 错误响应统一走
jsonError,结构为{ error: string, ... }。
- 创建流程优先通过
POST /api/profiles/quota/preview获取预览,再调用POST /api/profiles。 prefetchedQuota与prefetchedFailure互斥;服务端会校验 endpoint 一致性与预取时效(30 分钟内)。- quota 预览遇到上游
401/403时,返回200且quota: null,并携带deactivated信息(用于前端“可保存为失效账号”流程)。 - 刷新策略按标准化 email 复用请求:同邮箱账号可共享刷新结果。
- 当上游报
401/403或明显 token 失效信号时,相关账号会被标记isDeactivated=true。 - 已停用账号禁止手动刷新(接口返回冲突错误,前端需维持禁用态)。
replace-auth仅允许sourceType === "chatgpt_tokens"的账号写入~/.codex/auth.json。
- 测试框架:Vitest(Node 环境),文件命名
*.test.ts,就近放置。 - 重点覆盖:
- auth 识别/归一化/预览解析边界(JWT、字段缺失、非法 JSON)。
- quota 解析与刷新行为(含去激活策略、同邮箱复用)。
- API 路由行为(
import-auth、replace-auth、quota/preview、创建/更新策略)。 - store 编排行为(串行刷新、并发请求覆盖、动画删除流程)。
- 提交前建议至少执行:
pnpm lint && pnpm test。 - 涉及 UI/state 变更时再加跑:
pnpm -s tsc --noEmit。
- 顶部品牌文案必须保持:
Codex Auth ManagerNext.js + SQLite 的多账号 Token 管理与额度查询面板
- 主区块标题必须是
账号中心(不要改成账号列表/账户列表)。 + 新建按钮保持在账号中心标题行操作区。- 标题旁不要展示账号总数文本。
- 停用态文案语义保持一致(如“账号已停用,手动刷新已禁用”)。
- Commit 信息保持短句祈使语气(中文或英文均可),例如:
新增认证配额接口与基础配置。 - 每个 commit 聚焦单一逻辑改动。
- PR 描述需包含:变更内容、影响路径、验证命令、环境变量/配置影响。
- 若改动 API,补充示例请求/响应(含错误场景)。
- 常用环境变量:
SQLITE_PATH:SQLite 文件路径。QUOTA_ENDPOINT:quota 上游 endpoint。HTTPS_PROXY/HTTP_PROXY/ALL_PROXY/NO_PROXY:上游请求代理控制。
- 严禁提交真实 auth JSON、access token、生产数据库快照。
db/*.db*与auth/*默认按敏感本地文件看待,提交前确认脱敏与必要性。