Skip to content

Releases: CangShui/workbuddy-gateway

v1.12.0

Choose a tag to compare

@CangShui CangShui released this 17 Sep 08:49

WorkBuddy Local Gateway v1.12.0

本次更新把模型目录改为服务端实时接口,加入价格自动探测免费站点优先reset 命令,并把 monitor 的平均值改为真实的 5 小时滚动窗口。

模型目录:实时接口 + npm 目录

  • 列表来源为 GET {Base}/v2/enterprises/personal/models(国内站 copilot.tencent.com、国际站 www.workbuddy.ai)与 npm 包静态目录,按模型 ID 去重、接口优先
  • 兜底链:两路都失败用本地缓存;一路成功即用该路;都失败且无缓存时该站点本轮不展示模型(不影响模型调用,调用始终透传)。
  • 官方客户端显示的 0.00x / Free now 就来自同一份实时数据;服务端新增的模型(如 deepseek-v4.1-flashglm-5.3hy3-xkimi-k2.8-preview)无需更新二进制即可出现。合并后模型数由 31 增至 50。

模型倍率与价格探测

  • 生效倍率 = credits × 促销 factor;命中 factor=00.00x
  • 促销过期时接口的 credits 不可信(上游会把促销价固化进 credits),或模型不在接口目录中时,由余额未耗尽的同站点账号发一次最小请求实测:
    • 探测免费 → 展示 0.00x,并每 12 小时复测确认
    • 探测收费 → 展示 收费(倍率未知),直到接口重新给出未过期的 0.00x
    • 14018 / 无 usage.credit / 样本过小 → 不覆盖,保持未知
  • 探测调度:启动后约 20 秒首轮;首次或 reset 后单轮最多 30 个;仍有待探测时用 2 分钟短间隔追赶,收敛后回到 30 分钟;每模型 12 小时最多一次;目录刷新或凭据变化立即触发。
  • 探测账号优先级:已知有余额 → 额度未知(部分账号计费接口返回 20017)→ 跳过已知耗尽。

免费站点优先

同一模型若「一个站点免费、另一个站点收费」,优先使用免费站点的账号,直到该站点账号全部不可用(冷却 / 耗尽 / 失效)才回退;两个站点都免费或都收费(仅倍率不同)时不做倾斜,保持正常轮询。

reset 命令(新增)

workbuddy-gateway reset

清空除登录凭据以外的全部本地数据:状态快照、模型缓存(含倍率与探测结论)、失效标记、运行日志;随后立即重新拉取模型目录并执行一轮价格探测。由于账号账本同时在 serve 内存中,服务运行时请重启使其同步归零。

monitor

模型统计附表列调整为:

模型 | 国内倍率 | 国际倍率 | 可用账号 | 请求 | 平均首字(5h) | 平均总耗时(5h)
  • 平均值是真正的 5 小时滚动窗口,按小时分桶并自动淘汰过期样本,不再是启动至今的累计平均。
  • 倍率列加宽,收费(倍率未知) 不再被截断。

其他

  • 凭据变化(含「原本没有某站点账号、后来加入」)会同时触发目录刷新与价格探测。
  • 流式分片规范化:把上游每个分片携带的 finish_reason:"" 归一化为 null,避免 Anthropic 翻译层误判 stop_reason 导致 Claude Code 工具不执行。
  • README 按当前代码重写,每个命令均含用法、参数表与示例。
  • 单元测试 89 项全部通过。

说明

模型请求仍为完全透传;模型目录、倍率与账本只影响调度与展示,不改变转发内容。


下载

平台 文件
Windows x64 workbuddy-gateway-windows-amd64.exe
Linux x64 workbuddy-gateway-linux-amd64
Linux ARM64 workbuddy-gateway-linux-arm64
macOS Intel workbuddy-gateway-darwin-amd64
macOS Apple Silicon workbuddy-gateway-darwin-arm64

