- Accueil
- Plugins
- Modèles et fournisseurs
- dsh-hyperworkbuddy
dsh-hyperworkbuddy
chayewuu/dsh-hyperworkbuddy
Importe dans DSH les comptes WorkBuddy connectés sur cette machine, en séparant les comptes CN et internationaux. Basculement automatique, actualisation en un clic des catalogues de modèles et crédits, pointage quotidien CN et endpoint compatible OpenAI activable/désactivable.
Installer
dsh plugin --profile web add github:chayewuu/dsh-hyperworkbuddyREADME
DSH HyperWorkBuddy
一个 DeepSeek Harness 插件:在 DSH 设置里直接管理 WorkBuddy 多账号,并把模型接进 DSH 与任意 OpenAI 兼容客户端。
- 设置里直接就是一级选项——「设置 → WorkBuddy」,不是藏在「设置 → 插件」里面;
- 多账号池——自动跟随桌面 App 登录,也可手动导入任意多个账号,请求在账号间轮询并自动故障切换;
- 模型直接进 DSH——注册独立 provider,模型选择器里直接选;
- OpenAI 兼容端点——同时给 Codex / Claude Code / 其他客户端用,带总开关;
- 国内版 / 国际版分区——两版各有独立账号池、端点与模型表,互不串号。
功能
| 功能 | 说明 |
|---|---|
| 对外接口开关 | 独立控制 OpenAI 兼容端点;关闭后仅停止对外服务,DSH 内的模型调用不受影响 |
| API Key 管理 | 对外 Key 支持一键重新生成与自定义;旧 Key 立即失效,无需重启 |
| 双版本隔离 | 国内版与国际版各自维护账号、端点与模型表,同名模型不会串到另一区域 |
| 分区折叠 | 每个版本分区可展开 / 收起 |
| 一键刷新 | 批量刷新该版本全部账号的模型目录与积分 |
| 链接登录 | 浏览器内完成官方授权,账号自动导入,无需手动复制 token |
| 档位探测 | 上游未声明推理档位时可手动探测:逐档位发一条最小请求,只采纳上游接受的档位 |
| 一键签到 | 国内版批量为全部账号签到,完成后自动刷新积分 |
| 账号管理 | 自动发现桌面客户端登录;支持粘贴 token 与导入账号文件 |
| 故障转移 | 额度不足、限流或登录失效时自动切换账号,并对该账号指数退避 |
| 会话亲和 | 同一会话固定走同一账号,保住上游的提示缓存命中,不会被轮询打散 |
| 用量看板 | 记录每次请求的 token 与耗时,汇总今日 / 累计 / 近 7 天 / 分账号 / 分模型 |
| 自动续期 | access token 临近过期时自动刷新 |
| 模型显隐 | 可单独关闭模型,仅影响选择列表,不中断进行中的会话 |
| 推理档位 | 按上游声明的档位在 DSH 内选择;未声明的可探测补齐 |
| 第三方导入 | 兼容 WorkBuddy2API-Hub 导出格式,支持批量导入 |
安装
前置:已安装并登录 WorkBuddy 桌面 App(国内版或国际版均可)。插件复用 App 的登录状态,零配置即可用。
本包没有发布到 npm,
npm install dsh-hyperworkbuddy会以 404 结束。 请用下面的仓库地址安装。
方式一:桌面 App 的插件页(推荐)
-
打开 DSH 侧边栏的 插件 页 → 添加插件;
-
「包名或地址」填仓库地址:
https://github.com/ChaYeWuu/dsh-hyperworkbuddy -
点「安装」,装完 完全退出并重启 DSH(新增 bundle 不会被热加载)。
插件页会自己把 dsh-hyperworkbuddy 写进 profile 的 dsh.profile.bundles,不需要手工改
package.json。仓库里带着构建产物 lib/,从 GitHub 直接装不用先构建。
填 GitHub 地址时插件页会先做一次连通性预检(默认 5 秒超时),拉取完成后才校验内核版本 兼容性——所以「无法访问 GitHub」多半就是预检超时,换网络或挂代理后重试。
方式二:交给 Agent
把下面这段原样发给能读写本机的 AI 助手:
请帮我在本机安装 DSH 插件 dsh-hyperworkbuddy:
1. 先确认 DSH 桌面 App 的内置核心版本(看 App 的「关于」页,不要用独立 CLI 的
dsh --version 代替,它通常比桌面内核旧);
2. 在 DSH 侧边栏「插件」页 →「添加插件」里填入
https://github.com/ChaYeWuu/dsh-hyperworkbuddy 并安装;
3. 安装完成后完全退出并重启 DSH;
4. 确认设置左侧导航出现「WorkBuddy」一级菜单,模型选择器里出现
WorkBuddy 与 WorkBuddy AI 两个分组。
安装失败时把插件页上的完整报错贴回来。
方式三:手动改 profile(插件页不可用时)
desktop profile 由桌面 App 独占管理,dsh plugin --profile desktop … 会被 CLI 直接拒绝
(profile "desktop" is managed exclusively by the Electron application),所以只能改文件:
-
完全退出 DSH,并备份
~/.dsh/profiles/desktop/package.json与同目录的pnpm-lock.yaml; -
在
package.json的dependencies里加一行,并把包名追加进dsh.profile.bundles:{ "dependencies": { "dsh-hyperworkbuddy": "github:ChaYeWuu/dsh-hyperworkbuddy" }, "dsh": { "profile": { "bundles": [ "@deepseek-ai/dsh-base", "@deepseek-ai/dsh-web-app", "dsh-hyperworkbuddy" ] } } } -
在 profile 目录里用 pnpm 安装(该目录有
pnpm-workspace.yaml,npm不认):cd ~/.dsh/profiles/desktop pnpm install -
重启 DSH。桌面 App 不捆绑 pnpm,用系统里已装的那个即可;版本过旧会在 pnpm store 上报错,升级 pnpm 后重试。
方式四:命令行安装(web / CLI profile)
上面的 desktop profile 只能走 App,但 web 等 CLI profile 可以用标准命令安装:
dsh plugin --profile web add github:ChaYeWuu/dsh-hyperworkbuddy
必须写 github: 前缀——本包不在 npm 上,写成裸包名会去 npm 找然后 404。装完同样要
完全退出并重启 DSH。
版本要求
插件要求 DSH 内核 ^0.2.0-rc.1(桌面版 0.2.0-rc.2 满足)。内核不兼容时插件页会
拒绝安装并列出所需版本与当前内核版本;按 GitHub 地址安装时这一步在拉取完成之后。
想自己改源码:
git clone https://github.com/ChaYeWuu/dsh-hyperworkbuddy.git
cd dsh-hyperworkbuddy
npm install
npm run build # 产物在 lib/
使用
重启后打开 设置 → WorkBuddy,面板分五块:
- OpenAI 兼容端点——一个对外总开关,外加 API Key 一键复制。 关掉只停掉对外端点(释放端口),DSH 里的模型照常可用。
- 国内版分区——
WorkBuddy的账号与模型,带自己的对外端点地址(默认http://127.0.0.1:8791/v1)。 - 国际版分区——
WorkBuddy AI的账号与模型,带自己的对外端点地址(默认http://127.0.0.1:8792/v1)。 两版的账号、模型、端口互不干扰:同名模型在两区走的是不同上游。 - 用量——今日与累计的请求数 / 输入输出 token / 缓存命中率,近 7 天柱状图,以及今日的分账号、分模型明细。
- 导入区——「重新扫描并刷新」「链接登录」「导入单个账号」,底部是第三方导入。
每个分区可折叠,收起后只剩标题行。分区里:
- 账号:显示来源、状态、积分(含套餐明细可展开)、模型数、到期时间, 可单独刷新积分 / 刷新模型 / 停用 / 移除。所有操作都有进行中反馈。
- 模型开关:每个模型一个复选框,另有「全部开启 / 全部关闭」。上游声明了推理档位的
模型会在下面列出档位(
low / medium / high / xhigh / max),默认档位高亮。
模型在 DSH 里分成两组:WorkBuddy 与 WorkBuddy AI。
链接登录
「链接登录」向官方申请授权链接并自动在默认浏览器打开,登录完成后账号自动入库:
- 选择版本,点击「生成授权链接」(授权页自动打开)
- 在浏览器中完成登录
- 返回面板,账号自动出现(授权窗口 10 分钟,插件每 2 秒轮询一次)
一键刷新与一键签到
- 一键刷新(两个版本均有):批量刷新该版本全部账号的模型目录与积分。
- 一键签到(仅国内版):批量为全部账号签到,完成后自动刷新积分。
上游返回
10001(当日已签)按成功处理。国际版无签到体系,按钮不显示。 - 每日自动签到(仅国内版):打开开关后立刻补签一次,之后每天第一次轮询时自动签到。 每个版本每天只尝试一次——失败多半是上游抖动,每轮重试只会把失败放大, 当天剩下的时间可以手动点「一键签到」补上。面板会显示上次自动签到的日期。
推理档位与探测
档位优先采用上游在目录里声明的 supportedEfforts。上游没声明时,模型条目下方
会出现「探测档位」按钮:
- 逐个档位(low / medium / high / xhigh / max)发一条
max_tokens: 1的最小请求 - 只记录上游接受的档位
- 一旦遇到限流、额度不足或登录失效立刻中止,并且不写入任何结论—— 这些情况说明不了档位是否有效
探测会消耗少量额度,因此只在手动触发时执行;结果持久化在状态文件里, 上游的声明始终优先于探测结果。
第三方导入
面板底部的「第三方导入 → WorkBuddy2API-Hub 导入」用于从其他 WorkBuddy 管理面板 迁移账号,接受:
- WorkBuddy2API-Hub 的导出文档(
{"format":"workbuddy-accounts","accounts":[…]}) - 裸账号数组、单个账号对象、桌面客户端凭据(
{auth, account}) - cockpit 风格的 snake_case 行(
access_token/refresh_token/expires_at)
导入时区域以 token / 域名为准(不信任行里可能过期的 realm),易变字段
(冷却、错误、停用标记)一律丢弃,逐行容错。
用量看板
面板里的「用量」区块记录每次请求,数据只落本机:
- 今日 / 累计:请求数、失败数、输入 token、输出 token、缓存命中率;
- 近 7 天:按天的 token 柱状图;
- 今日明细:分账号、分模型两张表(账号行会标出失败次数)。
统计从 $DSH_HOME/.hyperworkbuddy-usage.jsonl 折出来——每次调用追加一行 JSON,
读取时按天聚合,只保留最近 8 天。这张流水同时也是排查问题的依据:
想知道某个账号到底跑了多少、某个模型是不是在烧额度,看这里即可。
面板上的「清空记录」需要点两次才会执行(第二次变成「确认清空」),清空后流水文件也会删掉。 流水的写入失败不会影响正常请求——写不进去就只是不再记录。
状态文件位置
账号与开关存放于宿主提供的 home 目录下(桌面版为 ~/.dsh/profiles/desktop/):
| 文件 | 内容 |
|---|---|
.hyperworkbuddy-accounts.json | 账号池(含明文 token) |
.hyperworkbuddy-state.json | 对外端点开关、逐模型显隐 |
.hyperworkbuddy-endpoint-key | 自动生成的对外 API Key |
.hyperworkbuddy-usage.jsonl | 请求流水(每次调用一行 JSON) |
早期版本优先读取
$DSH_HOME(~/.dsh),与桌面版宿主不一致,会导致账号 在两个文件间分叉。现在启动时会自动迁移账号更多的那一份,并在原文件旁保留.migrated-from-legacy备份。
两个端点的分工
插件给每个版本起两个端点,这是「关掉对外端点不影响 DSH」的实现方式:
| 内部端点 | 对外端点 | |
|---|---|---|
| 端口 | 随机(不占用配置端口) | 配置端口(8791 / 8792) |
| 鉴权 | 仅进程内密钥 | 面板里的 API Key |
| 用途 | DSH 自己的 provider | Codex / Claude Code 等外部客户端 |
| 开关 | 始终在跑 | 面板总开关 |
所以关掉总开关时:对外端口真的释放,外部客户端连不上;而 DSH 侧连的是内部端点, 模型选择器、对话、故障切换一切照常。
多账号是怎么工作的
- 自动发现:每 30 秒重扫桌面 App 的凭据文件,App 里换账号 DSH 侧自动跟随。
- 手动导入:面板里粘贴 token,账号写入
$DSH_HOME/.hyperworkbuddy-accounts.json。 - 选取策略:优先选「使用次数最少」的账号,同档次按游标轮转,避免把负载压在一个账号上。
- 会话亲和:同一个会话(DSH 会自动带上会话标识)一旦成功用过某个账号,后续请求继续走它。 这不是为了均衡,而是为了命中上游的提示缓存——上游缓存按账号隔离,同一段前缀换账号就要重算。 该账号不可用(停用 / 冷却 / 额度耗尽)时自动退回轮询策略,不会把请求卡住。
- 失败切换:某个账号遇到额度不足(402)/ 限流(429)/ 会话失效(401)/ 上游 5xx 时,自动换下一个账号重试,并对该账号做指数退避冷却(首次 60 秒,翻倍至 1 小时)。全部账号都失败时返回最后一个真实错误。
- token 续期:access token 临近过期(5 分钟)时自动用 refresh token 续期。
- 按版本隔离:国内版端点只用国内版账号,国际版端点只用国际版账号。
外部客户端接入
把面板里对应分区复制的地址与 API Key 填进任意 OpenAI 兼容客户端:
# 国内版
export OPENAI_BASE_URL="http://127.0.0.1:8791/v1"
export OPENAI_API_KEY="面板里显示的那个 Key"
# 国际版
export OPENAI_BASE_URL="http://127.0.0.1:8792/v1"
模型名填模型选择器里看到的 id,如 deepseek-v4.1-flash。
API Key 管理:面板上的 Key 可以一键「重新生成」或「自定义」。
两者都是立即生效——旧 Key 马上失效,不需要重启 DSH。
若 Key 来自 profile 配置里的 apiKeys,面板会提示去配置里改,避免改了没效果。
端点只监听 127.0.0.1,并强制校验回环 Host 与 Origin。未显式配置
apiKeys时, 插件会自动生成一把密钥(存于 home 目录下的.hyperworkbuddy-endpoint-key)并在面板里显示, 而不是把端点对本机任意进程完全开放——否则任何本地程序都能花掉你的 WorkBuddy 额度。 要跨机使用,请自行在前面加一层带鉴权的反代。
配置
在 profile 的 cordis.patch.yml 里覆盖:
- id: llm-hyperworkbuddy
name: dsh-hyperworkbuddy
config:
port: 8791 # 国内版端点端口,0 表示随机
portAI: 8792 # 国际版端点端口,0 表示随机
endpointEnabled: true # 端点总开关的初始值(之后可在面板里随时改)
apiKeys: [] # 外部客户端使用的 Key;留空用自动生成的密钥
hiddenModels: [] # 初始隐藏的模型 id(之后可在面板里逐个切换)
followDesktop: true # 是否自动跟随桌面 App 登录
端点总开关与逐模型开关在面板里改过之后,以面板为准并持久化在
$DSH_HOME/.hyperworkbuddy-state.json;上面的配置只在首次运行时作为初始值。
验证安装
重启后按顺序确认:
- 对外端点已起——
http://127.0.0.1:8791/healthz与http://127.0.0.1:8792/healthz应分别返回{"ok":true,"variant":"hyperworkbuddy",…}与…"hyperworkbuddy-ai"…。 - provider 已注册——打开
http://127.0.0.1:19387/api-hyperworkbuddy/status, 检查variants[].providerRegistered均为true。若为false,同一条目里的providerError会给出原因。 - 设置里有入口——打开 设置,左侧导航应出现 WorkBuddy 一项(一级菜单, 与「模型」「插件」并列)。点击后是账号池与模型开关面板。
模型会以 WorkBuddy 与 WorkBuddy AI 两个分组出现在模型选择器里。
左侧导航的图标是设置齿轮:DSH 的设置外壳只为一小组内置 id(
models、agent-presets、plugins等)准备了专属图标,第三方分区一律回落到齿轮。
排查
| 现象 | 原因与处理 |
|---|---|
| 插件页报「无法访问 GitHub」 | 预检超时(默认 5 秒),换网络或挂代理后重试 |
| 插件页报「不兼容」 | 内核版本不在 ^0.2.0-rc.1 内,升级 DSH 桌面 App |
npm install dsh-hyperworkbuddy 报 404 | 该包没发布到 npm,改用仓库地址安装(见「安装」) |
| 设置里没有 WorkBuddy | 没重启,或 bundle 未加进 dsh.profile.bundles |
providerRegistered: false | 看该分区的 providerError |
| 模型列表为空 | 面板里点「重新扫描并刷新」;确认对应桌面 App 已登录 |
| 国际版账号不出现 | 国际版凭据是加密的,需在面板手动导入 accessToken(或导入 hub 导出) |
| 积分显示「未获取」 | 点该账号的「刷新积分」;仍失败时看账号卡片上的错误文案 |
| 分区里提示「对外端点未启动」 | 端口被占用,改配置里的 port / portAI,或设 0 用随机端口 |
| 关掉对外端点后模型还在 | 这是预期行为:关闭只影响外部客户端,DSH 侧不受影响 |
支持的产品
| 产品 | 区域 | 凭据文件 | 默认端点 | 状态 |
|---|---|---|---|---|
| WorkBuddy(国内版) | cn | workbuddy-desktop.info | :8791 | ✅ 完整支持 |
| WorkBuddy AI(国际版) | global | workbuddy-desktop-ai.info | :8792 | ⚠️ 见下 |
关于国际版的加密凭据
WorkBuddy AI 自 5.6.x 起把 accessToken 存成 $wbEncrypted 信封(AES-256-GCM),
解密密钥编译在桌面端原生模块里、磁盘上没有明文。本插件不做进程内存读取,
遇到加密凭据时会在面板里如实提示,请在面板中手动导入 accessToken,
或直接粘贴 hub 导出的账号文档。
国内版凭据是明文,自动发现开箱即用。
凭据与安全
- 桌面 App 的凭据文件只读不写——插件绝不修改 WorkBuddy 自己的登录状态。
- 手动导入的账号写入
$DSH_HOME/.hyperworkbuddy-accounts.json,含明文 token,请勿同步到公开位置。 - 端点密钥存于
$DSH_HOME/.hyperworkbuddy-endpoint-key;回环端点的进程内密钥仅存于内存,不落盘。 - 面板与端点都只接受回环请求。
已知限制
- 依赖 WorkBuddy 客户端私有接口(非官方开放 API),上游改动可能导致失效。
- 国际版目录走 App 界面接口,服务端按 User-Agent 分流,属私有实现,上游改动可能使其失效;此时保留上次成功目录并标明来源。
- 上游 chat 只接受流式,非流式请求会被自动改写为流式。
- 国际版与国内版账号各自独立调度,暂不支持跨区域混合轮询。
开发
npm install
npm run build # esbuild 打包 lib/index.js(host)与 lib/client.js(浏览器)
npm run typecheck # 类型检查
仓库只包含插件本身与它的源码:lib/ 是构建产物(随仓库提交,从 GitHub 直接安装的
用户因此不必先构建),src/ 是源码。测试与 lockfile 属本地开发用,不进仓库。
源码结构:
src/
index.ts host 入口:按版本装配账号池、端点、provider 与管理路由
accounts.ts 多账号池:存储、轮询、冷却、故障切换
auth.ts 桌面凭据发现与解析(含加密信封识别)
upstream.ts WorkBuddy 上游 HTTP 客户端、错误分类与积分读取
shim.ts OpenAI 兼容回环端点(按版本隔离账号)
adapter.ts pi-ai provider 适配(每版本一个,含推理档位映射)
import.ts workbuddy2api-hub 导出文档解析与导入
state.ts 面板可改的运行时状态(对外端点开关、逐模型开关)
usage.ts 请求流水与用量聚合(今日 / 累计 / 分账号 / 分模型)
variants.ts 国内版 / 国际版变体定义
client/index.tsx 浏览器半边:settings.section 一级设置页
免责声明
- 本项目仅供个人学习和研究使用,仅驱动使用者自己的 WorkBuddy 账号在本机调用。
- 使用者需遵守 WorkBuddy 的服务条款;因使用本项目产生的任何后果由使用者自行承担。
- 本项目与腾讯、WorkBuddy、DeepSeek 均无关联,未获其授权或认可。
参考
- workbuddy2api-hub —— 多账号池、熔断退避与看板形态的参考。
- dsh-workbuddy-connect —— WorkBuddy 上游协议与 pi-ai 适配路径的参考。
许可证
MIT
Plugins associés
dsh-routing-suite
yjh051108/dsh-routing-suite
dsh-our-free-model
ebony-vinyl/dsh-our-free-model
dsh-workbuddy-connect
corrinehu/dsh-workbuddy-connect
dsh-plugin-subscriptions
v1ki/dsh-plugin-subscriptions