ChaYeWuu/dsh-hyperworkbuddy ↗★ 2
dsh-hyperworkbuddy
管理WorkBuddy多账号并暴露兼容端点 适合已安装WorkBuddy,需在DSH中直连其模型或对外提供API端点的用户。
安装
npx -p @deepseek-ai/dsh dsh plugin --profile web add github:ChaYeWuu/dsh-hyperworkbuddy说明文档
阅读完整 README ↗使用
重启后打开 设置 → 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 兼容客户端:
## 配置
在 profile 的 `cordis.patch.yml` 里覆盖:
```yaml
- 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;上面的配置只在首次运行时作为初始值。