Sign inSign up

oozzbb/workbuddy2api-panel

By oozzbb

•Updated about 6 hours ago

WorkBuddy2API Panel - Docker Image

Image
1

3.2K

oozzbb/workbuddy2api-panel repository overview

WorkBuddy2API

⁠WorkBuddy2API Panel

把腾讯 CodeBuddy 账号变成 OpenAI 兼容 API 的多账号网关 · 附 Web 管理面板
Web 面板 · OAuth 浏览器登录 · 账号池轮转 · 熔断与冷却 · 会话粘性 · 定时签到 / 活跃 / 旅行 / 保活 · 成长任务一键完成(17/18) · 流式 / 非流式

Go API Deploy Transport


本项目是 Sliverkiss/workbuddy2api⁠ 的增强分支(fork)。 上游仓库现已删除;本项目已同步至上游删库前的最后一次更新(ea8b1e5),此后由本分支独立维护演进。 在上游基础上重构了可视化运维层;差异概览见 与上游的差异⁠,上游设计的精巧之处(账号池调度、错误分类、提示词体系)原样保留,详见下文。

⚠️ 本项目仅限自用账号(签到 / 保活 / 个人工具接入),不支持同时也是禁止批量小号分发额度、二次打包或收费售卖。 详见 使用声明(必读)⁠。

⁠使用声明(必读)

本项目(含上游 Sliverkiss/workbuddy2api⁠,下同)的开发初衷只有一个:方便个人管理自己的 CodeBuddy 账号——自动签到、保活、给自己的本地工具提供一个 OpenAI 兼容入口。它是免费、开源、按「原样」提供的个人自用工具。

近期我们发现有人将本项目用于以下行为:

  • 批量注册小号 / 收购账号,对外提供付费 API、共享池、代充等业务;
  • 二次加壳、捆绑卡密(授权码)售卖,或以「公益服」「低价中转」等名义变相收费分发。

我们对上述行为表达最强烈的反对,并声明如下:

  1. 一切商用 / 售卖行为与本项目及作者无关。 本项目不授权、不支持、不参与任何面向公众的 API 售卖、账号池出租、卡密收费分发;行为人由此产生的一切后果(包括但不限于账号封禁、条款违约与法律风险)由其自行承担,与作者和贡献者无任何关系。
  2. 批量注册与转售接口配额违反目标平台服务条款。 CodeBuddy / 腾讯系服务条款禁止批量注册账号及商业转售接口。上游仓库已删除、停止公开维护——我们无法断定具体原因,但此类滥用行为正在毁掉所有正常使用者的环境,请勿再消耗社区的善意。
  3. 请勿购买任何「收费版」「卡密版」「公益中转版」。 本项目永远免费开源。任何加壳、加密、捆绑收费的「版本」都是他人篡改的产物,与本项目无关;且此类分发无法审计,存在被植入后门、回传并窃取你 CodeBuddy 凭证的风险(auths/ 中保存的是明文 accessToken / refreshToken)。你付钱买到的不是本项目,而是把自己账号交给陌生人的机会。
  4. 关于开源协议的诚实说明。 本项目基于 MIT 协议开源,协议允许自由使用与修改源码——这是开源的本意,我们不会收回;但 MIT 赋予的是代码层面的自由,不赋予以本项目名义宣传、售卖、捆绑分发,或要求作者提供支持与背书的权利。作者不为任何第三方分发版本提供支持、更新承诺或安全保证。
  5. 作者保留止损的权利。 若滥用行为持续,作者可能随时停止维护、关闭或删除仓库,且不另行通知。上游的今天可能就是本项目的明天,望自重。

如果你的用途是管理自己的账号,欢迎正常使用、反馈问题与提交 PR。

⁠项目简介

WorkBuddy2API 是一个自托管的 OpenAI 兼容反向代理网关,将腾讯 CodeBuddy(copilot.tencent.com)账号包装为统一的 /v1/chat/completions 服务。

  • 官方不提供 OpenAI 形态的开放 API,本项目通过 OAuth 设备授权(面板「添加账号」或 login.sh)获取账号凭证,在网关侧做 token 自动刷新、账号池调度与流量治理;
  • 面向 个人多账号 场景:多账号共享、单号故障自动换号、冷却 / 熔断防止雪崩、会话粘性保证多轮上下文不跳号;
  • 对客户端只暴露 OpenAI 兼容接口,现有 SDK / 前端 / 工具 零改造接入。

