Important
凭证安全:本项目是本地部署网关,运行时需要在本地读取用户自行导入的账号凭证,才能调用官方接口;凭证保存在用户自己的 accounts/ 目录。项目不会把凭证上传到本项目的第三方服务器,也没有隐藏的凭证收集或上传逻辑。请立即关闭公网暴露,联系官方吊销全部 OAuth / 设备授权,确认旧 token 返回 401 后再重新授权。
Warning
WorkBuddy 上游正在收紧对非官方客户端的识别与拦截。
- 封禁:2026-10-23 下午起,非官方客户端的识别与拦截明显收紧。
- 维护者:近期工作压力增大,无法保证及时更新与响应。
- 可用性:上游可能随时进一步收紧,导致本项目不可用。
- 账号风险:使用非官方客户端造成的风控、限流或封禁,由使用者自行承担。
Upstream enforcement tightened detection and blocking of unofficial clients from the afternoon of 2026-10-23. The maintainer is under increased workload and cannot guarantee timely updates or replies. The upstream may tighten further at any time; rate limits, account restrictions or bans caused by using an unofficial client are the user's responsibility.
本项目仅用于协议学习、研究与个人自用。请优先使用官方客户端,不要使用主账号,不要共享账号,也不要用于商业转售。
This project is for protocol research and personal use only. Prefer the official client, do not use your primary account, and do not resell or share access.
- 标准 API 兼容:将 WorkBuddy(国际版/国内版)与 CodeArts 封装为标准 OpenAI 格式(Chat Completions / Responses),无缝支持 Codex、Claude Code、NextChat 等各类客户端。
- 开箱即用与多端部署:便携版免装环境(Windows 自带精简运行时),支持 Docker、NAS(群晖/飞牛)一键部署及 OpenWrt 路由器固件。
- 多账号池与出口隔离:支持浏览器 OAuth 快速导入、每账号独立出口代理槽绑定、设备指纹隔离、自动故障转移与配额轮转。
- 自动化福利与签到:内置国内版全套成长任务、加油站签到与猫猫旅行,支持国际版每日活跃会话与 CodeArts 自动签到。
- 可视化管理看板:提供 Web 仪表盘,支持实时请求日志、Token/积分透视、多 API Key 权限分发(模型/账号白名单)与额度护栏。
⚡ Vibe Coding 产物:本项目为 100% Vibe Coding 协同产物——人类开发者提出架构与业务意图,AI 助手端到端完成逆向分析、链路调度、WAF 指纹脱敏与界面编写。
📌 提交代码贡献前:请先查看并严格遵循贡献手册
CONTRIBUTING.md——提交格式、测试门禁与端到端冒烟要求都在那里(AI / 智能体请特别注意其中的硬性规则节)。
想出现在这里?联系 [email protected]
|
Agent Router 是免费公益大模型 API 平台,支持 Claude-opus-5.5、GPT-6 Astra、GPT-6.1 Sol、deepseek-v4-flash 等主流模型,国内直连。注册送 $175(每日签到得 $25,被邀得 $50),支持 GitHub / LinuxDo 登录。 |
- Windows:双击
start-wb-proxy.bat(静默后台运行 + 独立日志窗口);如需前台控制台窗口,双击start-wb-proxy-visible.bat。 - macOS / Linux:双击
start-wb-proxy.command或在终端执行./start-wb-proxy.sh [端口](默认 8788,需要 Python 3.9+)。 - 局域网共享模式:运行
start-wb-proxy-lan.bat(Windows)或./start-wb-proxy-lan.sh(macOS/Linux),首次启动将自动生成高强度 API Key 并在控制台打印。 - 启动后访问:
- Web 看板:
http://127.0.0.1:8788/(默认访问密码admin,首次登录请在设置中修改) - API 地址:
http://127.0.0.1:8788/v1
- Web 看板:
预编译多架构镜像发布在 GHCR,无需本地构建:
方式一:一键脚本(推荐)
# 官方源(直连 GitHub 环境):
curl -fsSL https://raw.githubusercontent.com/ardeyouxipianyi/workbuddy2api-hub/main/quick-deploy.sh | bash
# 国内网络 / NAS 加速:
curl -fsSL https://gh-proxy.com/https://raw.githubusercontent.com/ardeyouxipianyi/workbuddy2api-hub/main/quick-deploy.sh | sudo bash公网部署或配合反向代理:在管道前指定
WB_DEPLOY_MODE=public bash,并搭配 Nginx / Caddy / Cloudflare Tunnel 配置 TLS。
方式二:单文件 Docker Compose
services:
wb-proxy:
image: ghcr.io/ardeyouxipianyi/workbuddy2api-hub:latest
container_name: wb-proxy
restart: unless-stopped
ports:
- "8788:8788"
environment:
- HOST=0.0.0.0
- PORT=8788
- TZ=Asia/Shanghai
volumes:
- ./accounts:/app/accounts # 账号凭据与配置(持久化)
- ./usage:/app/usage # 用量流水日志(持久化)更新镜像:docker compose pull && docker compose up -d。
同一份代码、同一个账号池,python3 wb_proxy.py 与 python3 -m wb_proxy 的常驻内存差 47-54 MB
(Windows 11 / aarch64、Python 3.12-3.14 四套环境实测一致,见 #702)。成因仍在排查,
但只要换成 -m 就能拿到这段收益——512 MB 的设备上约 10%。
cd /path/to/workbuddy2api-hub # 必须先进入 wb_proxy.py 所在目录
python3 -m wb_proxy --port 8788-m 把当前目录放进 sys.path,而脚本方式放的是脚本所在目录,所以务必先 cd。
仓库内的资源路径都基于 __file__ 解析,不受影响。Docker 镜像和 OpenWrt 包已改用 -m;
Windows / macOS 的 start-wb-proxy.* 启动脚本暂未改动。
网关内置进程内直连华为云 CodeArts,支持聊天 SSE 协议转换与自动签到,无需单独运行第三方桥接服务:
- 打开看板 →「设置 → CodeArts 接入」,勾选「启用 CodeArts 出口」并保存;
- 切换至看板顶部「CodeArts」视图,点击「+ 添加账号 (OAuth)」完成华为云授权;
- 在「设置 → API Key」中新建 Key 并绑定出口为
CodeArts(或全局通用)即可调用。
CodeArts 的模型 ID 按上游目录精确匹配:deepseek-v4.1-flash 与
deepseek-v4.1-flash-1017 是两个独立模型,不会互相别名或静默回退。
/v1/models?realm=codearts 返回的是账号当前可用的真实目录 ID;调用时请直接使用
返回的完整 ID。
- 打开看板
http://127.0.0.1:8788/,点击「+ 添加账号 (OAuth)」,在浏览器中完成官方登录授权即可自动入库。 - 独立代理出口槽(Proxy Slot):在看板中可按需配置并命名 HTTP/SOCKS5 出口代理(支持账号密码认证),支持将账号与特定代理槽位绑定,账号身份请求与出站调用均自动走该代理。
- 「设置」页支持创建多个独立 API Key:
- 出口绑定:可固定走国际版、国内版或 CodeArts;
- 模型限制:支持通配符白名单(如
deepseek*,gpt-6-astra),违规请求本机直接返回 400; - 账号白名单:可精确限定该 Key 仅允许调度的账号范围;
- 用量透视:数据看板按 Key 独立统计调用次数、Token 消耗、缓存命中与积分。
- Base URL:
http://127.0.0.1:8788/v1(局域网为http://<局域网IP>:8788/v1) - API Key:看板「设置」中添加并绑定的 Key
- 模型名称:调用
/v1/models中列出的任意官方对齐模型 ID(如deepseek-v4.1-flash,gpt-6-astra,hy3)
Codex CLI / Responses API
export OPENAI_BASE_URL="http://127.0.0.1:8788/v1"
export OPENAI_API_KEY="你在看板设置中添加并绑定的API_Key"Claude Code / Anthropic Messages(实验性)
网关支持实验性 Messages 协议适配,因长会话缓存命中率差异,默认关闭:
# 网关端设置 WB_ENABLE_ANTHROPIC_MESSAGES=1 开启后生效:
export ANTHROPIC_BASE_URL="http://127.0.0.1:8788"
export ANTHROPIC_API_KEY="你在看板设置中添加并绑定的API_Key"| 环境变量 | 默认值 | 说明 |
|---|---|---|
PORT |
8788 |
网关监听端口 |
API_KEY |
自动生成 | 初始 API Key(看板配置多 Key 后优先由看板管理) |
WB_DEPLOY_MODE |
lan |
部署模式:lan(0.0.0.0)、local(127.0.0.1)、public |
WB_MAX_PAYLOAD_BYTES |
16777216 |
单请求体上限(字节,默认 16MB,支持 1–256 MB) |
WB_ENABLE_ANTHROPIC_MESSAGES |
0 |
是否开启实验性 Anthropic Messages 协议转换 |
WB_BACKGROUND_MODEL_TARGET |
留空 | 后台模型别名改写目标(如 DSH 客户端自动映射) |
WB_CA_BUNDLE |
留空 | 自签根证书路径(供抓包调试或中间代理使用) |
WB_CN_CHAT_UPSTREAM |
官方默认 | 国内版出站代理地址 |
WB_IDENTITY_OS |
宿主系统 | 仅 CLI 身份:覆盖 x-stainless-os(如 Linux / Windows) |
WB_IDENTITY_ARCH |
宿主架构 | 仅 CLI 身份:覆盖 x-stainless-arch(如 x64 / arm64) |
WB_IDENTITY_NODE_VERSION |
官方默认 | 仅 CLI 身份:覆盖 x-stainless-runtime-version |
遇到上游 400 / 11-128 时,先按 docs/TROUBLESHOOTING-11-128.md 收集同一请求的
身份、最小请求和提示词对照结果;不要先轮换账号。
| 接口 | 方法 | 端点 | 说明 |
|---|---|---|---|
| 聊天补全 | POST |
/v1/chat/completions |
标准 OpenAI 聊天接口(支持流式 SSE 与思维链回填) |
| 交互式响应 | POST |
/v1/responses |
OpenAI Responses 协议接口(Codex 专用) |
| 模型目录 | GET |
/v1/models |
获取当前出口对齐的官方可用模型列表 |
| 生图 | POST |
/v1/images/generations |
文生图 / 图生图(需在设置中启用媒体模块) |
| 生视频 | POST |
/v1/videos |
异步生视频任务提交(本地并发排队与空闲调度) |
| 视频状态 | GET |
/v1/videos/<id> |
轮询视频生成进度与结果 |
| 产物下载 | GET |
/v1/videos/<id>/content |
下载视频 MP4 产物直链 |
| 健康检查 | GET |
/health |
网关运行状态、可用账号数与就绪模型分布 |
python tests/run_all.py # 全部套件
python tests/run_all.py realm # 只跑名字里含 realm 的- 285 个套件:216 个 Python + 69 个 JS;JS 需要 PATH 上有
node,缺失时会跳过并提示。 tests/_mobile_check.py是独立的 Playwright 手机/桌面布局检查器(需自行安装 Playwright),按需手动运行,不在上面的套件集里。- CI(
.github/workflows/tests.yml)跑同一条命令:Ubuntu 上 python 3.9 与 3.12(3.9 是本项目声称的最低版本),Windows 上 python 3.12;推送v*tag 时额外断言 tag == 源码版本(-ci演练 tag 豁免)。
- 可选 Go/uTLS 传输桥:新增本地 Go/uTLS CONNECT 桥接器,可按目标平台启用 Node/OpenSSL 兼容的 ClientHello(18 个 Cipher、10 个 Extension、无 ALPN),Python 仍负责 HTTP 构造、连接复用与 SSE 读取。默认继续使用 Python/OpenSSL,只有设置
WB_TLS_FINGERPRINT=node才启用;支持自动发现便携包内的 Windows / macOS / Linux amd64、arm64 桥接器,OpenWrt 额外支持 armv7。桥接器仅监听回环地址,使用启动时随机认证密钥,并继续验证上游证书。 - 设备 Token 与桌面 chat 兼容:账号支持独立
deviceToken,也可从设置页配置device_token_file并在不暴露 token 本体的前提下热重载;优先级为账号 token > settings 字面值 > 文件。新增可选桌面 chat 兼容头(X-Agent-Runtime、baggage与会话字段),默认关闭。 - 请求体兼容性增强:国内版 Kimi 工具 schema 自动内联
$ref/$defs;可选最小输出预算(WB_MIN_OUTPUT_BUDGET=1)与无可见输出的 length 终止重试;面板与日志继续对设备 token 脱敏。 - 文本号池 / 媒体号池分区(#841):账号新增
poolScope(text/media),文本对话只派文本号,图片 / 视频只派媒体号,空媒体池不回落到文本池。老账号默认text,升级后行为不变;面板可按号池筛选、单号切换或勾选批量挪池,/accounts/set与/accounts/set-all同步支持poolScope。单实例靠字段过滤,双实例可分别设WB_POOL_SCOPE=text|media做进程级硬隔离;WB_POOL_SEPARATION=0可回退旧的单池行为。文本任务(签到、成长、猫猫、国际每日活跃)只处理文本号,Token 保活仍覆盖全部账号。 - 历史思考镜像 / Upstream reasoning mirror:模型名以
kimi、glm、minimax、mimo、step或space-bunny开头时,在工具消息合并完成之后,把非空reasoning_content原样镜像到上游读取的reasoning;不写空白占位,也不注入 DeepSeek 的thinking。deepseek与hy不在本镜像范围内。Preserve 只保证发往 WorkBuddy 的字段,不宣称模型长期质量。 / For models whose names start withkimi,glm,minimax,mimo,step, orspace-bunny, non-emptyreasoning_contentis mirrored verbatim to the upstream-readreasoningafter tool-message merging; no blank placeholder is written and DeepSeekthinkingis not injected.deepseekandhyare outside this mirror. Preservation guarantees only the fields sent to WorkBuddy, not long-term model quality. - 空文本段先补位再出站 / Fill empty text parts before they leave(code 11151):上游对 content 里每个
type:"text"段做长度校验,text为""、null或缺失时回400/11151「a message has empty content」,而这条历史每一轮都会重放,会话就此退役。触发点不只是客户端真的发了 parts 数组:上游会把字符串 content 里以[开头的 JSON 数组当 parts 解析,于是工具结果里常见的表单 / 按钮抓取([{"type":"text","text":""}])被当成一个空文本段。现在build_upstream_body()在工具调用配对修复之后、发出之前多一道guard_empty_text_parts():真实 parts 列表与被嗅探的字符串数组里的空 text 段填成一个空格(上游只校验长度非零,模型看不到任何内容),未知 type、非数组 JSON、纯文本与text非空的部分逐字节不变,两次执行结果相同。影响面仅限「上游本来会 400」的请求形状。 / The upstream validates everytype:"text"part and answers400/11151whentextis"",nullor missing — and because the history is replayed on every turn, that retires the conversation. A captured form dump in a tool result is enough: a string content that starts with[is parsed as chat parts, so[{"type":"text","text":""}]becomes an empty part.build_upstream_body()now runsguard_empty_text_parts()after the tool-pairing repairs and fills those parts with a single space (the upstream only checks for non-zero length, so nothing model-visible changes). Unknown part types, non-array JSON, plain text and non-empty parts stay byte-for-byte identical, and the pass is idempotent. Only payload shapes the upstream would have rejected are affected. - 新增可选的订阅桥接(#830):把 Clash / Mihomo 订阅、V2Ray URI 或单个 HTTP / SOCKS 代理转换成 mihomo listener,并同步成网关代理槽。direct 代理现在会正确生成
proxies条目;HTTP 订阅与 HTTP 代理可以区分;缺失 PyYAML 时会返回明确错误。Docker 与宿主 mihomo 的联动仍需按docs/SUBBRIDGE.md挂载配置。 - 新增
start-workbuddy-all.bat:一条命令先通过--probe-only确认端口上是健康的本项目实例,未运行时再拉起代理,随后打开 WorkBuddy 执行器工作台窗口。端口被陌生服务或卡死实例占用时会直接报错,不再误判为“已在运行”。网关目录、Node、Python 可用WORKBUDDY_GATEWAY_DIR/WORKBUDDY_NODE/WORKBUDDY_PYTHON覆盖,端口用第一个参数指定(默认 8788);WORKBUDDY_LAUNCH_SKIP_WINDOW=1只起代理不开窗口。 - Responses 历史推理保真 / Responses reasoning replay fidelity:修复连续
reasoning项目只剩最后一段、相邻两轮助手消息被合并、Chat 形状助手历史里的reasoning_content被丢弃,以及内置 web 工具第二轮请求丢失第一轮推理的问题;推理只关联所属助手消息,不会写入 user/system/tool 普通文本,也不会猜测或改写外部提供者的加密encrypted_content。保真只证明历史按原样送达 WorkBuddy Chat 上游,不额外保证模型的长期任务质量。 / Fix consecutive reasoning replay overwrites, adjacent assistant-turn collapse, Chat-shapedreasoning_contentloss, and reasoning loss across built-in web-tool follow-ups. Reasoning stays attached to its assistant message, never enters user/system/tool text, and foreign encrypted content is never guessed or rewritten. Preservation proves delivery to the WorkBuddy Chat upstream only, not long-task model quality. - API Key 的出口徽章与模型准入覆盖 CodeArts 出口(#801 / #802):绑定固定 CodeArts 出口的 Key 在列表里被画成「跟随面板切换」(图标分支只认
intl/cn),现在出口徽章统一走keyRealmBadge(),三种出口各回各的;「模型准入」的候选清单也补上?realm=codearts(它的 13 个模型与 intl / cn 完全不交集,以前一个都选不到、只能手填 id),绑定了出口的 Key 只列该出口的目录并在清单上方标出出口,未绑定(跟随面板切换)的才取全量;清单按出口分别缓存,不再由先打开的 Key 决定后面所有 Key 的清单。CodeArts 未启用时不去请求该目录。 - 手机端账号卡的长昵称不再顶出卡片:账号名那格的直接子项原来按内容宽排(
min-width:auto),昵称一长就把整格撑到卡片外面——390px 视口实测单元格内容宽 271px、名字行 434px,右侧被硬裁且没有省略号。现在该格的直接子项钉住min-width:0;max-width:100%,长昵称按格宽省略。 - 手机端账号区三处布局修正:批量操作那组 6 个按钮一行摆不下时会被压成竖排单字,窄屏改为两列网格(3 行 2 列),文字保持横排;账号卡第一行原来塞了昵称、备注、分组、任务开关、版本、状态、账户类型,长昵称时整行顶出卡片,现在任务开关与版本 / 状态 / 类型收到第二行单独显示;操作区两层 flex 容器各自换行时「出站身份」会整块另起一行、中间空出一段,两行容器改为
display:contents拆平,按钮按顺序自然流动(「导出」紧跟「同步昵称」,「删除」排在出站身份之后)。以上都只在 ≤640px 生效,桌面布局不变。 - 请求到达即记日志(
chat head):聊天日志行要等请求体收完才写,上传慢的请求在那段窗口里一行痕迹都没有,看起来像「对话卡住」,也分不清「上传慢」与「请求没到本进程」。现在do_POST在模型路由的请求头到达时先记一条chat head(带content_length与 key),配合body_wait能直接区分两者。只覆盖对话真正使用的路由,面板轮询不刷日志。 responses:日志同时打客户端与实际生效的推理强度:原来只打请求体里的effort,客户端不填时恒为None,读起来像「没开思考」,实际按模型默认档(如high)在跑。现在同时打effort=(客户端)与upstream_effort=(实际写进上游请求的值),两者用与构造请求体同一份解析逻辑。- 自绘下拉面板不再被祖先裁剪、移动端出口/权重格不再互相挤压:
.cs-panel从position:absolute改为position:fixed,打开 / 滚动 / 缩放时把触发器坐标与最小宽度写进内联样式,向上展开的下拉不会再被账号卡区块的overflow-y:auto裁掉首行。出口 / 权重两格在移动端改用flex:1 1 0占剩余宽度,长节点名不再溢出盖住「权重:」标签。 - 400 / 未处理 4xx 不再泄漏账号并发名额:上游 400(如 11-128 渠道校验)原样透传时直接
raise,跳过了重试循环后的统一归还,账号在account_max_concurrent计数里永久 +1。上限为 1 时一个漏掉的名额就让它永远「已在服务 1 个请求」——面板健康、账号测试也绿,但派发再也不选它,只有重启进程才恢复。其它未单独处理的 4xx(如打错路径的 404)走同一个raise,问题相同。现在两处raise之前都先归还名额。 - 网关重启后账号列表不再被旧筛选过滤成空:账号筛选(搜索词 / 状态 / 分组)是内存态,而网关重启后会话失效、重新登录不会刷新页面,重启前设的条件会原样留到登录后,把账号列表过滤成空——「当前禁用」区用的是未筛选名单,反而还显示账号,看起来像账号全丢了,必须手动点「清除筛选」才恢复。现在会话丢失与每次进入面板都会重置账号筛选,以「显示全部账号」为默认。
- 账号表「权重」列不再只剩一个箭头:64px 的列宽减去单元格内边距只剩 40px,自绘下拉的触发器要吃掉 padding 18px + gap 8px + 箭头 11px,数字被挤成 1px 宽。现在列宽放宽到 78px、该列内边距收到 8px,并给权重下拉单独的紧凑触发器,1–3 位数都留得下。
- 国际版 DeepSeek 出站别名:客户端和
/v1/models继续显示deepseek-v4.1-flash(同时保留显式-sg),实际发给国际版上游时使用deepseek-v4.1-flash-sg;API Key 模型白名单仍按 base 校验,响应与用量记录保留requested_model=deepseek-v4.1-flash,实际计费模型记为-sg。面板账号测试、每日活跃与窗口探针也走真实-sg。WB_INTL_MODEL_ALIAS=0可关闭映射。出站桌面身份同步到 5.9.4(UAWorkBuddy/5.9.4 workbuddy-ai/5.9.4 CLI/2.165.0)。 - 用量聚合缓存跳过写盘时不再静默停更:checkpoint 写盘因状态锁被占、状态暂不可序列化或写入异常而跳过时,按类节流告警并登记后台异步补写(30 秒起指数退避,封顶 15 分钟);补写成功立即取消,失败继续重试。新增 64MB checkpoint 落后告警、蓝绿双进程临时文件隔离,避免
remaining一类缓存连续多日不落盘、重启后反复全量重折。 - 设置页分组在正體中文 / 英文界面不再整页空白:分组胶囊靠各区块的
h2标题文字比对归类,界面语言切到正體中文或英文后标题已被 i18n 换掉,比对全部落空、每个区块都归到「日志与系统」,于是点「基础 / 自动化 / 稳定性」时把整页 section 全部 hidden(看起来设置页清空)。现在改用 i18n 翻译前保留的原文比对,三种语言的分组结果一致;另补上漏归的「选择网页活跃提示词」(原来被归到「日志与系统」)。 - 账号分组(#707):账号新增可选分组,支持按组筛选、导入时指定分组、单账号编辑、分组启停,以及刷新凭证 / 测试 / 补积分等批量操作仅作用于当前分组;API Key 账号选择器也支持按组选入与移除。
- API Key 配置示例(#704):设置页新增可折叠的 Base URL、cURL 与各协议端点示例,并支持一键复制。
- 检查更新支持代理槽(#798):可在设置页指定 GitHub 更新检查使用的代理槽;槽停用或删除后自动回退直连。
- 会话粘滞修复(#718):小账号池的长会话不再按页轮换账号,避免前缀缓存丢失和 Token 消耗翻倍。
- 请求体超限 413(#799):先返回 413,再在有限时间内排空上传,避免连接重置吞掉响应。
- CodeArts 参数与模型 ID(#794 / #797):输出 token 按模型上限收敛、
stop字符串归一化;参数错误返回 400 且不冷却账号。deepseek-v4.1-flash与-1017为独立模型,精确匹配。 - 提示词改写与模型倍率(#796 / #774):恢复退化为空操作的
SANITIZE_REWRITES;live 目录的x0.00不再覆盖已知付费倍率。 - 风控连坐暂停保护可配可立即解除:设置页「稳定性」新增「风控连坐暂停保护」卡片。上游 403 / 11140 异常行为触发全区域暂停派发时,面板展示实时剩余倒计时,提供「立即解除暂停」一键解冻恢复请求;支持自定义暂停时长(默认 1800 秒,设为 0 可彻底关闭连坐熔断保护),且保存更短时间时即时截断现有倒计时。
- 账号多时面板更顺:账号表改为客户端分页(每页 50 个,排序与筛选作用在全部账号上再切页;改区域 / 改筛选 / 点表头回第 1 页,账号变少时页码夹回最后一页);15 秒账号轮询拿回的数据与视图都没变时不再整表重画,且只在显示账号数据的页签(网关、账号、任务,新导航的总览)上跑,切回这些页签时立即拉一次;自动补积分改为只点名缺积分的号(
POST /accounts/credits新增uids列表参数,非列表回 400),每个号每次页面加载最多补一次,不再触发全池逐个刷。手动「一键刷新积分」不变。 - 移除已废弃的
WB_DEEPSEEK_FLASH_FORCE_SG文档行与两个恒返回False的存根函数(#776)。 - CodeArts 模型倍率:
/v1/models?realm=codearts的条目新增credits(如x0.7,与 WorkBuddy 目录同一写法),取自上游模型目录的标准档;错峰优惠档不计入,上游没有倍率的模型不带此字段。 - 改善 Claude Code 兼容性(#733):
sanitize现在把You are Claude Code, Anthropic's official CLI tool for Claude.整句中性化; 旧规则只把CLI for Claude改写成CLI tool for Claude,反而保留了You are Claude Code指纹。覆盖大小写与弯引号,user/tool内容不改写。 - 添加账号时可指定登录出口代理槽:OAuth 登录弹窗新增「登录出口代理」下拉(只在配置了启用的代理槽时出现),申请授权链接、等待回调与拉取账号资料都走选中的槽,登录成功后账号绑定到该槽,避免登录 IP 与后续调用 IP 不一致。默认「直连(不走代理槽)」,与以前完全一样;选「自动」(
proxySlot: "auto") 时随机挑一个没绑定账号(含 CodeArts 账号)、也没被其他进行中登录占用的槽,没有空闲槽则直连。已绑定槽的账号用「自动」重登会保留原槽;槽绑定不写进账号的旧版proxy字段。/accounts/login/start的日志与响应只给代理的 host:port,不含用户名密码;不存在或已停用的槽返回 400。 - 启动检查不再把"端口能连上但一直不答"当成端口空闲。此前
--probe-only用 2 秒超时探/health,卡死的实例只会让它超时,于是判定端口可用、又叠了一层实例;Windows 的SO_REUSEADDR允许重复监听,内核仍把新连接分给卡死的那个,看板与日志查看器就一直是空的。现在这种情况明确报错(退出码 1)并给出占端口 PID 的查法,不再静默重复启动。 - 部署入口改用
python3 -m wb_proxy(OpenWrt init 与 Dockerfile):同一份代码实测空闲内存少 47-54 MB(#702 / #777)。 - 新增
WB_DUMP_11_128本地取证开关(默认关闭):1只写脱敏摘要,full额外写出站 body,文件落在usage/11-128-dumps/;用于定位 Claude Code 专属 11-128 的真实请求差异 (#733)。摘要不含提示词明文,full含明文但由使用者显式开启。 - 国际版每日活跃总开关:设置页「国际版每日活跃打卡」新增「定时自动打卡」勾选框(
settings.json键daily_activity,/settings/save只收 JSON 布尔)。缺省开启,老安装行为不变;关掉后调度器不再自动跑每日活跃(定时时段、立即巡检保活、启动补跑都跳过,启动补跑留到重新打开后再消费),账号上的手动打卡不受影响。 - 用量缓存写盘不再拖住其他视图:checkpoint 写盘收集各类聚合状态时,状态锁改为非阻塞尝试;某一类正在锁里全量重折(GB 级
usage.jsonl冷启动要几十分钟)时这一类本次跳过、下次再写,不再连带/usage/by-account等视图一起卡住(面板「账号加载失败」/ Cloudflare 524)。
完整历史版本与详细变更日志请查阅 docs/CHANGELOG.md。
在协议逆向、风控规避、任务链路与工程化设计过程中,本项目参考、吸纳并致谢以下优秀开源项目与技术成果(排名不分先后):
- Sliverkiss/workbuddy2api:成长任务逆向、设备指纹派生(
derive_id)、调度器(Scheduler)与reasoning_content回填设计; - L0NE-6/WorkBuddy-Daily:国内版微信小程序专属事件指纹与动态专家深链任务模型;
- 88lin/workbuddy-auto-signin:猫猫日常旅行与成长能量开盲盒(Buddy 盲盒)安全生命周期;
- linguo2625469/workbuddy2api-panel:国内版连登管家闭环逻辑与轻量对话活跃上报事件;
- Zhengyuuuui/workbuddy2api:国际版 11140 风控限制识别、冷却规避与故障排查清单;
- yuanyuanyuan430/workbuddy2api-hub:国际版 EdgeOne CDN 证书错配排查与活跃上报优雅降级方案;
- CangShui/workbuddy-cliproxy-fix & lovingfish/workbuddy-cliproxy:早期客户端代理修复与网关通信原型;
- mmqz/cpa-multi-plugins:多插件管理与出站调度结构参考;
- ardeyouxipianyi/workbuddy2api:国内版早期分发包逆向分析与出站 User-Agent 规范;
- aodianjun/workbuddy2api-hub:OpenWrt 路由器打包配方(
.ipk/.apk)与系统服务支持; - astral-sh/python-build-standalone:Windows 便携版免安装精简独立 Python 运行时构建基石;
- deepseek-ai/deepseek-harness:DSH 客户端协议与提示词指纹清洗规避参考。
感谢所有向本项目提交 PR、反馈 Issue 与分享实测样本的社区贡献者!
本项目仅用于协议学习与个人开发测试,不提供任何商业服务或可用性担保。因使用非官方客户端产生的账号风控、限制或封禁由使用者自行承担,请优先使用官方客户端。