纯 Go、零 CGO 依赖静态单二进制,下载后直接运行即可。

v1.11.0

Choose a tag to compare

@CangShui CangShui released this 16 Sep 16:46

WorkBuddy Local Gateway v1.11.0

新增 probe 主动探测、免费列按站点拆分,并修复一个会导致 Claude Code 工具不执行的流式 bug。

新增:probe 主动探测模型属性

免费/收费属性按「账号(含站点)+ 模型」学习,只有该账号真正请求过该模型才会写入账本。默认调度优先使用有余额账号,因此余额耗尽的账号(典型如国际站)几乎不会被选中,也就学不到属性

probe 用于主动补课:

# 探测全部账号,每账号取目录前 5 个模型
workbuddy-gateway probe

# 只探测指定账号 + 指定模型
workbuddy-gateway probe -auth workbuddy4.json -models hy3,deepseek-v4.1-flash

# 指定数量上限
workbuddy-gateway probe -auth workbuddy4.json -limit 8

结果状态:free / paid / unknown / quota / rate_limited / auth_failed / skipped / error

设计说明:probe 作为客户端调用运行中服务的 /admin/probe,由服务执行探测并更新内存账本(独立进程直接写状态文件会被服务周期快照覆盖)。该接口只接受本机回环来源,服务启用 -api-key 时同样鉴权。探测失败只记录日志,不会禁用账号或冻结调度;quota / rate_limited 属于有效学习结果。

变更:模型统计表免费列按站点拆分

由于免费/收费按账号学习,而账号分属国内站与国际站,同一模型名在两个站点可能结论不同。原来的单一「免费」列会把站点差异显示成无法解释的「混合」。

现在拆为 国内免费 / 国际免费 两列(是 / 否 / 混合 / -),能同时表达「国内站免费、国际站收费」或反过来。调度层原本就按账号(含站点)+ 模型隔离,本次只改展示。

修复:上游 finish_reason 空串导致工具不执行

上游在每一个流式分片都下发 finish_reason:"",而 OpenAI 规范要求中间分片为 null。Anthropic 协议翻译层会取流中第一个非 null 值作为最终 stop_reason,于是首个分片的空串把 stop_reason 锁成 end_turn,真实终止分片的 tool_calls 不再被采纳。Claude Code 只在 stop_reason == tool_use 时执行工具,表现为网关日志全部成功,但客户端工具永不执行、终端没有输出

修复内容:

  • finish_reason 归一化为 null,仅保留终止分片的真实原因
  • 清除上游在工具调用终止片追加的旧版 function_call 空壳(真实旧版调用保留)
  • 新增 stream_test.go:分片归一化、空壳清除、以及走真实 handleChatCompletions 链路的端到端用例

该修复来自社区 PR #3(作者 WorldofPlainness),已按当前本地代码为基线应用。

其他

  • README 增补 probe 用法与状态说明、流式分片规范化说明
  • 版本号 1.10.0 → 1.11.0
  • 单元测试 80 项全部通过

说明

模型请求仍为完全透传;账号 + 模型账本只影响调度与展示,不改变转发内容。


下载

平台 文件
Windows x64 workbuddy-gateway-windows-amd64.exe
Linux x64 workbuddy-gateway-linux-amd64
Linux ARM64 workbuddy-gateway-linux-arm64
macOS Intel workbuddy-gateway-darwin-amd64
macOS Apple Silicon workbuddy-gateway-darwin-arm64

纯 Go、零 CGO 依赖静态单二进制,下载后直接运行即可。

v1.10.0

Choose a tag to compare

@CangShui CangShui released this 16 Sep 14:57

WorkBuddy Local Gateway v1.10.0

核心变化:把 600414018 从「账号级」收紧为「账号 + 模型级」,并新增模型统计附表。

模型级隔离(重要)

以前:

  • 某模型触发 6004整个账号所有模型被冷却
  • 某模型触发 14018整个账号被冻结