⚠️ 合规须知:本项目是非官方网关,使用 CodeBuddy 账号作为上游,仅限本人授权账号、本机 / 私有环境测试。详细边界见安全与合规⁠。

⁠核心能力

能力说明
🔑 OAuth 一键登录login.sh 设备授权流程,自动落盘凭证并重启容器加载新账号
🔄 多账号池快过期积分加权 + 成本分层 + 加权随机选号,Top-5 候选 + 防惊群
🛡️ 熔断与冷却429 软冷却 600s 起指数退避(封顶 soft_rate_max)、404 固定 60s 短冷却、402 硬冷却至次日 04:00、连续失败熔断、在途租约限流
🧲 会话粘性同一会话(conversation_id)尽量绑定同一账号,TTL 滚动续期,失败自动解绑,可镜像 Redis 防重启丢失
⏰ 定时任务签到(09/21 点,末尾自动跑连登管家:兑换已解锁档位 + 抽完抽奖次数)+ 活跃上报(10 点,点亮连登 / 解锁领养 + streak 自检)+ 猫猫旅行(09/21 点,独立排程)+ token 保活(22 点),四类独立开关
⚡ 流式 + 非流式出站强制 stream:true;SSE 帧按规范白名单重建;非流式由本地聚合为单响应
🧠 推理模型兼容DeepSeek 思维链注入(thinking.type=enabled + 默认档)、reasoning_content 多轮回填、effort 档位自动降级
💬 系统提示词体系网关自有提示词替换客户端 system(默认 custom),从源头消灭 system 来源的内容误报;passthrough 遇拦截自动降级重试
🗑️ 指纹脱敏出站请求体黑名单指纹字段清洗(可关闭),与提示词体系两层叠加
📊 可观测每请求一行表格日志(TTFB / token 速率 / uid);/healthz 带 service 身份标识可接负载均衡 / 宿主探活
💾 状态持久化池状态本地原子落盘 + Upstash Redis 异步镜像(可选),重启择新恢复
🖥️ Web 管理面板内嵌单页面板(明暗主题,七个视图):账号运维 / 用量与积分分析 / 模型档位条件查询 / 在线改配置(热生效)/ 运行日志(含调用来源 IP·UA 与时间区间)/ 积分任务,见 Web 管理面板⁠

⁠🎯 成长任务一键完成(17/18)

官方「成长计划」的 18 个成长任务中,17 个可在面板上一键纯 API 完成——无需安装官方客户端、无需人工交互,点一下「一键完成」即自动推进进度、等待异步计分落定并自动领奖。剩余任务展示操作指引。

⁠任务覆盖与奖励
任务奖励一键完成方式
first_buddy+300c +8e解锁上报 → 同意协议 → 领养第一只 Buddy
create_canvas+300c +5e设计画布创建事件组(Ardot 遥测)
chat_5+100c对话活跃上报 ×5(自动补足差额)
Model_chat_GLM5.2+100c +5eglm-5.2 真实对话一次(发一条短消息)
RichMeow_Chat+100c +5e +UR Buddy桌面端对话事件链(6 事件,含成功回执)
Buddy_App+100c +5eBuddy 应用「发现→进入→授权」事件链
Buddy_App_QQ+50c +5e企鹅教师助手进入事件链(与上一条共用)
automation_1+100c +5e定时任务创建成功事件
Library_read+100c +5e资料库阅读点击(web 域上报)
template_5+100c +5e模板使用事件组 ×5
playbook_prompt+100c +5e灵感案例「做同款」发送事件
expert_5+100c +5e真实专家召唤+使用链 ×5(专家市场拉真实专家 → 真实对话 → 使用事件)
Expert_team_use_3+100c +5e专家团召唤+使用链 ×3
Hp_Appearance+100c +5e主题设置 + 皮肤生效事件
Expert_lighthouse+100c +5e轻量云专家召唤+使用链(真实对话 requestId,可免费领一个月轻量服务器)
skill_1+100c +5e真实对话 + 技能加载事件(skill_info)

