Releases: ardeyouxipianyi/workbuddy2api-hub
Release list
v1.4.3 - 上游限频按模型冷却与统计修复
WorkBuddy2API-Hub v1.4.3
本版本包含两部分:合并 @shuishuipingan 的 PR #22(上游限频按模型冷却),以及一轮代码复盘后修复的数据统计与稳定性缺陷。
一、上游限频(429)按模型冷却(PR #22)
上游的 429(code 6004 usage exceeds frequency limit)是模型级的,只对某一个模型限流。此前代理把它当成账号失效,给整个账号加了 300 秒冷却,导致单账号场景下一个模型被限就把同账号其它模型一起拖成 503。
- 冷却粒度从账号级改为账号加模型级,只锁被限的那个模型,同账号其它模型继续可用;
- 冷却时长优先采用上游返回的 reset 时间,解析失败退回 60 秒;
- 直接返回 429 并附带 Retry-After 头,不再退化成 502 或 503;503 只在账号池确实为空或全部冷却时返回;
- 限频状态仅存内存、不写入凭证文件,重启自动清空。
遇到这个限频不必等重置,换一个模型或切换到另一个出口即可继续使用。
二、统计与稳定性修复
- 成长任务积分汇总:接口读取的字段名与实际返回的不一致,导致「共增加 +N 积分」始终显示 +0,即使积分已经到账;
- 猫猫旅行奖励:同类字段名不一致,每条旅行结果的奖励恒为 0;
- 按区域统计的成功率:错误日志此前不带账号信息,只能靠模型名推断归属;现在会记录实际账号与区域;
- /health:此前固定返回 intl,与实际出口无关;现在返回当前生效的区域;
- 数据看板聚合:/usage/analytics 此前是唯一没有缓存的聚合接口,而看板轮询频率为 5 秒;现已加上与其它接口一致的 10 秒缓存;
- usage-summary.json:该文件每个请求都被重写,但全项目从未读取;现已移除写入,每个请求只保留一次 JSONL 追加;
- 流式转发:两条流式路径此前只处理客户端断开,上游中途断流会漏出堆栈并让客户端收到半截流;现在会记录错误并补发结束标记;
- 出口切换持久化:active_realm.json 的路径此前在启动参数生效前就被固化,使用自定义账号目录时会读写错误位置,现已改为按需解析。
验证
- 包内 28 项检查全部通过,含 PR #21 与 v1.4.1 既有修复的回归;
- 单元测试 34 项、成长任务逻辑 20 项、限频判定 19 项与池级判定 9 项全部通过;
- 便携包已用内置 Python 3.12 运行时实测启动并响应 /health;
- 成长任务与猫猫旅行的实际到账需真实国内版账号,未在本地验证。
下载与使用
- 便携绿色包:下载下方 wb-proxy-v1.4.3.zip,内置精简 Python 运行时,解压后双击 start-wb-proxy.bat 即可启动。
- Docker 部署:重新执行 docker-compose build --no-cache && docker-compose up -d 即可。
感谢 @shuishuipingan 的限频根因定位与修复。
v1.4.2 - 成长任务、猫猫旅行与启动端口修复
WorkBuddy2API-Hub v1.4.2
本版本合并了社区贡献者 @shuishuipingan 的 PR #21,修复三类线上症状:成长任务全部 +0 积分、猫猫旅行派出 HTTP 400、启动端口冲突误判。
一、成长任务引擎(症状:一轮跑完全部「+0 积分 / 领奖稍后结算」)
- 领奖竞态:原实现上报事件后固定等待 1.5 秒立即领奖,此时上游进度尚未落账,claim 必然被拒。现改为上报后轮询任务进度、达成后再领奖,并透传上游拒绝原因,失败不再无从诊断。
- 专家/团队事件 id 去重:上游按 (eventCode, id) 去重,原实现永远复用同一个 id,导致进度纹丝不动。现按任务当前进度轮换取互不相同的 id。
- 只认桌面端真实行为的任务:「桌面对话事件链 / 浏览资料库 / 发现应用 / 企鹅教师助手」4 个任务只认桌面客户端真实动作,任何事件伪造都无效。现已诚实跳过并打印深链指引,不再输出虚假的「已上报点亮」。
- 上报主机对齐:默认上报地址改为 copilot.tencent.com,与桌面客户端真实上报行为一致。
- 夜猫子任务:仅在 23:00-08:00 上报计数,每天 1 次、累计 3 天。新增夜间上报流程并接入每日 01:00 调度,此前该整点从未真正上报过夜猫事件。
二、猫猫旅行
对齐官方前端协议:先查询 travel/config 获取目的地,再携带 location_id 派出;travel/claim 同步对齐官方请求体。修复「派出旅行失败: HTTP Error 400」。
三、启动端口冲突
- 误判修复:端口自检现在校验回包特征,可区分「本服务已在运行」与「端口被其他程序占用」,不再把别人的服务当成自己而静默退出。
- 友好报错:端口被占用时输出明确提示与 netstat 排查命令、换端口示例,替代此前的裸 traceback。
验证
- 贡献者实测:expert_5 从 3/5 到 5/5 领奖 +100;Expert_team_use_3 从 1/3 到 3/3 领奖 +100,积分实时入账;猫猫 travel/depart 返回 code=0;
- 维护者本地复核:逻辑检查 20 项、端口占用两场景与「本服务已在运行」回归、包内单元测试 34 项,全部通过;
- 便携包已用内置运行时实测启动并响应 /health,v1.4.1 的 API Key 保存修复完好。
下载与使用
- 便携绿色包:下载下方 wb-proxy-v1.4.2.zip,内置精简 Python 运行时,解压后双击 start-wb-proxy.bat 即可启动。
- Docker 部署:重新执行 docker-compose build --no-cache && docker-compose up -d 即可。
感谢 @shuishuipingan 的深入排查与上游协议逆向工作。
v1.4.1 - 修复看板 API Key 无法保存
WorkBuddy2API-Hub v1.4.1
本版本修复了看板「设置」页新建 API Key 无法保存的问题。
问题表现
在「设置 → API KEY 与出口绑定」中点击「+ 添加 API Key」时,不会弹出填写表单,而是直接生成一张显示「未设置」的空卡片。即使手工填好内容再点保存,界面也只是弹出:
保存失败: Cannot set properties of undefined (setting 'disabled')
Key 不会写入 accounts/settings.json,刷新后依然是空的。已有 Key 的启用、禁用、删除同样受影响。
原因
dashboard.html 中 addApiKeyRow 与 removeKeyRow 各被定义了两遍,脚本里后出现的旧版本覆盖了支持卡片编辑的新版本;同时 saveApiKeys 无条件读取可选的按钮参数,从 saveSingleKey、toggleKeyRow、removeKeyRow 调用时直接抛出异常,导致请求还没发出就中断。
修复内容
- 移除
addApiKeyRow/removeKeyRow的重复定义,「+ 添加 API Key」重新打开带备注名称、出口绑定、随机生成的编辑表单; saveApiKeys对可选按钮参数做空判断,保存流程不再因按钮缺失而中断。
验证
- 完整走通新建 → 保存 → 禁用 → 启用 → 删除流程,卡片状态与落盘
settings.json一致; - 包内直接调用
/panel/login与/settings/save,确认 Key 正确写入并回读; _test_custom_tools.py34 项断言全部通过。
下载与使用
- 便携绿色包:下载下方
wb-proxy-v1.4.1.zip,内置精简 Python 运行时,解压后双击start-wb-proxy.bat即可启动。 - Docker 部署:重新执行
docker-compose build --no-cache && docker-compose up -d即可。
v1.4.0 - Responses 历史推理块深度适配与消除报警
WorkBuddy2API-Hub v1.4.0
本版本重点解决了 Responses API 协议在多轮推理历史回传时的警告噪音问题,并正式兼容带思考链模型的上下文恢复 (Fixes #17)。
1. Responses API 历史思考块深度适配 (Fixes #17)
- 静默消除刷屏警告:
- 当客户端(如 Codex、Claude Code、OpenCode 等)在多轮对话中将上轮生成的思维链以
type: "reasoning"作为历史回传时,网关新增专门的分支进行合法类型识别与协议转译,彻底消除控制台与运行日志中数十上百行的[WARN] [chat] responses: WARNING unhandled input item type='reasoning'报警噪音。
- 当客户端(如 Codex、Claude Code、OpenCode 等)在多轮对话中将上轮生成的思维链以
- DeepSeek 多轮推理连贯性增强:
- 将回传的思考链文本(
summary/content)智能提取并无缝回填至紧随其后的assistant消息的reasoning_content字段,不仅消除了报错,还进一步保证了 DeepSeek-R1 / V4 等推理模型在多轮交互中的思考连贯性。
- 将回传的思考链文本(
- 单元测试全量覆盖:
- 在
_test_custom_tools.py中补充了专属测试用例,34 项断言全量通过。
- 在
2. 下载与使用
- 便携绿色包:下载下方
wb-proxy-v1.4.0.zip,内置精简 Python 运行时,解压后双击即可启动。 - Docker 部署:直接执行
docker-compose build --no-cache && docker-compose up -d重新构建即可。
v1.3.0 - 网关看板UI优化
v1.2.0 - 多账号任务支持、运行日志看板、Codex freeform 工具与大日志性能优化
WorkBuddy2API-Hub v1.2.0
本版本为重大功能与稳定性迭代版本,整合了多项核心业务升级与多位社区开发者的深度优化:国内版成长任务多账号全量批量执行、Web 面板原生「运行日志」实时看板、Codex apply_patch 自由格式工具双向兼容、大日志倒序检索与接口缓存加速、非流式工具调用挂起与过滤修复,以及并发原子写入加固。
1. 🇨🇳 国内版成长任务多账号全量批量执行 (Fixes #11)
- 多账号全量遍历与防风控:
- 修复此前「一键做任务领积分」仅为首个账号执行的问题;
POST /tasks/run默认自动遍历账号池中所有已启用的国内账号,账号间增加 1.5 秒安全等待间隔,兼顾批量效率与防风控;支持通过uid单独为指定账号打卡;POST /tasks/travel支持全量国内账号猫猫日常旅行派发与奖励汇总结算。
- Web 看板国内账号下拉选择器:
- 任务卡片右上角新增账号下拉筛选框,支持「全部国内账号 (批量)」与各独立账号间无缝切换,实时查看各账号独立的打卡天数、成长能量与任务明细。
2. 📋 新增 Web 控制台「运行日志」专属看板
- 顶栏新设「运行日志」页面:
- 与【网关与运维】、【数据指标看板】、【设置】并列,无刷新平滑切换;
- 切入时自动开启轻量增量轮询(默认每 2 秒同步最新事件),离开时自动休眠,内存环形缓冲保留最近 2000 行。
- 多维度筛选与即时搜索:
- 日志级别:一键筛选
全部/INFO/WARN/ERROR; - 业务模块:支持按
💬 对话/🐱 任务福利/⏰ 调度器/👤 账号/⚙️ 系统分类过滤; - 即时匹配:支持输入账号 UID、模型名、状态码或错误代号(如
11128、401)实时高亮过滤。
- 日志级别:一键筛选
- 专业控制台交互:
- 智能自动滚屏:默认随最新日志自动向下滚动,向上翻阅历史日志时自动挂起,滑回底部自动恢复跟随;
- 快捷操作:支持立即刷新、一键复制当前视图日志、导出下载
.log文件与清空内存日志; - 核心事件全量覆盖:自动捕获请求入站参数、流式/非流式响应耗时、Token 用量、调度器排程、猫猫旅行与错误拦截告警。
3. 🛠️ 社区 PR 合并:Codex apply_patch 自由格式工具支持 (合并 PR #12)
- 问题根因:Codex CLI (0.15x) 将改文件工具声明为 Responses API 的 custom (freeform) 语法工具,上游 Chat 接口不识别会导致模型将补丁作为普通正文吐出,工具调用静默失效。
- 出站降级 + 入站还原:
- 出站将 custom 工具转译为上游兼容的
{input: string}function 工具,并将 grammar 规范内嵌到 description; - 入站将模型的输出还原为 Responses 规范的
custom_tool_callitem 与response.custom_tool_call_input.*流式事件; - 附带 32 项确定性单元测试(
_test_custom_tools.py全部通过),MCP 与标准函数工具零影响。
- 出站将 custom 工具转译为上游兼容的
4. 🚀 社区 PR 合并:用量日志高性能倒序检索与高频缓存 (合并 PR #14)
- 告别 60 秒超时:彻底解决
usage.jsonl超过 20MB(4.5 万行+)时前端轮询争抢 Python GIL 导致的接口超时卡死; - 倒序分块读取 (
_tail_lines):从文件末尾向前分块 Seek(每次 256KB),仅回溯读取所需最近 N 行,耗时从 0.43 秒降至 1.2 毫秒; - 高频接口 TTL 缓存:为
/usage、/usage/perf、/usage/by-account加入 10 秒内存缓存,命中耗时仅 1.6~2.5 毫秒; - 前端轮询防堆叠:增加
REFRESH_BUSY状态守卫,上一轮未返回自动跳过,杜绝客户端积压。
5. 🛡️ 非流式工具调用挂起与过滤条件收敛 (Fixes #15)
finish_reason自动降级:修复非流式请求中空占位被过滤后finish_reason仍挂在"tool_calls"导致客户端死等卡死的问题,空占位过滤后自动降级为"stop";- 过滤条件严格收敛:判断条件严格收敛为只认非空函数名
name,不再漏放name: ""的残缺调用,防止多轮历史回填触发上游400 (11133 model_param_invalid)报错。
6. ⚡ 社区 PR 合并:用量持久化原子写入防并发竞争 (合并 PR #13)
- 解决高并发时多线程并发重写
usage-summary.json.tmp出现的ENOENT报错; - 临时文件名增加 PID 与线程 ID 后缀,异常路径自动清理残留
.tmp,实测 1000 次并发写入 0 失败、0 残留。
7. 🔒 其他安全与稳定性加固
- UID 路径穿越拦截:对账号导入与存储增加了严格的 UID 字符白名单与路径规范化校验,杜绝目录越界风险;
- 会话粘性路由与 Prompt Cache:基于请求历史稳定前缀派生哈希,最大化命中模型上下文缓存(实测命中率达 80%~95%);
- 11128 WAF 脱敏管线:对齐最新客户端指纹与敏感参数清洗逻辑,全面保障调用稳定性。
下载与使用
- 便携绿色包:下载下方
wb-proxy-v1.2.0.zip,内置精简 Python 运行时,解压后双击start-wb-proxy.bat(单机)或start-wb-proxy-lan.bat(局域网)即可启动。 - Docker 部署:直接执行
docker-compose up -d拉取最新代码构建镜像。
v1.1.9 - 账号池 JSON 导入导出与跨机迁移支持
WorkBuddy2API-Hub v1.1.9
本版本合并了社区 PR #5,支持账号池全量及单账号的 JSON 导出与导入,极大简化多实例备份、跨机器迁移与账号管理。
1. 账号池 JSON 导出与导入(合并 PR #5)
- 导出能力 (
GET /accounts/export):- 支持全量导出或单账号导出(
?uid=...,导出的单文件可无缝导入其他实例); - 支持按区域过滤(
?realm=intl|cn); - 支持脱敏导出(
?secrets=0,去除敏感 Token 仅保留账号元数据,便于分享报表); - 支持浏览器附件直接下载(
?download=1,文件名带安全时间戳与账号前缀)。
- 支持全量导出或单账号导出(
- 导入能力 (
POST /accounts/import):- 广泛兼容 4 种输入形状:本网关导出文件、手写裸数组、单账号对象、桌面客户端
*.info凭据; - 内置 Dry-Run 预检机制:上传后弹窗详细预览新增、覆盖、跳过、无效的具体账号名单,确认无误后再执行导入;
- 冲突保护:默认跳过同 UID 账号,可选勾选覆盖模式;
- 安全隔离:导入时自动丢弃来源实例的残留冷却与错误标记,避免带入失效状态。
- 广泛兼容 4 种输入形状:本网关导出文件、手写裸数组、单账号对象、桌面客户端
- Web 看板操作:
- 工具栏新增「导出账号」「导入账号」按钮;
- 账号列表每行新增独立「导出」按钮。
2. 验证与回归
- 已通过全量单元测试与回归测试(含导入导出、Dry-Run 状态一致性、11128 脱敏、前缀会话粘性等);
- 便携安装包内置独立 Python 运行时,验证启动正常。
v1.1.8 - 前缀会话粘性、空工具调用修复与 11128 脱敏加固
WorkBuddy2API-Hub v1.1.8
本版本合并了社区 PR #4,并系统化对齐了上游 11128 防火墙脱敏管线,显著提升对各类客户端(sub2api / DSH / Claude Code / Codex 等)的兼容性与缓存效益。
1. 合并 PR #4:修复空工具调用卡死与前缀会话粘性
- 修复空
function_call占位导致客户端卡死:上游在流末尾偶发空占位对象,原网关会错误生成空参数tool_calls导致 sub2api / DSH 等严格客户端无限等待报no terminal response event。现已在clean_chunk、Responses 帧和流聚合器中做双重严格清洗过滤; - 对话前缀派生会话粘性(Prompt Cache 命中率提升):sub2api / DSH 等客户端不发送
X-Conversation-Id会话标识,导致网关每轮对话轮换不同账号、Prompt Cache 命中率直接归零。现自动基于对话前两条稳定消息派生稳定亲和键(pfx-...),使多轮对话固定落在同一账号,实测缓存命中率从 0% 提升至 80% ~ 95%,不同对话依然保持负载均衡(支持环境变量WB_AFFINITY_BY_PREFIX=0关闭)。
2. 指纹脱敏加固(对齐 workbuddy2api,消除 11128 拦截)
- 上游反探测数字 11128 自动改写:自动将消息中出现的裸数字
11128改写为11-128,避免因引用/复述历史报错触发上游反探测规则; - 裸键名与大小写兜底:增强正则覆盖反引号引用或混合大小写的
X-Anthropic-Billing-Header,统一缩写为x-anthropic-billing-hdr破坏上游字面拦截; - 身份句与反馈句放宽:放宽 Claude Code 身份句末尾标点限制,兼容桌面端与 Agent SDK 变体;改写官方反馈句链接避免整句拦截;
- 工具调用参数全面脱敏:深度递归净化
tool_calls[].function.arguments与reasoning_content,避免因上一轮工具参数携带敏感特征导致后续全量报错; - 客户端新协议兼容:自动翻译新版 OpenAI SDK 发送的
max_completion_tokens别名为max_tokens,并自动注入流式用量选项stream_options: {"include_usage": true}。
v1.1.7 - 安全加固与审查修复
WorkBuddy2API-Hub v1.1.7
本版是一次安全加固与代码审查修复版本,来自对 v1.1.6 的完整代码审查。
1. 安全修复
- 移除可猜测的 LAN 默认密钥(重要):LAN 模式此前使用写死的
qwer.1234,而网关消耗的是你自己账号的上游额度,任何同网设备用这个公开密钥都能直接调用。现在改为首次启动自动生成高强度随机密钥并持久化到accounts/settings.json,重启复用同一密钥,终端会打印出来; - CORS 收窄:
Access-Control-Allow-Origin仅对 OpenAI 兼容 API 路径下发。管理接口(/accounts、/settings、/usage、/v1/usage、/tasks、/scheduler、/panel)不再带该头,避免局域网页面跨域读取账号与消费数据; - 移除
?panel=查询参数登录通道:面板会话令牌现在只接受X-Panel-Token请求头,避免令牌通过浏览器历史、Referer 与反代日志泄露。
2. 健壮性
- 请求体统一校验:所有请求体走同一入口,超大请求体固定返回
413,JSON 格式错误固定返回400; - 调度器防重入:新增运行锁,手动连续触发不会再与整点任务并发执行,避免重复签到触发上游频控;
- 任务失败可见:国内成长任务各接口的静默失败改为写入面板日志,接口变更不再与"今天没任务"混淆;
- 登录限速表清理:面板登录失败计数会定期清理,长期运行不再累积内存。
3. 代码清理
- 删除单账号时代的 163 行死代码(
Session类、_jwt_issuer/is_intl_credential/find_auth_file及配套常量)与无用 import; - 统一缓存命中率口径为
cached / prompt,逐条流水与聚合统计不再打架; - 看板账号行的内联事件处理器对 uid / 昵称做安全转义。
验证说明
已实机验证:单机与 LAN 模式启动、LAN 随机密钥生成与持久化、CORS 路由、认证门禁、请求体边界、调度器防重入、便携包启动。
已实测可用:Docker 部署与实际模型调用。
v1.1.6 - 官方出站指纹深度加固与核心稳定性修复
WorkBuddy2API-Hub v1.1.6
1. 防风控与官方桌面端指纹深度加固
- 官方风控门禁头:所有出站请求(对话、凭证刷新、积分账本)全量注入
X-CodeBuddy-Request: 1,消除上游 WAFcode 11140 request illegal(内容未通过安全审核)误杀; - 分域语言偏好:国际版自动注入
Accept-Language: en-US,国内版自动注入Accept-Language: zh-CN; - 官方 IDE 特征组:补齐
X-Agent-Purpose: conversation、X-IDE-Name/Type/Product: WorkBuddy与版本标,使网络层指纹与官方客户端 100% 对齐。
2. 稳定性与逻辑漏洞修复
- 调度器崩溃修复:实现
Account.can_checkin(),解决国内账号每日巡检时调度器异常抛错崩溃; - 模型缓存降级防崩溃:修复
fetch_endpoint_models回退访问不存在的顶层键导致的KeyError; - 区域判定收敛:修正
hy4-preview-f的独占标记,支持在双区域出口间正常共存并跟随网关平滑回退; - 非流式 Tool Calls 聚合:重构
aggregate_stream,支持在非流式 Chat Completions / Responses 场景下完整聚合组装tool_calls; - Responses DSML 流式缓冲:增加流式增量文本缓冲,杜绝 DeepSeek
<|DSML calls>原始标记提前泄露给下游客户端。
3. 安全防护与配置调优
- 面板暴力破解防护:
/panel/login增加单 IP 限速机制(1 分钟内超 5 次错误触发 429 封禁)与 500ms 安全退避; - 请求体大小限制:增加 50MB
Content-Length保护,超限直接阻断并返回HTTP 413; - Summary 原子写入:用临时文件结合原子重命名落盘
usage-summary.json,杜绝并发覆写导致 JSON 截断损坏; - 安全基线提升:移除 Dockerfile 与 compose 中写死的默认 API Key,改为纯净安全配置。
资源重发说明 (2026-09-16)
本 Release 的 wb-proxy-v1.1.6.zip 已重新打包上传,修复了 Dockerfile 漏拷贝 wb_settings.py 导致容器启动即报 ModuleNotFoundError: No module named 'wb_settings' 的问题。源码逻辑与版本号(1.1.6)保持不变。
- 使用便携包或直接跑源码的,不受影响;
- 使用 Docker 构建的,请重新下载本 Release 的最新 zip,或拉取 main 分支后执行 docker compose up -d --build。