现在:

  • 6004 只冷却触发它的账号 + 模型,该账号的其他模型仍可正常调度
  • 14018 只阻断触发它的账号 + 模型,不再冻结整个账号
  • 只有无法归因到具体模型的错误(授权失效、网络故障、通用 429)才继续按账号级处理
  • 新增账号 + 模型账本:costClass(免费/收费/未知)、cooldownUntilquotaBlockednextProbeAt,随状态文件持久化并在重启后恢复

免费/收费学习

  • 按「账号 + 模型」从响应 usage.credit 学习
  • credit=0 只有在响应同时提供 usage.total_tokens不低于 100 时才判定为免费;极小探针请求被上游记为 0 不再误判收费模型为免费
  • credit>0 的收费判定不受影响
  • 付费余额耗尽的账号仍可服务已确认免费的模型;收费属性未知的模型最多每 5 分钟做一次受控探测,不会横扫全部耗尽账号

调度优先级

  1. 余额耗尽但当前模型已确认免费
  2. 有余额且当前模型未冷却
  3. 余额耗尽、当前模型收费属性未知 → 一次受控探测

无可用账号时,错误信息会分别给出授权失效、账号冷却、模型冷却、额度阻断、等待探测的账号数量。

monitor 新增模型统计附表

modelstats.go 汇总 /v1/models 目录中的每个模型:

含义
模型 模型 ID
来源 官方目录版本或静态兜底
免费 是 / 否 / 混合 / -
可用账号 当前可服务该模型的账号数(含模型级冷却与额度阻断)
请求 客户端请求次数
成功/失败 计数
首字 平均首字响应时间 TTFT(流式与非流式均统计)
平均 平均总耗时
最近状态 成功 / 失败:业务码(14018、6004、11102)
最近请求 时间

未请求过的目录模型也会列出(0 请求)。

其他

  • 账号表状态由「额度耗尽」改为「付费耗尽」,新增「免费模型」「模型冷却」计数
  • 测试统一在临时目录运行,不再向仓库写入状态/缓存/日志
  • 版本号 1.9.0 → 1.10.0
  • 单元测试 69 项全部通过

说明

模型请求仍为完全透传,账号 + 模型账本只影响调度与展示,不改变转发内容。


下载

平台 文件
Windows x64 workbuddy-gateway-windows-amd64.exe
Linux x64 workbuddy-gateway-linux-amd64
Linux ARM64 workbuddy-gateway-linux-arm64
macOS Intel workbuddy-gateway-darwin-amd64
macOS Apple Silicon workbuddy-gateway-darwin-arm64

纯 Go、零 CGO 依赖静态单二进制,下载后直接运行即可。

v1.9.0

Choose a tag to compare

@CangShui CangShui released this 15 Sep 12:08

WorkBuddy Local Gateway v1.9.0

新增国内站每日自动签到、/v1/models 低流量动态模型目录同步,并调整额度扫描频率与超时。

新增

  • 国内站每日自动签到

    • 服务启动时立即补签一次,新凭据热加载后再次补签
    • 此后每天 UTC+8 09:00 自动签到
    • 重复签到按幂等成功处理(code 10001/14001、包含“已签到”)
    • 国际站账号明确跳过(无已确认可用的签到端点)
    • 签到失败只记录日志,不冻结、不禁用、不影响模型调度
    • 同一时刻只允许一轮签到;单账号 30 秒超时
    • 每轮签到结束后触发一次额度扫描
  • /v1/models 动态模型目录同步(低流量)

    • 启动加载本地缓存,之后每 60 分钟查询 npm /latest(约 4 KB)
    • 版本未变化立即结束,不下载任何目录
    • 版本变化优先下载 unpkg 单文件 product.cloudhosted.json(约 20 KB)
    • unpkg 失败才回退 npm .tgz 流式提取
    • 官方目录全部模型与本地静态列表合并、按 ID 去重后输出
    • 静态列表修正:移除实测无效的 deepseek-v4.1,加入实测可用的 deepseek-v4.1-flash
    • 缓存带格式版本,旧格式自动废弃并重新拉取
    • 体积上限:manifest 1 MiB、目录 4 MiB、tgz 80 MiB(提前按 Content-Length 拒绝,流式时硬性中止)
    • 同步失败按 6h / 12h / 24h 指数退避,避免重复下载
    • /v1/models 新增 X-Model-Source 响应头;/health 新增 model_countmodel_source
    • 新增 -models-refresh 参数(默认 60 分钟,0 关闭)