全新账号一键全做完 ≈ +1950 credits +78 能量,其中仅数个任务涉及真实对话(Model_chat_GLM5.2 一条、expert_5/Expert_team_use_3/skill_1 各数条 fast-model 短对话),其余全部为行为事件上报,零对话消耗。

⁠不可自动的 1 个
任务原因
Expert_Philanthropy需真实捐款(服务端领奖时校验捐赠回执,已实测无法绕过)
⁠实现原理(简述)

任务计分走 /v2/report 行为上报,但不同任务认不同客户端指纹:CLI 指纹(www.codebuddy.cn)、桌面指纹(copilot.tencent.com + WorkBuddy/5.5.6 UA + workbuddy-desktop 事件族)、web 指纹(www.workbuddy.cn + x-client-platform: web)。网关为每类任务构造对应指纹的判据事件链(internal/upstream/desktop.go);专家类任务额外要求真实专家 id 与真实对话回执(internal/upstream/streak.go 之外的 expert 序列)。上报 200 ≠ 计分——面板在执行后轮询任务进度,达标即自动调用 Web 域领奖接口。

⚠️ 行为事件按天幂等:重复点「一键完成」不会重复扣资源,已达标的任务自动跳过。

⁠🧭 任务中心(面板新视图)

「任务中心」视图把散落的任务能力收拢成一处:

  • 全账号任务扫描:一键拉取每个账号的成长任务(未完成且可自动化的 19 项,含小程序口径的「校园日」与「小程序首对话」)+ 开学季待办,列表一目了然
  • 执行队列:把待办按账号排队执行——账号内串行(与单任务/一键完成共用互斥锁),账号间可选并发(1-3);执行进度实时更新到每个条目
  • 开学季独立状态卡:每账号 5 任务(分享/桌面/对话×3/专家/学生认证)的状态矩阵 + 剩余抽奖次数,一键触发全账号闭环
  • 日志分频道:运行日志按「任务 / 对话 / 系统」三个频道筛选——对话流量再大,任务结果也不会被冲掉;日志条目带频道徽标与时间
🎒 开学季活动(5/5 全自动)——活动期至 2026-09-24,已结束;逆向成果存档,点击展开

官方「AI 好 Buddy,开学有好礼」小程序活动的 5 个任务全部纯 API 自动完成(挂签到排程末尾,幂等):

任务奖励(每日)判据(已逆向)
分享活动+100c +1抽奖share-complete 直调即点亮
桌面端体验(单次)+100c +1抽奖viewed 激活 + 真实 chat + 桌面六事件链
和 AI 对话 3 次+50c +1抽奖viewed 后 3 条 chat_request_send 埋点(无需真实会话)
召唤开学季专家+50c +1抽奖viewed 后 mp 事件链(召唤×3 + 对话)
学生认证+100c需微信学生真实认证,不做

抽奖次数自动全部抽完。期间逆向成果(cf-connect 加密通道、mp 云对话全链路)记录在 data/desktop-task-protocol.md §8。

同一活动在成长任务中心还有两条小程序口径任务(X-Client-Platform: miniprogram 专属下发,默认列表不可见,各 +100c+5e):

任务判据(已逆向)
school_season 校园日mini chat_request_send + activityId=school_open_day_2026(无 activityId 不点亮;accept/claim 均要求 mp 头)
Sequential_Tasks_1 小程序首对话mini chat_request_send(无 activityId,服务端按 source=mini_program 指纹关联)

任务中心扫描自动合并 mp 口径待办;accept 带登记回读验证(上游存在 200+OK 但未落账的形态,未生效自动重试一次)。

⁠连登兑换与抽奖(自动)

成长中心连登档位(连续登录 7/14/28 天)兑换后发放积分 / 能量 / 补签卡 / 抽奖次数,抽奖次数只能从兑换获得。网关把它挂在每日签到排程末尾自动跑闭环(见定时任务⁠):档位解锁当天自动兑换、有抽奖次数自动抽完,全程无需人工盯。

