Skip to content

Releases: aipayim/codex-proxy

codex-proxy v2.43.0

Choose a tag to compare

@aipayim aipayim released this 02 Aug 02:34

v2.43.0 (2026-08-02)

闲置恢复安全租约与固定会话模式

🔐 安全租约(不再扫描/杀外部进程)

  • 闲置恢复不再按项目目录扫描、终止或 SIGKILL 任意 codex 进程,避免误伤人工启动的 CLI、分支或子代理
  • 每次恢复由随机运行 ID、PID、进程组和 /proc 启动时间组成的原子 JSON 租约标识;只有租约可验证时才会视为自身 runner,代理不会向外部进程发送终止信号
  • PID 复用防护:仅在 /proc 启动时间匹配时才 kill -PGID,绝不裸 kill 可能被复用的 PID
  • runner 状态文件升级 JSON schema v2:phase/pid/updatedAt/exitCode/runId/startedAt/signal/origin/detail,原子写入;HUP/INT/TERM 信号记录正确退出码

⏳ 单周期单次 + 在途请求暂缓

  • 仍有在途请求时暂缓打开新的 Codex 终端;每个项目在一次连续 Key 闲置周期只尝试一次,直到实际应用新的 Key 或修改该项目配置,修复失败后不断重放/相互终止的问题
  • 120 秒未收到 runner 状态明确记录启动超时;cmd.exe start 返回成功仅表示 Windows 已接受请求,runner 状态和真实退出信号才是诊断依据

🎯 固定会话模式(fixed_session)

  • 系统配置新增项目级 resumeMode: "fixed_session" + sessionId,仅该模式替换命令中的 {sessionId}(shell 安全引用),避免 resume --last 选到不确定的分支/子会话;普通命令模式原样执行
  • resume --last 会记录会话不确定性提示

测试:新增 test-resume-runner-lifecycle.js(真实 spawn 启动器验证租约/退出/信号),test-auto-resume-lifecycle.js 扩展(租约身份、PID 复用、固定会话模板、在途请求延后),npm test 现为 11 项全部 PASS

codex-proxy v2.42.0

Choose a tag to compare

@aipayim aipayim released this 01 Aug 13:56

v2.42.0 (2026-08-01)

错峰时段设置弹窗实时预览

  • 「⏰ 设置时段」更名「⏰ 错峰时段」,悬停显示说明
  • 弹窗新增实时预览:选定时区/开始/结束小时后即时显示窗口形态(同天窗口 08-17、跨夜窗口 22-08、全时段)与「当前时段内/外」状态(时段内绿色 ✔ 可参与调度,非时段橙色 ✖ 不参与调度)
  • 新增帮助文案:开始<结束=同天、开始>结束=跨夜、开始==结束=全天可用(等效清除)
  • README 错峰时段章节补充概述与预览说明

codex-proxy v2.41.0

Choose a tag to compare

@aipayim aipayim released this 01 Aug 08:31

v2.41.0 (2026-08-01)

源码基线文件自动识别(release-baseline.txt)

  • 代理启动时从安装目录读取 release-baseline.txt(单行 vX.Y.Z,限 4 KiB),作为源码安装的版本基线
  • 克隆/复制源码仓库或源码 ZIP 安装,即使没有构建元数据(build-info/release-manifest)也能显示本机版本并判断是否可升级
  • 基线识别优先级:① 系统配置 updateBaselineTag ② 官方发布包元数据 ③ 干净官方 Git Tag ④ 源码基线文件 ⑤ 未知(只展示 Release,不提示更新)
  • build-release.jsrelease-baseline.txt 纳入 Release 内容清单,构建时写入当前 Tag;源码仓库同步维护该文件
  • 无效/缺失的基线文件保持「基线未知」,不误报版本
  • 更新检查缓存由 6 小时调整为 1 小时
  • npm test 10 项回归测试全部 PASS(含新增 testSourceBaseline 有效/缺失/非法三态)

codex-proxy v2.40.0

Choose a tag to compare

@aipayim aipayim released this 01 Aug 07:01

v2.40.0 (2026-08-01)

容量/429 瞬态退避 + 闲置恢复可靠性