变更

  • 额度扫描频率:由 60 秒调整为 300 秒
  • 单凭据额度查询超时:10 秒,覆盖等待账号锁与 HTTP 请求全过程;超时保留旧结果并等待下一轮
  • 静态模型列表不再过滤 supportsExtra 与 image 条目,JSON 中的模型全部参与合并
  • 文档示例中的真实账号昵称替换为占位符
  • 版本号 1.8.2 → 1.9.0

说明

模型请求仍为完全透传:客户端传什么 model 就原样中继至上游,动态目录只影响 /v1/models 的模型发现。上游未注册的模型 ID 仍会返回 code 11102


下载

平台 文件
Windows x64 workbuddy-gateway-windows-amd64.exe
Linux x64 workbuddy-gateway-linux-amd64
Linux ARM64 workbuddy-gateway-linux-arm64
macOS Intel workbuddy-gateway-darwin-amd64
macOS Apple Silicon workbuddy-gateway-darwin-arm64

纯 Go、零 CGO 依赖静态单二进制,下载后直接运行即可。

v1.8.2

Choose a tag to compare

@CangShui CangShui released this 15 Sep 09:14

WorkBuddy Local Gateway v1.8.2

新增账号额度监控、额度耗尽自动冻结与恢复,并将监控输出改为规范 CLI 表格。

新增

  • 账号额度监控:通过用户中心只读计费接口查询额度(国内站 / 国际站均支持)
    • 展示总额度、已用、剩余、是否付费用户
    • 服务启动、凭据变化时立即查询,此后每 1 分钟更新
    • 新一轮扫描会取消上一轮尚未完成的请求,避免扫描堆积
  • 额度耗尽自动冻结:账号剩余额度为 0 时自动移出调度
    • 主动路径:额度扫描发现剩余 <= 0
    • 被动路径:模型请求返回 HTTP 429 + code 14018(额度已用尽 / Credits exhausted)
  • 额度恢复自动解冻:额度扫描发现剩余 > 0 后自动恢复调度,无需重启
  • 额度与限流分离14018 视为额度耗尽按状态冻结;429 / code 6004 仍按上游给的时间冷却
  • 新凭据即时扫描:热加载发现新增/变更凭据后立即触发一轮额度查询

变更

  • 额度解析支持小数(如 69.98999993),显示最多两位小数
  • monitor 改为固定宽度 CLI 表格,中英文/数字混排对齐
  • 移除输出中的 Emoji,移除冗余的“说明”列
  • Token 刷新改为副本更新,并与同账号上游请求串行,失败不覆盖旧凭据
  • monitor 显示完整年份与 已过期 / 额度耗尽 状态
  • 运行日志同时落盘到 logs/gateway-YYYY-MM-DD.log(已加入 .gitignore)
  • 请求链路审计日志:请求到达、中间件、被拦截、业务、上游调用、异常、响应返回,统一 TraceID
  • 版本号 1.8.1 → 1.8.2
  • 单元测试 45 项全部通过

说明

模型仍为完全透传:客户端传什么 model 就原样中继至上游,无白名单限制。


下载