⁠🆚 与上游的差异

本分支相对 上游 master⁠ 的增量(均已在真实多账号环境验证):

⁠新增
能力说明
Web 管理面板internal/panel,前端 go:embed 单文件进二进制,零外部依赖。账号池可视化(健康色条 / 积分量条 / 冷却倒计时)、积分到期分布、单号运维、批量任务、日志查看、明暗主题
请求指标与脱敏日志面板展示完成成功率 / HTTP 成功率 / 平均耗时 / 最近请求,响应带 X-Request-Id;JSONL 只归档请求元数据,不写提示词、响应正文或凭证
浏览器内 OAuth 添加账号面板「添加账号」按钮完成设备授权 → 凭证落盘 → 热加载进池(免重启),替代命令行 login.sh 流程
在线配置编辑(热生效)面板直接改 config.json:API 密钥 / soft_rate / 脱敏开关 / 池参数 / 任务排程立即生效;装配期字段(listen 等)保存后提示需重启。写入采用深合并 + 原子替换,保留未知键
积分任务体系任务列表 / 接受 / 领取接口 + 面板弹窗;「一键完成」覆盖 17 个任务(对话 / 领养 / 桌面行为链 / 模板 / 灵感案例 / 画布 / 专家召唤 / 技能尝鲜 / 主题 / 资料库 / 夜猫子等),推进进度、等待异步计分落定后自动领奖,纯 API 零客户端依赖
首启自动生成配置目录下无 config.json 时自动生成推荐配置(含 crypto/rand 随机 api_key),双击即开
粘性会话内容回退客户端不发 conversation_id 时,用 system + 首条 user 哈希派生会话键(d- 前缀),通用 OpenAI 客户端也能享受粘性
余额后台刷新schedule.balance_refresh_minutes(默认 5)周期查余额并更新池,冷却账号余额恢复自动解冻
模型能力透出/v1/models 附带 supported_efforts / default_effort / 积分倍率 / 输入输出上限等上游真实字段
安全加固常量时间密钥比较(internal/httpauth)、CSP 与安全响应头、UID 白名单防路径穿越、前端属性转义修复
领养前置修复上游 travelAdopt 缺 report 前置导致领养恒失败于 first_buddy task not completed yet;本分支修正后实测 +300 到账(3/3 账号)
原生工具调用标记还原上游(DeepSeek 系)的工具调用原生语法是带全角竖线的标记文本,仅在请求声明了 tools 时才被上游解析成结构化 tool_calls。实测 tools 声明在中转环节(Responses → chat/completions 等)丢失是常态,此时模型仍想调工具,标记就以纯文本落进 content——Codex 这类只执行结构化 function_call 的客户端会把它当普通正文写进会话历史,回合直接结束、工具一次都没跑。网关在出站响应里识别并还原成 tool_calls(流式与非流式都覆盖)
⁠同步上游

第一轮(fork 基线 53ee3a1 → 9a87758,34 个提交):四类任务独立排程、pool 文件拆分、12153 连续计数才禁用、429 code=6004 模型级限流收窄、11101 不罚号、请求体 413、DeepSeek 思维链、reasoning_content 回填、Codex 指纹脱敏、系统提示词体系、出站 UA 可配等。

第二轮(9a87758 → ea8b1e5,2026-09-14,只吸收底层):

上游改动吸收内容
净化增强tool_calls.arguments 盲区修复(content=null 的工具调用轮此前完全漏净化)、裸 11128 反探测改写、桌面版身份句(逗号形态)漏网修复、反馈句整句改写
出站头族UA 对齐官方三段式 WorkBuddy/<ver> WorkBuddy/<ver> CLI/<ver>(默认 5.5.4/2.137.1,可配);X-IDE-* 用量归属四头 + X-Agent-Purpose(client_name 配 WorkBuddy 即对齐官方桌面端);X-Device-Token 设备风控头(auth 每号 / config / 文件三源);X-IDE-Version 补齐
并发修复客户端 IP 改按请求参数传递(消除共享字段竞态);billing 单段 UA 形态
签到幂等IsAlreadyCheckin 识别"今天已签到"(code=10001/14001),调度日志不再把重复签到当失败
粘性按模型判活会话绑定的账号被 6004 模型级限额后,换模型请求自动解绑重分配(治"限额后换不动号");/healthz 探活计入模型豁免形态(治"全号被单模型限流探活误报 503")
report 增强ReportChatActivity 支持独立 requestID(同会话多轮上报各条可区分)