🚦 容量/429 瞬态退避(新配置)

  • 新增 capacityBackoffSeconds(默认 60)与 capacityMaxWaitSeconds(默认 300)
  • HTTP 429 与 model_at_capacity 错误改为瞬态退避:仅设 capUntil,不写 failCode——reset:"never" 的 Key 不再被冷却到整个周期,单次容量波动不会级联禁用全部 Key
  • 容量失败的请求直接重新入队而非热轮询刷遍全部 Key;队列等待上限按 capacityMaxWaitSeconds 豁免默认 30 秒超时
  • checkAllFailed 忽略纯退避 Key,避免误报 all_keys_failed
  • Dashboard「系统配置」新增容量退避配置区

🧬 闲置恢复可靠性(3 项修复)

  • ① 修复 -p 实为 codex 的 --profile 标志(并非 prompt)导致 resume --last -p ... 立即退出码 2;prompt 是位置参数,改为 resume --last \u0027<prompt>\u0027
  • ② runner 内 setsid bash -lc 把命令从终端剥离,codex resume 交互 TUI 需要 PTY;改用 script -qec 分配伪终端(保留 setsid 进程组隔离,-e 回传子命令退出码),无 script 时回退旧方式
  • triggerResume 启动前按 cwd+命令行扫描并终止项目路径下所有残留 codex 进程及其后代(避免 state_5.sqlite threads 表锁死会话);项目已有存活恢复进程或 30 秒内刚发起过启动时跳过,防重触发把仍在加载的巨型会话替换掉

测试:新增 test-capacity-backoff-lifecycle.js 回归测试,npm test 现为 10 项全部 PASS

codex-proxy v2.39.1

Choose a tag to compare

@aipayim aipayim released this 31 Jul 23:30

v2.39.1 (2026-08-01)

修复闲置恢复启动器失败

  • 修复 resume-codex.sh 闲置恢复每次触发都失败的问题:cmd.exe /c start 打开可见 Windows 终端时,WSL 路径(/mnt/c/...)以 / 开头会被 cmd 解析成开关(无效开关 - /mnt),start 立即返回退出码 1,runner 从未启动
  • 修复:启动前用 wslpath -w 将 WSL 路径转为 Windows 反斜杠形式再交给 start(无 wslpath 时回退为 C: 前缀替换),保留可见终端窗口
  • 启动器失败时把 cmd 的 stderr(GBK 转 UTF-8)写回状态文件第 5 字段,代理显示为 launcherError 并带进 auto_resume_launcher_failed 事件消息
  • 端到端实测通过:状态机 starting → running → exited 完整走通,命令真实执行

codex-proxy v2.39.0

Choose a tag to compare

@aipayim aipayim released this 31 Jul 12:12

v2.39.0 (2026-07-31)

模型级费用估算 + Codex SQLite 日志维护 + 配置保存加固