平台 文件
Windows x64 workbuddy-gateway-windows-amd64.exe
Linux x64 workbuddy-gateway-linux-amd64
Linux ARM64 workbuddy-gateway-linux-arm64
macOS Intel workbuddy-gateway-darwin-amd64
macOS Apple Silicon workbuddy-gateway-darwin-arm64

纯 Go、零 CGO 依赖静态单二进制,下载后直接运行即可。

v1.8.1

Choose a tag to compare

@CangShui CangShui released this 13 Sep 09:47

WorkBuddy Local Gateway v1.8.1

新增 OpenAI Responses API 支持,并修复非 harness 客户端的会话结构报错。

新增

  • POST /v1/responses(同时挂载 /responses):OpenAI Responses API 兼容层
    • 流式语义事件、非流式聚合、function tools
    • input / content / tools / tool_choice 与 chat 格式双向转换
  • 会话结构自动归一化:自动保证首条消息为 system,修复部分非 harness 客户端(以 assistant 续写或以 tool 回传工具结果开头)触发的上游 first message is not system prompt (code 11128) 报错;同时兼容 OpenAI 新版 developer 角色
  • 工具调用增量合并修复applyToolCallDelta 正确合并跨 chunk 的 tool_call 片段

变更

  • 重构 handleChatCompletions,抽出 upstreamChat:429 冷却代偿逻辑在多账号池间统一复用
  • 版本号 1.7.0 → 1.8.1
  • 单元测试 37 项全部通过(会话归一化、Responses 转换、tool call 合并、Responses↔Chat 映射)

说明

模型仍为完全透传:客户端传什么 model 就原样中继至上游,无白名单限制。


下载

平台 文件
Windows x64 workbuddy-gateway-windows-amd64.exe
Linux x64 workbuddy-gateway-linux-amd64
Linux ARM64 workbuddy-gateway-linux-arm64
macOS Intel workbuddy-gateway-darwin-amd64
macOS Apple Silicon workbuddy-gateway-darwin-arm64

纯 Go、零 CGO 依赖静态单二进制,下载后直接运行即可。

v1.7.0 — 国际站支持 + 凭据热加载

Choose a tag to compare

@CangShui CangShui released this 04 Sep 21:32

WorkBuddy Local Gateway v1.7.0

本版本包含 v1.6.0 + v1.7.0 两个迭代的全部内容。