未吸收(明确不做):脚本体系(task_runner/school 脚本—我们已有更完整的纯 API 实现)、governance/CI workflow、成本账本选号(依赖 usage.credit 观测,收益待验证)。

上游仓库此后已删除,上述第二轮(ea8b1e5)即其删库前的最后一次更新,本分支已完整吸收。此后本仓库与上游不再有同步关系,演进以本仓库为准。

⁠架构总览

flowchart LR
    Client["客户端 / SDK\nOpenAI 兼容请求"] --> H

    subgraph GWI["WorkBuddy2API 网关 :7863"]
        H["HTTP Handler\n鉴权 · 请求体上限 · 提示词改写 · 轮转"] --> P
        H --> S
        P["账号池\n快过期加权 · 成本分层 · 熔断 · 冷却 · 租约"] --> U
        S["会话粘性路由"] -.绑定镜像.-> REDIS
        T["定时调度\n签到 09/21 · 旅行 09/21 · 活跃 10 · 保活 22"] --> P
        U["上游 Client\nChatHTTP 流式 · 短 RPC"]
    end

    P -. "读凭证 (0600)" .-> AUTH[("auths/*.json")]
    P -. "状态镜像" .-> REDIS[("Upstash Redis\n可选")]
    U -->|"chat/completions (SSE)"| CB["CodeBuddy\ncopilot.tencent.com"]
    U -->|"billing / auth / growth"| CB

上游请求在出站前经历统一的改写管线(internal/upstream/payload.go):强制 stream:true、developer 角色归一、tool_choice 归一、image_url 字符串兼容为 OpenAI 对象形态、DeepSeek 思维链注入、reasoning_effort 档位降级、reasoning_content 回填、指纹脱敏。

⁠快速开始

⁠环境要求
  • Docker + Docker Compose(服务端部署方式,镜像内已含低权限用户与全部工具脚本)——或
  • Windows / macOS / Linux 直接跑单文件二进制(无需 Docker,见下方「Windows 单文件运行」)
  • 一个或多个已注册的 CodeBuddy 账号,用于 OAuth 登录
  • 宿主机 Go ≥ 1.22(仅从源码构建时需要)
⁠方式〇:GHCR 镜像(免克隆免构建)

CI 会自动构建多架构镜像(amd64 / arm64)并发布到 GHCR,git clone 之外的部署路径:

# 1. 准备配置与数据目录
mkdir -p auths data && cp config.example.json config.json
#    建议编辑 config.json 设置 api_key(或留空由程序自动生成随机密钥)

# 2. 拉取并运行
docker run -d --name workbuddy2api \
  -p 7863:7863 -e TZ=Asia/Shanghai \
  -v ./auths:/app/auths -v ./data:/app/data -v ./config.json:/app/config.json \
  ghcr.io/linguo2625469/workbuddy2api-panel:latest

# 3. 健康检查(无可用账号时返回 503)
curl -s http://localhost:7863/healthz

首次发布后须将包设为公开:GitHub 仓库页 → Packages → workbuddy2api-panel → Package settings → Change visibility → Public,否则拉取需要 docker login ghcr.io。

镜像 tag 规则:main 分支推送 latest / main / sha-xxxxxx;打 v* tag 额外发布 1.2.3 / 1.2 / 1 语义化版本;PR 仅构建验证、不推送。

⁠方式一:Docker Compose(推荐服务器部署)
# 1. 克隆
git clone https://github.com/linguo2625469/workbuddy2api-panel.git
cd workbuddy2api-panel

# 2. 准备配置(compose 挂载此文件,缺失会导致容器启动失败)
cp config.example.json config.json
#    建议编辑 config.json 设置 api_key(或留空由程序自动生成随机密钥)