💰 模型级费用估算 (modelPricing)

  • 系统配置新增按模型定价规则数组:可对最终转发的精确模型名分别设置输入/输出单价与 bytesPerToken(最多 50 条,模型名最长 80 字符,未命中回退全局 prices/bytesPerToken
  • 每个请求在开始转发时冻结匹配的价格规则;之后保存新规则只影响新请求,不回算进行中长流或已写入统计/趋势/历史日志的费用
  • 不配置时行为与旧版本完全一致

🗄 Codex SQLite 日志维护(可选)

  • 系统配置新增开关/路径检测/容量阈值(默认 2048 MiB)/保留时长(默认 12h)/检查周期(默认 15min)/立即检查
  • 启用保存前复验当前用户 ~/.codex/ 下的常规 logs*.sqlite 文件与 logs(id, ts) 结构;支持 \\\\wsl.localhost\\发行版\\... / \\\\wsl$\\发行版\\... 自动转换为 WSL 内部路径;拒绝符号链接、-wal/-shm~/.codex/ 外文件
  • 后台独立进程以 Python 3 标准库 sqlite3 限量短事务(每轮最多 5×1000 行)删除过期行,忙时 1s 让步并下周期重试;不重启代理/watchdog/Codex CLI,不主动 VACUUM、checkpoint 或删除 WAL/SHM
  • 新增 /__codex-log-maintenance/check/__codex-log-maintenance/run 接口;Release 包含 codex-sqlite-log-maintainer.py 运行 helper

🔧 配置保存加固

  • config.json 保存改为串行队列 + 随机后缀临时文件原子写入,失败不阻塞后续保存

其他

  • npm test 扩展至 9 项回归测试(新增 config 持久化、模型定价、SQLite 维护,全部 PASS)
  • 移除误跟踪的运行时文件 config.json/keys.json/state.json(保留本地文件,GitHub 源码仓库不再跟踪)

完整变更见 README 更新日志。

codex-proxy v2.38.0

Choose a tag to compare

@aipayim aipayim released this 31 Jul 10:45

v2.38.0 (2026-07-31)

下游趋势按客户端应用归集 + 崩溃修复

  • 新增 classifyClientApp():根据 User-Agent 识别 Codex CLI / Claude Code / Cursor / Chatbox / Cherry Studio / NextChat / LobeChat / OpenAI SDK / Vercel AI SDK / curl 等下游应用
  • 趋势图「🔻 下游」改为按下游应用客户端归集请求数(堆叠柱状图,最多前 8 个应用,其余归入「其他」,悬停查看各应用次数)
  • 请求记录新增 client 维度:recordRequest 同时累计小时/日桶的 clients,日志详情显示「客户端」
  • 日志全文检索与 CSV 新增客户端列
  • 流终态不再显示于趋势图,改由日志/CSV 的「流结果/流终态原因」与 stream_terminal 事件承载
  • 修复 forwardRequestclient 未声明导致代理重启后反复崩溃并被 watchdog 重启的问题
  • 新增回归测试:recordRequest 客户端累计断言、forwardRequest 先声明 client 再调用 recordRequest 的源契约断言(npm test 6 项全部 PASS)

完整变更见 README 更新日志。

v2.37.0 — 运行时数据治理、日志轮转、上游错误捕获

Choose a tag to compare

@aipayim aipayim released this 31 Jul 10:00

v2.37.0 — 运行时数据治理、日志轮转、上游错误捕获

新增

  • proxy-log-rotator.js:WSL proxy.log 分段轮转器(当前段 10 MiB + 5 归档),缺失时 watchdog 拒绝无界启动
  • state.json 容量治理:小时/日统计保留天数(默认 35/180 天)、容量上限(默认 32 MiB)、原子替换 + .bak 损坏恢复、10 分钟压缩
  • 请求 JSONL 治理:按天分段,同时受保留期(7 天)和总容量(256 MiB)限制,单条超 512 KiB 截断
  • 上游错误捕获streamErrorMsg + 自动分类(model_at_capacity / insufficient_quota / upstream_api_error),Bearer/sk-/api_key 自动脱敏
  • 趋势图新增 2 模式:🔺 上游(域名归集)和 🔻 下游(流终态分布),共 8 模式

变更

  • codex-proxy.service:systemd 改用 journald
  • watchdog.sh:rotator 管道写入,拒绝无 rotator 启动
  • install.sh:默认 config 新增容量/保留策略字段
  • dashboard.html:系统配置新增运行时数据上限 UI
  • test-runtime-storage-lifecycle.js:新增回归测试

升级方式

备份当前代理目录及配置/状态 → 审核 Release → 手动合并需要的改动(新增 proxy-log-rotator.js 必须与 watchdog.sh 同级) → npm installnode -c proxy.js → 维护窗口重启代理

v2.36.2 — 闲置计时基线修正

Choose a tag to compare

@aipayim aipayim released this 30 Jul 05:21

v2.36.2 — 闲置计时基线修正

Fix

  • idleTicker 基线修复:从活跃切换到空闲时记录 _idleFrom=Date.now() 作为计时基线
  • 避免从很久以前的 lastKeyUseTime 直接起算导致巨量数字
  • updateAutoCountdown() / render() 统一使用 _idleFrom || lastKeyUseTime

升级方式

备份当前代理目录及配置/状态 → 审核 Release → 手动合并需要的改动 → node -c proxy.js → 维护窗口重启代理

v2.36.1 — 精确闲置时间显示与实时倒计时

Choose a tag to compare

@aipayim aipayim released this 30 Jul 04:46

v2.36.1 — 精确闲置时间显示与实时倒计时

变更

  • formatIdle():新增闲置时间精确格式化(支持 d/h/m/s 级联,秒级两位小数)
  • 面板实时刷新:新增 100ms 间隔 _idleTicker,闲置倒计时实时更新;有活跃请求时自动归零 0.00s
  • Dashboard:Key 闲置显示从分钟精度升级为精确格式(如 1d 3h 15m 30.25s
  • README:更新闲置显示文档(级联格式、自动归零)
  • .gitignore:重构为结构化规则,增加 keys/config/state 批量忽略和 .example 例外

升级方式

备份当前代理目录及配置/状态 → 审核 Release → 手动合并需要的改动 → node -c proxy.js → 维护窗口重启代理