Spaces:
Paused
Changelog
本项目的所有重要变更都将记录在此文件中。
格式基于 Keep a Changelog。
[Unreleased]
Fixed
- 模型列表启动时不更新:token 刷新与 model fetch 存在竞态,初始 fetch 跳过后直接等 1 小时
- model-fetcher 改为 fast-retry(10s 间隔,最多 12 次),账号就绪后立即拉取
config/models.yaml补回 gpt-5.4/5.4-mini/5.3-codex(3/18 后端已恢复)
Added
- Dashboard 登录门(#141):当
proxy_api_key已配置且请求来自非 localhost 时,需输入密码才能访问控制台- Cookie-based session,TTL 由
session.ttl_minutes控制(默认 60 分钟) POST /auth/dashboard-login、POST /auth/dashboard-logout、GET /auth/dashboard-status端点- API 路由(
/v1/*)不受影响,Electron(localhost)自动跳过 - 简单防暴力:同 IP 5 次/60s 限制
- HTTPS 自动检测:反代
X-Forwarded-Proto: https时 cookie 加Secureflag - 远程 session 禁止清空
proxy_api_key(防止误操作导致登录门失效) - Header 显示条件性退出按钮
- Cookie-based session,TTL 由
- 账号封禁检测:上游返回非 Cloudflare 的 403 时自动标记为
banned状态- Dashboard 卡片/表格显示玫红色
Banned/已封禁状态徽章 - 状态筛选下拉新增
Banned选项 - 被封账号自动跳过(
acquire()仅选 active),请求时自动切换到其他账号 - 后台额度刷新周期性重试 banned 账号,成功即自动解封
- Dashboard 卡片/表格显示玫红色
- 上游 401 token 吊销("token has been invalidated")自动标记过期并切换下一个账号
- 之前 401 直接透传给客户端,不标记也不重试
- Usage Stats 页面(
#/usage-stats):累计 token 用量汇总 + 时间趋势图- 后台每 5 分钟记录用量快照,保留 7 天历史
GET /admin/usage-stats/summary实时累计汇总GET /admin/usage-stats/history?granularity=hourly|daily&hours=N时间序列增量- 纯 SVG 折线图(input/output tokens + 请求数),无外部图表库
- 支持按小时/按天粒度,24h/3d/7d 时间范围切换
- Account Management 页面(
#/account-management):批量删除、批量改状态(active/disabled)、导入导出POST /auth/accounts/batch-delete和POST /auth/accounts/batch-status批量端点- 状态摘要条可点击筛选,复用 AccountTable 选择/分页/Shift 多选
Fixed
运行时缓存(模型目录同步、版本检测结果)直接写入 git 跟踪的
config/文件,导致仓库频繁变脏model-store的syncStaticModels()改写data/models-cache.yaml(gitignored)update-checker的applyVersionUpdate()改写data/version-state.json(gitignored)config/目录现在对运行时操作只读,仅 admin API 设置变更例外
Responses SSE 新事件(
response.output_item.addedwithitem.type=message、response.content_part.added/done)未被识别,导致[CodexEvents] Unknown event日志刷屏新模型(如
gpt-5.4-mini)无法被动态发现的问题- 移除
isCodexCompatibleId()白名单过滤,信任后端/codex/models返回
- 移除
同一 Team 的多个账号因共享
chatgpt_account_id只能添加一个的问题(#126)- 去重逻辑改为
accountId + userId组合键,Team 成员各自保留独立条目 AccountEntry新增userId字段,持久化层自动回填
- 去重逻辑改为
额度耗尽账号仍显示「活跃」并接收请求的问题(#115)
markQuotaExhausted()现在可以覆盖rate_limited状态(仅延长,不缩短 reset 时间)- 后台额度刷新现在同时检查
rate_limited账号,防止因 429 短暂 backoff 导致漏检
/v1/responses不再强制要求instructions字段,未传时默认空字符串(#71)- 修复 Cherry 等第三方客户端不传
instructions时返回 400 的兼容性问题
- 修复 Cherry 等第三方客户端不传
CI 构建修复:WebSocket 传输
instructions类型不匹配(TS2322)导致 Electron/Docker 编译失败shared/i18n/translations.ts移除中英文重复selectAllkey(Vite 警告)sync-changelog.yml推送步骤加 rebase 重试(解决与 bump-electron 并行推送竞态)
Changed
- 架构重构:降低模块耦合、改善可测试性
- 提取
codex-types.ts:API 类型定义与类实现分离,20+ 文件只需类型不需类 - 提取
rotation-strategy.ts:轮换策略从 AccountPool 解耦为纯函数模块(10 新测试) - 拆分
web.ts(605 LOC)→routes/admin/(health/update/connection/settings 4 子路由) - 提取
account-persistence.ts:文件系统持久化逻辑从 AccountPool 分离为可注入接口(8 新测试) - 拆分
codex-api.ts:SSE 解析(codex-sse.ts)、用量查询(codex-usage.ts)、模型发现(codex-models.ts)独立为纯函数模块(10 新测试) - 所有提取模块通过 re-export 保持现有 import 路径兼容
- 提取
Added
- Sticky rotation strategy(#107):新增
sticky账号轮换策略,持续使用同一账号直到限速或额度耗尽src/config.ts:rotation_strategy枚举新增"sticky"选项selectByStrategy()按last_used降序排列,优先复用最近使用的账号GET/POST /admin/rotation-settings端点:读取和更新轮换策略(支持 Bearer auth)- Dashboard:RotationSettings 组件(粘滞 vs 轮换两层 radio group)
- i18n:中英文翻译(策略名称 + 描述)
- 13 个新测试覆盖 sticky 选择逻辑 + 路由端点
POST /admin/refresh-models端点:手动触发模型列表刷新,解决 model-fetcher ~1h 缓存过时导致新模型不可用的问题;支持 Bearer auth(当配置 proxy_api_key 时)- Plan routing integration tests:通过 proxy handler 完整路径验证 free/team 账号的模型路由(7 cases),覆盖 plan map 更新后请求解除阻塞的场景
Changed
- Electron 桌面端从独立分支迁移为 npm workspace(
packages/electron/),消除 master→electron 分支同步冲突;删除sync-electron.yml,release.yml 改为 workspace 感知构建 scripts/setup-curl.ts:加入 GITHUB_TOKEN 认证避免 CI rate limit;Windows DLL 名适配 v1.5+(libcurl-impersonate.dll);tar 解压 bsdtar/GNU tar 自动 fallback
Added
- Dashboard 额度设置面板:可在 Web UI 直接调整额度刷新间隔、主/次预警阈值、自动跳过耗尽账号开关,无需手动编辑 YAML;API
GET/POST /admin/quota-settings支持鉴权 (#92)
Fixed
- 删除账号后额度预警横幅未清除:
DELETE /auth/accounts/:id漏调clearWarnings(),导致已删除账号的 quota warning 残留在前端 (#100) - macOS Electron 桌面版登录报
spawn Unknown system error -86:CI 在 arm64 runner 上同时构建 arm64/x64 DMG,但只下载 arm64 的 curl-impersonate,导致 Intel Mac 用户 spawn 失败(EBADARCH);拆分为 per-arch 构建 +setup-curl.ts支持--arch交叉下载;错误提示改为明确的架构不匹配诊断 (#96) - 默认关闭 desktop context 注入:之前每次请求注入 ~1500 token 的 Codex Desktop 系统提示,导致 prompt_tokens 虚高;新增
model.inject_desktop_context配置项(默认false),需要时可手动开启 (#95)
Added
额度自动刷新 + 分层预警:后台每 5 分钟(可配置)定时拉取所有账号的官方额度,缓存到 AccountEntry 供 Dashboard 即时读取;额度达到阈值(默认 80%/90%,可自定义)时显示 warning/critical 横幅;额度耗尽的账号自动标记为 rate_limited 跳过分配,到期自动恢复 (#92)
Docker 镜像自动发布:push master 自动构建多架构(amd64/arm64)镜像到 GHCR(
ghcr.io/icebear0828/codex-proxy),docker-compose.yml 切换为预构建镜像,支持 Watchtower 自动更新双窗口配额显示:Dashboard 账号卡片同时展示主窗口(小时限制)和次窗口(周限制)的用量百分比、进度条和重置时间,后端
secondary_window不再被忽略更新弹窗 + 自动重启:点击"有可用更新"弹出 Modal 显示 changelog,一键更新后服务器自动重启、前端自动刷新,零人工干预(git 模式 spawn 新进程、Docker/Electron 显示对应操作指引)
Model-aware 多计划账号路由:不同 plan(free/plus/business)的账号自动路由到各自支持的模型,business 账号可继续使用 gpt-5.4 等高端模型 (#57)
Structured Outputs 支持:
/v1/chat/completions支持response_format(json_object/json_schema),Gemini 端点支持responseMimeType+responseSchema,自动翻译为 Codex Responses API 的text.format;/v1/responses直通text字段模型列表自动同步:后端动态 fetch 成功后自动回写
config/models.yaml,静态配置不再滞后;前端每 60s 轮询模型列表,新模型无需刷新页面即可选择Tuple Schema 支持:
prefixItems(JSON Schema 2020-12 tuple)自动转换为等价 object schema 发给上游,响应侧还原为数组;OpenAI / Gemini / Responses 三端点统一支持WebSocket 传输 +
previous_response_id多轮支持:/v1/responses端点自动通过 WebSocket 连接上游,服务端持久化 response,客户端可通过previous_response_id引用前轮对话实现增量多轮;WebSocket 失败自动降级回 HTTP SSE (#83)账号批量导入导出:Dashboard 支持导出全部账号到 JSON 文件(含 token,用于备份/迁移),支持从 JSON 文件批量导入账号,自动去重 (#82)
Fixed
- 前端缓存问题:
index.html设置Cache-Control: no-cache防止浏览器缓存旧页面,/assets/*设置 immutable 长缓存(Vite content hash)
Changed
- Light mode 背景色从
#f6f8f6改为纯白#ffffff,增大亮/暗主题视觉差异 - 提取管道强化:
extract-fingerprint.ts新增 fallback 扫描(.vite/build/*.js全文件回退)和 webview 模型发现(webview/assets/*.js),pattern 失败不再中断整个流程 - 模型/别名自动添加降级为 semi-auto:后端已通过
isCodexCompatibleId()自动合并新模型,apply-update.ts不再自动写入models.yaml(避免mutateYaml破坏 YAML 格式) - Codex Desktop 版本更新至 v26.309.31024 (build 962)
Fixed
- 自动更新重启可靠性:移除
.restart-helper.cjs临时脚本方案,改为直接 spawn 新进程 + 复用index.ts内置 EADDRINUSE 重试(10 次 × 1s);新增 nodeExe 存在性校验防止无声死亡,子进程输出写入.restart.log便于排查启动失败
Fixed (pipeline)
- Prompt 提取括号定位修复:
extractPrompts()的lastIndexOf("[")无限回溯导致匹配到无关[,截取错误代码片段产出乱码;改为 50 字符窗口内搜索 - Prompt 覆写安全校验:
savePrompt()和applyAutoChanges()新增内容验证(最小长度 50 字符、乱码行数 ≤3),拒绝将损坏数据写入config/prompts/ title-generation.md修复:还原因提取 bug 损坏的 title 生成 prompt(第 17-35 行乱码)
Changed (previous)
- 模型目录大幅更新:后端移除 free 账号的
gpt-5.4、gpt-5.3-codex全系列(plus 及以上仍可用),新旗舰模型为gpt-5.2-codex(codex别名指向此模型) - 新增模型:
gpt-5.2、gpt-5.1-codex、gpt-5.1、gpt-5-codex、gpt-5、gpt-oss-120b、gpt-oss-20b、gpt-5-codex-mini - 模型目录从 23 个静态模型精简为 11 个(匹配后端实际返回)
Fixed
- 429 真实冷却时间:从 429 错误响应体解析
resets_in_seconds/resets_at,账号按后端实际冷却期(如 free 计划 5.5 天)标记限速,不再使用硬编码 60s 默认值 (#65) - 429 自动降级:收到 429 后自动尝试下一个可用账号,所有账号耗尽后才返回 429 给客户端 (#65)
- 调度优先级优化:
least_used策略新增window_reset_at二级排序,配额窗口更早重置的账号优先使用 (#65) - JSON Schema
additionalProperties递归注入:injectAdditionalProperties()递归注入additionalProperties: false到 JSON Schema 所有 object 节点,覆盖properties、patternProperties、$defs/definitions、items、prefixItems、组合器(oneOf/anyOf/allOf)、条件(if/then/else),含循环检测;三个端点(OpenAI/Gemini/Responses passthrough)统一调用 (#64) - CONNECT tunnel header 解析:循环跳过中间 header block(CONNECT 200、100 Continue),修复代理模式下 tunnel 的
HTTP/1.1 200被当作真实状态码导致上游 4xx 错误被掩盖为 502 的问题 (#64) - 上游 HTTP 状态码透传:非流式 collect 路径从错误消息提取真实 HTTP 状态码,不再硬编码 502;提取
toErrorStatus()辅助函数统一 4 处 StatusCode 转换 (#64) - Dashboard 中英文切换按钮宽度跳变:
StableText的reference从英文硬编码改为t()动态取值,按钮宽度跟随当前语言自适应 - Dashboard "指纹更新中..." 按钮竖排显示:更新状态按钮添加
whitespace-nowrap,防止 CJK 字符逐字换行 - CI 版本跳号(v1.0.28 → v1.0.30):
sync-electron.yml的cancel-in-progress改为false,避免 workflow 被取消后 tag 已推送但版本号未同步回 master;合并两次git push为一次减少部分推送窗口 - 混合 plan 账号路由失败:free 和 team/plus 账号混用时,请求 plan 受限模型(如
gpt-5.4)可能 fallback 到不兼容的 free 账号导致 400 错误,现在严格按 plan 过滤,无匹配账号时返回明确错误而非降级 (#54) cached_tokens/reasoning_tokens透传:从 Codex API 响应的input_tokens_details和output_tokens_details中提取,传递到 OpenAI(prompt_tokens_details)、Anthropic(cache_read_input_tokens)、Gemini(cachedContentTokenCount)三种格式,覆盖流式和非流式模式 (#55, #58)- Dashboard 模型选择器使用后端 catalog 的
isDefault字段,替代硬编码gpt-5.4 - Docker 端口修复:锁定容器内
PORT=8080(environment覆盖env_file),HEALTHCHECK 固定检查 8080,.env的 PORT 仅控制宿主机暴露端口,修复自定义 PORT 时健康检查失败和端口映射不匹配的问题 (#40) - Docker Compose 暴露 OAuth 回调端口 1455,修复容器内登录时 "Operation timed out" 的问题
- README Docker 快速开始补充
cp .env.example .env步骤,修复新用户因缺少.env文件导致docker compose up -d启动失败的问题 (#38) - 识别
response.output_item.done、response.incomplete、response.queuedCodex SSE 事件,消除 "Unknown event" 日志噪音 - 剥离
service_tier字段:Codex 后端不接受请求体中的service_tier,现在 proxy 在发送前自动移除,修复-fast后缀导致 "Unsupported service_tier" 报错 - 更新 gpt-5.4 推理等级:
minimal→none,新增xhigh(与后端实际支持的值对齐) - 添加
OpenAI-Beta请求头:与 Codex Desktop 保持一致(responses_websockets=2026-02-06) - 流式 SSE 请求不再设置
--max-time墙钟超时,修复思考链(reasoning/thinking)在 60 秒处中断的问题;连接保护由 header 超时 + AbortSignal 提供,非流式请求(models、usage)超时不受影响
Added
/v1/responses端点:Codex Responses API 直通,无格式转换,支持原始 SSE 事件流和多账号负载均衡模型名后缀系统:通过模型名嵌入推理等级和速度模式(如
gpt-5.4-high-fast),CLI 工具(Claude Code、opencode 等)无需额外参数即可控制推理强度和 Fast 模式service_tier后缀解析:通过-fast/-flex模型名后缀解析,保留在 proxy 层元数据中(Codex 后端不接受service_tier请求体字段,Desktop 在 app-server 层处理)Dashboard Speed 切换:模型选择器下方新增 Standard / Fast 速度切换按钮
代理分配管理页面(
#/proxy-settings):双栏矩阵式布局,批量管理数百账号的代理分配- 左栏代理组列表:按 Global/Direct/Auto/各代理分组显示计数徽章,点击筛选
- 右栏账号表格:搜索、状态筛选、分页(50条/页)、Shift+点击连续多选、每行独立代理下拉
- 批量操作栏:批量设为指定代理、均匀分配到所有活跃代理(round-robin)、按规则分配
- 导入导出:导出 JSON 分配文件、导入后预览 diff 再确认应用
- Hash 路由零依赖切换,Header 导航链接(Dashboard ↔ 代理分配)
- 后端新增 6 个批量 API:assignments 列表/批量分配/规则分配/导出/导入预览/应用导入
代理池功能:支持为不同账号配置不同的上游代理,实现 IP 多样化和风险隔离
- 代理 CRUD:添加、删除、启用、禁用代理(HTTP/HTTPS/SOCKS5)
- 四种分配模式:Global Default(全局代理)、Direct(直连)、Auto(Round-Robin 轮转)、指定代理
- 健康检查:定时(默认 5 分钟)+ 手动,通过 ipify API 获取出口 IP 和延迟
- 不可达代理自动标记为 unreachable,不参与自动轮转
- Dashboard 代理池管理面板:添加/删除/检查/启用/禁用代理
- AccountCard 代理选择器:每个账号可选择代理或模式
- 全套 REST API:
/api/proxiesCRUD +/api/proxies/assign分配管理 - 持久化:
data/proxies.json(原子写入,与 cookies.json 同模式) - Transport 层支持 per-request 代理:
TlsTransport接口新增可选proxyUrl参数
Dashboard GitHub Star 徽章:Header 新增醒目的 ⭐ Star 按钮(amber 药丸样式),点击跳转 GitHub 仓库页面,方便用户收藏和获取更新
Dashboard 检查更新功能:Footer 显示 Proxy 版本+commit 和 Codex Desktop 指纹版本,提供"检查更新"按钮同时检查两种更新
- Proxy 自更新(CLI 模式):通过
git fetch检查新提交,自动执行git pull + npm install + npm run build,完成后提示重启 - Codex 指纹更新:手动触发现有 appcast 检查,自动应用指纹/模型配置变更
- Docker 兼容:指纹可自动更新,代理代码提示手动
docker compose up -d --build - Electron 兼容:显示版本信息,更新由桌面应用管理
- Proxy 自更新(CLI 模式):通过
GET /admin/update-status端点:返回 proxy 和 codex 两种更新的当前状态POST /admin/check-update端点:同时触发 proxy 自检 + codex 指纹检查,自动应用可用更新src/self-update.ts:Proxy 自更新模块(git 子进程实现,支持检查/拉取/构建)GPT-5.4 + Codex Spark 模型支持:新增
gpt-5.4(4 种 effort: minimal/low/medium/high)和gpt-5.3-codex-spark(minimal/low),codex别名更新为gpt-5.4扩展推理等级:支持
minimal、xhigh等新 effort 值,客户端发送的任意reasoning_effort均透传到后端模型家族矩阵选择器:Dashboard 模型选择从平面下拉改为家族列表 + 推理等级按钮组,通过
/v1/models/catalog端点获取完整目录泛化模型识别:
isCodexCompatibleId()同时匹配gpt-X.Y-codex-*和裸gpt-X.Y格式,确保新模型命名规范变化时自动接入代码示例动态 reasoning_effort:CodeExamples 组件根据选中的推理等级自动插入
reasoning_effort参数Reasoning/Thinking 输出支持:始终向 Codex API 发送
summary: "auto"以获取推理摘要事件;OpenAI 路由在客户端发送reasoning_effort时以reasoning_content输出;Anthropic 路由在客户端发送thinking.type: enabled/adaptive时以 thinking block 输出;未知 SSE 事件记录到 debug 日志以便发现新事件类型图片输入支持:OpenAI、Anthropic、Gemini 三种格式的图片内容现在可以正确透传到 Codex 后端(
input_image+ data URI),此前图片被静默丢弃每窗口使用量计数器:Dashboard 主显示当前窗口内的请求数和 Token 用量,累计总量降为次要灰色小字;窗口过期时自动归零(时间驱动,零 API 开销),后端同步作为双保险校正
窗口时长显示:从后端同步
limit_window_seconds,AccountCard header 显示窗口时长 badge(如3h),重置时间行追加窗口时长文字Dashboard 账号列表新增手动刷新按钮:点击重新拉取额度数据,刷新中按钮旋转并禁用;独立
refreshing状态确保刷新时列表不清空;标题行右侧显示"更新于 HH:MM:SS"时间戳(桌面端可见)空响应计数器:每个账号追踪
empty_response_count,通过GET /auth/accounts可查看,窗口重置时自动归零空响应日志增强:日志中显示账号邮箱(
Account xxxx (email) | Empty response),便于定位问题账号空响应检测 + 自动换号重试:Codex API 返回 HTTP 200 但无内容时,非流式自动切换账号重试(最多 3 次),流式注入错误提示文本
自动提取 Chromium 版本:
extract-fingerprint.ts从package.json读取 Electron 版本,通过electron-to-chromium映射为 Chromium 大版本,apply-update.ts自动更新chromium_version和 TLS impersonate profile动态模型列表:后台从 Codex 后端自动获取模型目录,与静态 YAML 合并(
src/models/model-store.ts、src/models/model-fetcher.ts)/debug/models诊断端点,展示模型来源(static/backend)与刷新状态完整 Codex 模型目录:GPT-5.3/5.2/5.1 全系列 base/high/mid/low/max/mini 变体(23 个静态模型)
OpenCode 平台支持(
opencode.json配置文件)Vitest 测试框架(account-pool、codex-api、codex-event-extractor 单元测试)
request-id 中间件注入全局请求链路 ID
Dockerfile 安全加固(非 root 用户运行、HEALTHCHECK 探针)
Changed
- Dashboard 模型选择器去重:移除 Anthropic SDK Setup 的独立模型下拉框,统一使用 API Configuration 的 Default Model
- 模型管理从纯静态 YAML 迁移至静态+动态混合架构(后端优先,YAML 兜底)
- 默认模型改为
gpt-5.2-codex - Dashboard "Claude Code Quick Setup" 重命名为 "Anthropic SDK Setup"
/health端点精简,仅返回 pool 摘要(total / active)
Fixed
- Anthropic 路由
thinking/redacted_thinkingcontent block 验证失败:Claude Code/compact发送含 extended thinking 的对话历史时触发 400 Zod 错误,现已添加到 schema - Anthropic 路由上下文 token 始终显示 0%:
message_delta事件缺少input_tokens,Claude Code 无法计算上下文占比,现在从response.completed提取后一并返回 - 工具 schema 缺少
properties字段导致 400 错误:MCP 工具发送{"type":"object"}无properties时,Codex 后端拒绝请求;现在所有格式转换器(OpenAI/Anthropic/Gemini)统一注入properties: {}(PR #22) - 额度窗口刷新后 Dashboard 仍显示累计 Token:本地计数器从未按窗口重置,现在
refreshStatus()每次 acquire/getAccounts 时检查window_reset_at,过期自动归零窗口计数器 - 空响应重试循环中账号双重释放:外层 catch 使用原始
entryId而非当前活跃账号,导致换号重试失败时 double-release(proxy-handler.ts) apply-update.ts模型比较不再误报删除:静态提取只含 2 个硬编码模型,与 YAML 的 24 个比较会产生 22 个假删除,现在只报新增update-checker.ts子进程超时保护:fork()添加 5 分钟 kill timer,防止挂起导致_updateInProgress永久锁定model-fetcher.ts初始定时器添加 try/finally,防止异常中断刷新循环apply-update.ts移除any类型(mutateYaml回调参数)ExtractedFingerprint接口统一:提取到scripts/types.ts共享,extract-fingerprint.ts和apply-update.ts共用- 强化提示词注入防护:
SUPPRESS_PROMPT从弱 "ignore" 措辞改为声明式覆盖("NOT applicable"、"standard OpenAI API model"),解决 mini 模型仍泄露 Codex Desktop 身份的问题 - 非流式请求错误处理:
collectTranslator抛出 generic Error 时返回 502 JSON 而非 500 HTML(proxy-handler.ts) desktop-context.md提取损坏修复:extractPrompts()的 end marker 从`;改为`[,;)]正则,防止压缩 JS 代码注入 instructions 导致 tool_calls 失效(#13)- 清除
config/prompts/desktop-context.md中第 71 行起被污染的 ~7KB JS 垃圾代码 - TLS 伪装 profile 确定性解析:用已知 Chrome profile 列表(
KNOWN_CHROME_PROFILES)替代不可靠的 runtime 检测,确保--impersonate目标始终有效(如chrome137→chrome136) - FFI transport 硬编码
"chrome136"改为使用统一解析的 profile(getResolvedProfile()) getModels()死代码:allModels作用域修复,消除不可达分支reloadAllConfigs()异步 lazy import 改为同步直接导入,避免日志时序不准- 模型合并 reasoning efforts 判断逻辑从
length > 1改为显式标志 scheduleNext()添加 try/finally 防止异常中断刷新循环- 未认证启动时抑制无意义的 warn 日志
getModelCatalog()/getModelAliases()返回浅拷贝,防止外部意外修改ClaudeCodeSetup.tsx文件名与导出名不一致,重命名为AnthropicSetup.tsx- Dashboard 模型偏好从硬编码
gpt-5.2-codex改为使用codex别名 - 构建脚本
vite build --root web兼容性问题,改用npm run build:web - Docker 容器内代理自动检测失败:
detectLocalProxy()现在同时探测127.0.0.1(裸机)和host.docker.internal(Docker 容器→宿主机),零配置即生效
v0.8.0 - 2026-02-24
Added
- 原生 function_call / tool_calls 支持(所有协议)
Fixed
- 格式错误的 chat payload 返回 400
invalid_json错误
v0.7.0 - 2026-02-22
Added
developer角色支持(OpenAI 协议)- 数组格式 content 支持
- tool / function 消息兼容(所有协议)
- 模型响应中自动过滤 Codex Desktop 指令
Changed
- 清理无用代码、未使用配置,修复类型违规
Fixed
- 启动日志显示配置的
proxy_api_key而非随机哈希 - 首次 OAuth 登录后
useStatus未刷新
v0.6.0 - 2026-02-21
Added
- libcurl-impersonate FFI 传输层,Chrome TLS 指纹
- pnpm / bun 包管理器支持
Changed
- README 快速开始按平台重组
Fixed
- Docker 构建完整修复链(代理配置、BuildKit 冲突、host 网络、源码复制顺序、layer 优化)
.env行内注释被误解析为 JWT token- Anthropic / Gemini 代码示例跟随所选模型
proxy_api_key配置未在前端和认证验证中使用- 删除按钮始终可见,不被状态徽章遮挡
v0.5.0 - 2026-02-20
Added
- Dashboard 暗色 / 亮色主题切换
- 国际化支持(中文 / 英文)
- 自动代理检测(mihomo / clash / v2ray)
- 局域网登录分步教程
- Preact + Vite 前端架构
- Docker 容器部署支持
- 共享代理处理器,消除路由重复
Changed
- Dashboard 重写为 Tailwind CSS
- 协议 / 语言两级标签页(OpenAI / Anthropic / Gemini × Python / cURL / Node.js)
- 内联 SVG 图标替换字体图标
- 系统字体替换 Google Fonts
- 架构审计修复(P0-P2 稳定性与可靠性)
Fixed
- 移除所有
any类型 - 修复图标文字闪烁(FOUC)
- 修复未认证时的重定向循环
- 移除虚假的 Claude / Gemini 模型别名,使用动态目录
- Dashboard 配置改为只读,修复 HTTP 复制按钮
- 恢复模型下拉选择器
v0.4.0 - 2026-02-19
Added
- Anthropic Messages API 兼容路由(
POST /v1/messages) - Google Gemini API 兼容路由
- 桌面端上下文注入(模拟 Codex Desktop 请求特征)
- 多轮对话会话管理
- 自动更新检查管道(Appcast 轮询 + 版本提取)
- 中英双语 README
v0.3.0 - 2026-02-18
Added
- curl-impersonate TLS 指纹模拟
- Chromium 版本自动检测与动态
sec-ch-ua生成 - 请求时序 jitter 随机化
- Dashboard 实时代码示例与配额显示
Fixed
- curl 请求修复
v0.2.0 - 2026-02-17
Added
- Dashboard 多账户管理 UI
- OAuth PKCE 登录流程(固定
localhost:1455回调) - 架构审计:伪装加固、自动更新机制、健壮性提升
Changed
- 硬编码值提取到配置文件
- 清理无用代码
v0.1.0 - 2026-02-17
Added
- OpenAI
/v1/chat/completions→ Codex Responses API 反向代理核心 - 配额 API 查询(
/auth/accounts?quota=true) - Cloudflare TLS 指纹绕过
- SSE 流式响应转换
- 模型列表端点(
GET /v1/models) - 健康检查端点(
GET /health)