# 3. 启动(首次会构建镜像,约 1-2 分钟)
docker compose up -d --build

# 4. 健康检查(无可用账号时返回 503)
curl -s http://localhost:7863/healthz
# {"healthy":0,"total":0,"service":"workbuddy2api"}

启动后打开 http://localhost:7863/panel/,用面板「添加账号」完成登录(见下节)。

常用运维命令:

docker compose logs -f          # 跟踪日志
docker compose restart          # 重启
docker compose down             # 停止并移除容器(数据在 ./auths 与 ./data,不受影响)
⁠方式二:Windows 单文件运行(无需 Docker)
# 1) 下载 Release 中的 wb2api.exe,或从源码构建
go build -trimpath -ldflags="-s -w" -o wb2api.exe ./cmd/server

# 2) 直接运行:首次启动自动生成 config.json(含随机 api_key,日志打印一次)
.\wb2api.exe -config config.json

# 3) 浏览器打开面板添加账号
#    http://127.0.0.1:7863/panel/

exe 为单文件自包含(前端资源已 embed 进二进制),拷到任意 Windows 机器即可运行,只需保证 auths/(凭证)与 data/(状态)目录可写。

⁠方式三:源码运行(开发调试)
go build ./...
go vet ./...
go test ./...                      # 完整测试套件
go run ./cmd/server -config config.json

构建全部二进制:

CGO_ENABLED=0 go build -trimpath -ldflags="-s -w" -o wb2api ./cmd/server
CGO_ENABLED=0 go build -trimpath -ldflags="-s -w" -o signin_bin ./cmd/signin
CGO_ENABLED=0 go build -trimpath -ldflags="-s -w" -o login ./cmd/login
CGO_ENABLED=0 go build -trimpath -ldflags="-s -w" -o credit ./cmd/credit
⁠添加账号(登录)

方式 A:Web 面板(推荐,各平台通用,免命令行)

打开 http://127.0.0.1:7863/panel/,点右上角「添加账号」:面板展示授权链接 → 浏览器完成登录 → 自动检测并落盘凭证 → 热加载进池(无需重启),顺带完成首次签到。

方式 B:命令行脚本(仅 Linux / macOS,依赖 bash + python3)

./login.sh
# 按提示在浏览器打开授权链接 → 回到终端确认 → 凭证落盘 auths/workbuddy-<uid>.json

login.sh 内置授权 URL 获取 + 浏览器登录 + token 轮询 + 首次签到 + 凭证落盘 + 容器重启,全程无 PKCE(state 由服务端签发)。账号池在容器启动时用 auths/ 目录自动对齐,新增凭证文件即自动发现。

Windows 用户请用方式 A(或 WSL);login.sh 需要 python3。

⁠验证
# 模型列表
curl -s http://localhost:7863/v1/models -H "Authorization: Bearer your-api-key"

# 账号状态(汇总 + 每账号详情,disabled 账号透出 disabled_reason)
curl -s http://localhost:7863/status -H "Authorization: Bearer your-api-key"

# 流式聊天
curl -sN http://localhost:7863/v1/chat/completions \
  -H "Authorization: Bearer your-api-key" \
  -H "Content-Type: application/json" \
  -d '{"model":"deepseek-v4-flash","messages":[{"role":"user","content":"hi"}],"stream":true}'

# 非流式聊天(本地聚合)
curl -s http://localhost:7863/v1/chat/completions \
  -H "Authorization: Bearer your-api-key" \
  -H "Content-Type: application/json" \
  -d '{"model":"deepseek-v4-flash","messages":[{"role":"user","content":"hi"}],"stream":false}'

⁠配置说明

config.example.json 是配置项最完整的参考:每个字段、默认值与结构都能在其中找到,示例值一律是 test_key 之类占位符,不含任何真实密钥。下表为字段含义速查。

⁠字段速查
字段默认说明
listen:7863HTTP 监听地址
api_key空网关鉴权

Tag summary

Content type

Image

Digest

sha256:f8f357b2f…

Size

30.2 MB

Last updated

about 6 hours ago

docker pull oozzbb/workbuddy2api-panel