🌍 国际站支持(v1.6.0)

  • 新增 login -intl:登录腾讯国际站 **www.workbuddy.ai**(浏览器内完成登录,支持邮箱 / 验证码 / SSO)
  • 凭据文件通过 edition 字段区分站点,Token 刷新与对话自动路由到对应上游(与国内站同一套 /v2/plugin/* 协议)
  • 国内站与国际站账号可混挂在同一账号池,轮询负载均衡 + 429 自动冷却代偿
  • 429 频率限制识别与重置时间解析支持英文消息

♻️ 凭据热加载(v1.7.0)

  • serve 运行期间自动扫描凭据来源:新增凭据自动入池、重新登录原地生效、删除自动移出,全程免重启
  • 新参数 -reload-interval(默认 5 秒,设 0 关闭)
  • 修复 workbuddy-status.json 状态快照被误识别为凭据文件的问题

🛠 其他

  • 新增 build.ps1 一键交叉编译脚本(windows / linux / darwin,amd64 + arm64 共 5 平台)
  • status / monitor / 启动横幅显示每个账号的站点标识(国内站 / 国际站)
  • .gitignore 加固:忽略全部 workbuddy*.json 凭据衍生名与 dist/ 编译产物

📦 下载

平台 文件
Windows x64 workbuddy-gateway-windows-amd64.exe
Linux x64 workbuddy-gateway-linux-amd64
Linux ARM64 workbuddy-gateway-linux-arm64
macOS Apple Silicon workbuddy-gateway-darwin-arm64
macOS Intel workbuddy-gateway-darwin-amd64

Full Changelog: v1.5.0...v1.7.0

v1.5.0

Choose a tag to compare

@CangShui CangShui released this 04 Sep 01:37

WorkBuddy Local Gateway v1.5.0

? Go ?????? CGO ???????? AI ??:??? CodeBuddy / ??????? OpenAI ???

? v1.5.0 ??:???????? monitor

  • monitor ??:????,???????????????(? ?? / ?? ??? / ? ??)+ ?????? + Token ???
  • ??????:serve ??? 3 ?(???/??/???????)?????????? workbuddy-status.json
  • ????:????? systemd ??????(-journal )?????(-logfile )
  • systemd ???????,workbuddy-gateway monitor -journal workbuddy-gateway ??????????????(Ctrl+C ??)

�ash workbuddy-gateway monitor # ? 3 ??????? workbuddy-gateway monitor -interval 2 # ??????? workbuddy-gateway monitor -journal workbuddy-gateway # ?? systemd ??

? v1.4.x ??(??)

  • ?????????????? + ????????
  • ???????(???? workbuddy*.json ?????)

? v1.3.0 / v1.2.0 ??(??)

  • ????????(401/403 ? ???? + ???? + ????? + ?????)
  • ????????? + 429 ?????? + ????????

????

?? ?? ??
Windows amd64 workbuddy-gateway-windows-amd64.exe
Linux amd64 workbuddy-gateway-linux-amd64
Linux arm64 workbuddy-gateway-linux-arm64
macOS arm64 (M??) workbuddy-gateway-darwin-arm64
macOS amd64 (Intel) workbuddy-gateway-darwin-amd64

v1.4.2

Choose a tag to compare

@CangShui CangShui released this 04 Sep 00:48

WorkBuddy Local Gateway v1.4.2

? Go ?????? CGO ???????? AI ??:??? CodeBuddy / ??????? OpenAI ???

? v1.4.2 ??:????????????????

  • ???????? ??????? (N): workbuddy.json, workbuddy2.json,
    ?? systemctl/journalctl ???????????????????
  • ????????????? ???? login

? v1.4.1 ??(??)

  • ??????????????(??/UID/??/??/??/Token ???),? status ??

? v1.4.0 ??(??)

  • ???????:??? -auth/-auth-dir ??????????? workbuddy*.json(systemd ???)

? v1.3.0 / v1.2.0 ??(??)

  • ????????(401/403 ? ???? + ???? + ????? + ?????)
  • ????????? + 429 ?????? + ????????

????

?? ?? ??
Windows amd64 workbuddy-gateway-windows-amd64.exe
Linux amd64 workbuddy-gateway-linux-amd64
Linux arm64 workbuddy-gateway-linux-arm64
macOS arm64 (M??) workbuddy-gateway-darwin-arm64
macOS amd64 (Intel) workbuddy-gateway-darwin-amd64

v1.4.1

Choose a tag to compare

@CangShui CangShui released this 04 Sep 00:42

WorkBuddy Local Gateway v1.4.1

? Go ?????? CGO ???????? AI ??:??? CodeBuddy / ??????? OpenAI ???

? v1.4.1 ??:????????????

  • serve ??????????????(???UID??????????????Token ???),? status ??????
  • ????????????(? ???? + ?? + ??????)
  • ?????:?? / ?? / ??????

? v1.4.0 ??(??)

  • ???????:??? -auth/-auth-dir ??????????? workbuddy*.json(systemd ???)

? v1.3.0 / v1.2.0 ??(??)

  • ????????(401/403 ? ???? + ???? + ????? + ?????)
  • ????????? + 429 ?????? + ????????

????

?? ?? ??
Windows amd64 workbuddy-gateway-windows-amd64.exe
Linux amd64 workbuddy-gateway-linux-amd64
Linux arm64 workbuddy-gateway-linux-arm64
macOS arm64 (M??) workbuddy-gateway-darwin-arm64
macOS amd64 (Intel) workbuddy-gateway-darwin-amd64