Releases: CangShui/workbuddy-gateway
Release list
v1.12.0
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-flash、glm-5.3、hy3-x、kimi-k2.8-preview)无需更新二进制即可出现。合并后模型数由 31 增至 50。
模型倍率与价格探测
- 生效倍率 =
credits× 促销factor;命中factor=0即0.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
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
WorkBuddy Local Gateway v1.10.0
核心变化:把 6004 与 14018 从「账号级」收紧为「账号 + 模型级」,并新增模型统计附表。
模型级隔离(重要)
以前:
- 某模型触发
6004→ 整个账号所有模型被冷却 - 某模型触发
14018→ 整个账号被冻结
现在:
6004只冷却触发它的账号 + 模型,该账号的其他模型仍可正常调度14018只阻断触发它的账号 + 模型,不再冻结整个账号- 只有无法归因到具体模型的错误(授权失效、网络故障、通用 429)才继续按账号级处理
- 新增账号 + 模型账本:
costClass(免费/收费/未知)、cooldownUntil、quotaBlocked、nextProbeAt,随状态文件持久化并在重启后恢复
免费/收费学习
- 按「账号 + 模型」从响应
usage.credit学习 credit=0只有在响应同时提供usage.total_tokens且 不低于 100 时才判定为免费;极小探针请求被上游记为 0 不再误判收费模型为免费credit>0的收费判定不受影响- 付费余额耗尽的账号仍可服务已确认免费的模型;收费属性未知的模型最多每 5 分钟做一次受控探测,不会横扫全部耗尽账号
调度优先级
- 余额耗尽但当前模型已确认免费
- 有余额且当前模型未冷却
- 余额耗尽、当前模型收费属性未知 → 一次受控探测
无可用账号时,错误信息会分别给出授权失效、账号冷却、模型冷却、额度阻断、等待探测的账号数量。
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
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_count、model_source- 新增
-models-refresh参数(默认 60 分钟,0 关闭)
- 启动加载本地缓存,之后每 60 分钟查询 npm
变更
- 额度扫描频率:由 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
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
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 — 国际站支持 + 凭据热加载
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
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
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
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 |