Skip to content

Releases: ardeyouxipianyi/workbuddy2api-hub

v1.4.3 - 上游限频按模型冷却与统计修复

Choose a tag to compare

@ardeyouxipianyi ardeyouxipianyi released this 18 Sep 14:20

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 - 成长任务、猫猫旅行与启动端口修复

Choose a tag to compare

@ardeyouxipianyi ardeyouxipianyi released this 18 Sep 12:33

WorkBuddy2API-Hub v1.4.2

本版本合并了社区贡献者 @shuishuipingan 的 PR #21,修复三类线上症状:成长任务全部 +0 积分、猫猫旅行派出 HTTP 400、启动端口冲突误判。

一、成长任务引擎(症状:一轮跑完全部「+0 积分 / 领奖稍后结算」)

  1. 领奖竞态:原实现上报事件后固定等待 1.5 秒立即领奖,此时上游进度尚未落账,claim 必然被拒。现改为上报后轮询任务进度、达成后再领奖,并透传上游拒绝原因,失败不再无从诊断。
  2. 专家/团队事件 id 去重:上游按 (eventCode, id) 去重,原实现永远复用同一个 id,导致进度纹丝不动。现按任务当前进度轮换取互不相同的 id。
  3. 只认桌面端真实行为的任务:「桌面对话事件链 / 浏览资料库 / 发现应用 / 企鹅教师助手」4 个任务只认桌面客户端真实动作,任何事件伪造都无效。现已诚实跳过并打印深链指引,不再输出虚假的「已上报点亮」。
  4. 上报主机对齐:默认上报地址改为 copilot.tencent.com,与桌面客户端真实上报行为一致。
  5. 夜猫子任务:仅在 23:00-08:00 上报计数,每天 1 次、累计 3 天。新增夜间上报流程并接入每日 01:00 调度,此前该整点从未真正上报过夜猫事件。

二、猫猫旅行

对齐官方前端协议:先查询 travel/config 获取目的地,再携带 location_id 派出;travel/claim 同步对齐官方请求体。修复「派出旅行失败: HTTP Error 400」。

三、启动端口冲突

  1. 误判修复:端口自检现在校验回包特征,可区分「本服务已在运行」与「端口被其他程序占用」,不再把别人的服务当成自己而静默退出。
  2. 友好报错:端口被占用时输出明确提示与 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 无法保存

Choose a tag to compare

@ardeyouxipianyi ardeyouxipianyi released this 18 Sep 09:24

WorkBuddy2API-Hub v1.4.1

本版本修复了看板「设置」页新建 API Key 无法保存的问题。

问题表现

在「设置 → API KEY 与出口绑定」中点击「+ 添加 API Key」时,不会弹出填写表单,而是直接生成一张显示「未设置」的空卡片。即使手工填好内容再点保存,界面也只是弹出:

保存失败: Cannot set properties of undefined (setting 'disabled')

Key 不会写入 accounts/settings.json,刷新后依然是空的。已有 Key 的启用、禁用、删除同样受影响。

原因

dashboard.htmladdApiKeyRowremoveKeyRow 各被定义了两遍,脚本里后出现的旧版本覆盖了支持卡片编辑的新版本;同时 saveApiKeys 无条件读取可选的按钮参数,从 saveSingleKeytoggleKeyRowremoveKeyRow 调用时直接抛出异常,导致请求还没发出就中断。

修复内容

  • 移除 addApiKeyRow / removeKeyRow 的重复定义,「+ 添加 API Key」重新打开带备注名称、出口绑定、随机生成的编辑表单;
  • saveApiKeys 对可选按钮参数做空判断,保存流程不再因按钮缺失而中断。

验证

  • 完整走通新建 → 保存 → 禁用 → 启用 → 删除流程,卡片状态与落盘 settings.json 一致;
  • 包内直接调用 /panel/login/settings/save,确认 Key 正确写入并回读;
  • _test_custom_tools.py 34 项断言全部通过。

下载与使用

  • 便携绿色包:下载下方 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 历史推理块深度适配与消除报警

Choose a tag to compare

@ardeyouxipianyi ardeyouxipianyi released this 18 Sep 06:18

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' 报警噪音。
  • 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优化

Choose a tag to compare

@ardeyouxipianyi ardeyouxipianyi released this 17 Sep 16:48

网关看板UI优化

v1.2.0 - 多账号任务支持、运行日志看板、Codex freeform 工具与大日志性能优化

Choose a tag to compare

@ardeyouxipianyi ardeyouxipianyi released this 17 Sep 07:09

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、模型名、状态码或错误代号(如 11128401)实时高亮过滤。
  • 专业控制台交互
    • 智能自动滚屏:默认随最新日志自动向下滚动,向上翻阅历史日志时自动挂起,滑回底部自动恢复跟随;
    • 快捷操作:支持立即刷新、一键复制当前视图日志、导出下载 .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_call item 与 response.custom_tool_call_input.* 流式事件;
    • 附带 32 项确定性单元测试(_test_custom_tools.py 全部通过),MCP 与标准函数工具零影响。

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 导入导出与跨机迁移支持

Choose a tag to compare

@ardeyouxipianyi ardeyouxipianyi released this 17 Sep 02:22

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 账号,可选勾选覆盖模式;
    • 安全隔离:导入时自动丢弃来源实例的残留冷却与错误标记,避免带入失效状态。
  • Web 看板操作
    • 工具栏新增「导出账号」「导入账号」按钮;
    • 账号列表每行新增独立「导出」按钮。

2. 验证与回归

  • 已通过全量单元测试与回归测试(含导入导出、Dry-Run 状态一致性、11128 脱敏、前缀会话粘性等);
  • 便携安装包内置独立 Python 运行时,验证启动正常。

v1.1.8 - 前缀会话粘性、空工具调用修复与 11128 脱敏加固

Choose a tag to compare

@ardeyouxipianyi ardeyouxipianyi released this 16 Sep 16:02

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.argumentsreasoning_content,避免因上一轮工具参数携带敏感特征导致后续全量报错;
  • 客户端新协议兼容:自动翻译新版 OpenAI SDK 发送的 max_completion_tokens 别名为 max_tokens,并自动注入流式用量选项 stream_options: {"include_usage": true}

v1.1.7 - 安全加固与审查修复

Choose a tag to compare

@ardeyouxipianyi ardeyouxipianyi released this 16 Sep 15:05

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 - 官方出站指纹深度加固与核心稳定性修复

Choose a tag to compare

@ardeyouxipianyi ardeyouxipianyi released this 15 Sep 15:56

WorkBuddy2API-Hub v1.1.6

1. 防风控与官方桌面端指纹深度加固

  • 官方风控门禁头:所有出站请求(对话、凭证刷新、积分账本)全量注入 X-CodeBuddy-Request: 1,消除上游 WAF code 11140 request illegal(内容未通过安全审核) 误杀;
  • 分域语言偏好:国际版自动注入 Accept-Language: en-US,国内版自动注入 Accept-Language: zh-CN
  • 官方 IDE 特征组:补齐 X-Agent-Purpose: conversationX-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。