dsh-connect-workbuddy-models
Aggregates every WorkBuddy account already signed in on this machine into one model pool, with manual and scheduled check-in, credits and expiry monitoring, per-model credit multipliers, and account switching with remaining credits right below the composer.
Install
dsh plugin --profile web add dsh-connect-workbuddy-models
Sandbox test results
| Stage | Result |
|---|---|
| 1 install | ✓ |
| 2 list | ✓ |
| 3 mount | ✓ |
| 4 boot | — |
Four stages run in an isolated sandbox: install (network on) → list → mount → boot (last three with no network).
README
dsh-connect-workbuddy-models
把本机所有登录过的 WorkBuddy 账号聚合成 DeepSeek Harness 里的一个模型池:自动发现账号、
签到、积分与到期、临期提醒、自动签到、模型倍率与促销徽标,并在输入框下方直接切换账号、查看剩余总积分。
装上之后模型选择器里出现两个分组:WorkBuddy Models(国内版) 与 WorkBuddy Models(国际版)
(provider id workbuddy-models / workbuddy-models-global)。
和 dsh-connect-workbuddy 的关系:那个插件一次用一个账号;本插件把多账号当默认情况——
本机所有历史登录快照全部收进一个池,对外一个 provider 分组,池内自动换号。两者的 provider id
刻意不重叠(它占workbuddy/workbuddy-global),因此可以同时安装,互不抢占。
功能
一、账号自动发现
不挑号、不手动导入。插件扫描 WorkBuddy 桌面端留下的登录文件,同时兼容多个来源:
平台 · 路径
Windows · %LOCALAPPDATA% 与 %APPDATA% 下的 CodeBuddyExtension\Data\Public\auth\(两处都探,只探一处会得到「没有账号」)
macOS · ~/Library/Application Support/CodeBuddyExtension/Data/Public/auth/
Linux · $XDG_CONFIG_HOME/CodeBuddyExtension/Data/Public/auth/(回落 ~/.config)
- 活文件
workbuddy-desktop.info;带时间戳的*.info是历史快照,每一个都能解析成一个账号候选; - 第二个来源是 DSH 自己的 vault(
$DSH_HOME→ 回落~/.dsh); WORKBUDDY_AUTH_FILE环境变量可指定单个文件或目录。
所以 多账号 = 在 WorkBuddy 客户端里换着登几次,之后点设置页的「重新检测账号」或重启 DSH,
新号就自动进池。凭据只读,插件从不索要密码。
读不了的文件会被列出来并说明原因(encrypted / unreadable / malformed),而不是悄悄少几个账号:
Windows 构建会加密令牌字段,这种情况让用户「重新登录」是错的——他本来就登着。
二、积分、到期与临期提醒
能力 · 说明
积分读数 · 剩余总积分、每个积分包的余额与到期
到期时间 · 一次性包的到期时刻;周期包显示下次刷新时刻
临期提醒 · 阈值内会过期的额度单独标出(默认 3 天,可配 1–90 天)
手动签到 · 设置页按账号点「签到」,走上游签到端点
自动签到 · 按北京时间自然日幂等执行,重复调用不会重复领取
权益领取 · 可选顺带领取补偿 / 赠礼积分(claimBenefits)
余额读的是上游 CycleCapacityRemainPrecise 家族,不是 CapacityRemain——后者是 pool 家族,
整月额度已经花完时仍会报满额。
三、账户使用方式
设置页的「账户使用方式」下拉,五种,真正影响换号行为:
方式 · 行为 · 适合
expiry(默认) · 一次性积分包最先到期的账号先服务,无到期信息的排最后 · 怕积分过期作废
priority · 一直打同一个号,直到被限流或积分耗尽才换下一个 · 单号额度大,想尽快用完一个
round-robin · 连续请求依次轮过每个号,花费均摊 · 多个号额度差不多
balanced · 按权重抽取,冷清时也不会把第一个号抽干 · 想长期均匀消耗
sticky · 一个会话钉一个号,新会话换下一个 · 想保住上游 prompt 缓存
默认是 expiry 而不是 priority:priority 的第一个排序键是 atRisk,而 atRisk 由
expiryWarnDays(默认 3 天)现算——10 天后才到期的积分不算 atRisk,排序会退回「谁分多谁先」,
变成「积分多的号被优先抽干」。expiry 直接按最近到期时间升序,全时段都成立。
expiryWarnDays 只决定提醒窗口,不再决定排序。
排序键(rankAccounts)依次是:可服务 → 有额度正在流失 → 用户手动序 → 最先到期 → 流失额度大 →
积分多 → 凭据更晚到期 → 账号 id(保证全序)。
四、模型列表、倍率与促销徽标
- 模型列表来自上游实时目录,设置页可点「刷新模型」重拉,并显示每个模型的积分倍率。
undefined ≠ 0:国内版的 fallback 目录整份没有倍率字段。把未知当 0 会把收费模型显示成免费,
所以未知一律显示为「—」。
- 「需要显示的模型」默认全部显示;空选择 = 全选(不是全不选)。
- 模型选择器那一行会画上本次生效的促销徽标与倍率。徽标数据就躺在本插件已经在读的
/v3/config 里(modelPromotions / modelTiers),不额外发请求;且是按时钟现算的——
命名时区的墙钟窗口(如 Asia/Shanghai 23:00–7:50)与绝对窗口(validFrom / validUntil)
都在渲染那一刻判定,不会出现「22:59 读到的夜间折扣到次日 08:00 还自称夜间」。
- 该槽位是宿主的
kind: 'single'座位(一个单元格只有一个占用者),本插件用-0.25优先级插入,
避开宿主自带(0)、dsh-connect-qoder(-1)与 dsh-connect-workbuddy(-0.5);
遇到不属于自己的 provider 返回纯模型名,不把邻居的显示弄没。
五、输入框下方读数与账号切换
对话输入框下方(conversation.input.left 槽位,order: 4)显示:
- 当前 provider 对应的账号名;
- 该账号 / 整个池的剩余总积分;
- 点开可切换当前使用账号(按区域)。
读数只在选中的模型属于本插件时才出现——归属判定读宿主 modelSelection 投影的 next ?? lastUsed。
开关在设置页(showCreditsInComposer),默认开。
安装
方式一:npm 安装(推荐)
在目标 profile 目录(如 ~/.dsh/profiles/<profile>/package.json)中:
1. 在 dependencies 加入:
"dsh-connect-workbuddy-models": "^0.1.1"
2. 在同一文件的 dsh.profile.bundles 数组里加入包名(cordis.patch.yml 的 insert 就作用在这里):
"dsh.profile.bundles": ["...", "dsh-connect-workbuddy-models"]
3. 执行 pnpm install(或 npm install)。
4. 重启 DSH(Web GUI 默认 3080 端口)。设置页左侧导航会出现「workbuddy模型」。
方式二:从 GitHub 安装
"dsh-connect-workbuddy-models": "github:DragonHorizon-xtihc/dsh-connect-workbuddy-models"
仓库已提交构建产物 lib/,安装期不需要跑构建脚本(pnpm 高版本默认拦截安装期脚本,
这也正是产物入库的原因)。
方式三:从源码运行(开发态)
git clone https://github.com/DragonHorizon-xtihc/dsh-connect-workbuddy-models.git cd dsh-connect-workbuddy-models pnpm install pnpm build
然后在 profile 的 dependencies 里用 link: 指向本地目录:
"dsh-connect-workbuddy-models": "link:/absolute/path/to/dsh-connect-workbuddy-models"
验证
# 汇总状态:账号 / 积分 / 到期 / 签到 / 模型 / 配置 curl http://127.0.0.1:3080/plugins/dsh-connect-workbuddy-models/status # 重新扫描本机登录账号 curl -X POST http://127.0.0.1:3080/plugins/dsh-connect-workbuddy-models/accounts/refresh
配置项
设置页「workbuddy模型」的字段(持久化在设置命名空间 wbmodels):
字段 · 类型 · 默认 · 说明
enabled · boolean · true · 是否启用本 provider
distribution · 枚举 · expiry · 账户使用方式,见上表
enabledModelIds · string[] · [] · 需要显示的模型(国内版);空数组 = 全部显示
enabledModelIdsGlobal · string[] · [] · 同上,国际版
accountsEnabled · string[] · [] · 参与池的账号 id;空 = 全部发现的账号都参与
orderAccountIds · string[] · [] · 手动排序的账号 id,[0] 排最前
showCreditsInComposer · boolean · true · 输入框下方读数开关
expiryWarnDays · number · 3 · 临期提醒阈值(天),范围 1–90
automation.enabled · boolean · false · 自动签到总开关
automation.checkinHours · number[] · [9] · 北京时间整点执行
automation.claimBenefits · boolean · false · 是否顺带领取补偿 / 赠礼积分
accounts.cn / accounts.global · string · '' · 当前使用账号(按区域);空 = 交给 distribution 决定
自动签到的时间常量:AUTOMATION_TIME_ZONE = 'Asia/Shanghai'、AUTOMATION_TICK_MS = 60_000、
AUTOMATION_ACCOUNT_DELAY_MS = 800、DEFAULT_CHECKIN_HOURS = [9]。
HTTP 路由
全部挂在 /plugins/dsh-connect-workbuddy-models/ 下:
路径 · 方法 · 参数 · 用途
/status · GET · region · 汇总状态:账号 / 积分 / 到期 / 签到 / 模型 / 配置
/accounts/refresh · POST · — · 重新扫描本机登录账号
/account/credits · GET · accountId · 单账号积分明细
/checkin · POST · accountId(可省 = 全部) · 手动签到
/benefit/claim · POST · accountId、kind · 领取补偿 / 赠礼积分
/models/refresh · POST · — · 拉取实时模型目录与倍率
/models/save · POST · — · 保存需要显示的模型选择
/accounts/select · POST · accountId、region · 切换当前使用账号
/automation · GET / POST · — · 自动签到开关与时段
查询参数名常量集中在 src/status-paths.ts(WB_ACCOUNT_ID_PARAM / WB_KIND_PARAM /
WB_REGION_PARAM),路由处理函数与浏览器请求方共用同一份,改名单点生效。
兼容性与依赖
…(truncated)
Rendered from the README published on npm. Formatted only, not edited.
Versions
Published on npm::6,最后更新 2026-11-05