DSH Plugins Marketplace

DSH Plugins

Plugins

/

Models & Providers

/

dsh-connect-workbuddy-models

D

dsh-connect-workbuddy-models

Manifest valid

把本机所有 WorkBuddy 登录账号聚合成一个模型池:账号自动发现、签到、积分与到期、临期提醒、自动签到、模型与倍率,并可在输入框下方切换账号与查看剩余总积分。

UI (client)hasBundlePatch

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):

字段类型默认说明
enabledbooleantrue是否启用本 provider
distribution枚举expiry账户使用方式,见上表
enabledModelIdsstring[][]需要显示的模型(国内版);空数组 = 全部显示
enabledModelIdsGlobalstring[][]同上,国际版
accountsEnabledstring[][]参与池的账号 id;空 = 全部发现的账号都参与
orderAccountIdsstring[][]手动排序的账号 id,[0] 排最前
showCreditsInComposerbooleantrue输入框下方读数开关
expiryWarnDaysnumber3临期提醒阈值(天),范围 1–90
automation.enabledbooleanfalse自动签到总开关
automation.checkinHoursnumber[][9]北京时间整点执行
automation.claimBenefitsbooleanfalse是否顺带领取补偿 / 赠礼积分
accounts.cn / accounts.globalstring''当前使用账号(按区域);空 = 交给 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/ 下:

路径方法参数用途
/statusGETregion汇总状态:账号 / 积分 / 到期 / 签到 / 模型 / 配置
/accounts/refreshPOST—重新扫描本机登录账号
/account/creditsGETaccountId单账号积分明细
/checkinPOSTaccountId(可省 = 全部)手动签到
/benefit/claimPOSTaccountId、kind领取补偿 / 赠礼积分
/models/refreshPOST—拉取实时模型目录与倍率
/models/savePOST—保存需要显示的模型选择
/accounts/selectPOSTaccountId、region切换当前使用账号
/automationGET / POST—自动签到开关与时段

查询参数名常量集中在 src/status-paths.ts(WB_ACCOUNT_ID_PARAM / WB_KIND_PARAM / WB_REGION_PARAM),路由处理函数与浏览器请求方共用同一份,改名单点生效。


兼容性与依赖

项要求
Node.js^22.19.0 或 >=24.0.0
DSH0.2.0-rc.1 线(peer:@deepseek-ai/dsh-llm、dsh-llm-pi-ai、dsh-host-webserver、dsh-settings、dsh-client-ui-* 等)
React^18.2.0(由宿主 shell 提供,不随包分发)
操作系统Windows / macOS / Linux(账号发现三平台均可;Windows 另有桌面端静态加密凭据的解封支持)

所有 @deepseek-ai/* 依赖都是 peer,装的是 DSH 安装里的那一份——自带副本会出现「两份 cordis / 两份 llm 服务」。


开发

pnpm typecheck   # tsc -p tsconfig.json --noEmit && tsc -p tsconfig.client.json --noEmit
pnpm test        # vitest run
pnpm build       # tsdown → lib/index.js + lib/index.d.ts + lib/client.js

目录

src/status-paths.ts   共享契约:路由、查询参数、投影类型、unwrapVolatile(Deep)、rankAccounts
src/version.ts        构建期注入的版本常量
src/upstream.ts       上游 HTTP 客户端:目录 / 积分 / 签到 / benefits / token 刷新
src/accounts.ts       账号发现(桌面端 auth 目录 + DSH vault 双源)、凭据解封、排序
src/at-rest.ts        桌面端静态加密凭据的解封(at-rest 密钥派生 + AES-256-GCM)
src/catalog.ts        模型目录(静态 fallback + 实时刷新 + 用户选择过滤)
src/adapter.ts        pi-ai 适配器(provider 注册 + 转发到 shim)
src/shim.ts           与 pi-ai 的桥接层
src/scheduler.ts      自动签到与积分任务(北京时间自然日幂等)
src/web-status.ts     web 路由处理函数
src/index.ts          宿主入口:settings、provider 注册、web 路由、scheduler 启停
src/client/           浏览器半区(设置页 + 输入框读数 + 模型标签)
tests/                单元与集成测试

src/status-paths.ts 只放常量与纯函数,不 import 任何 @deepseek-ai/* 包:它会被打进浏览器 bundle,一旦引入宿主侧依赖,客户端半区就在加载期失败。

两个必须记住的坑

  1. 装配给设置的配置必须 unwrapVolatileDeep。schemastery 的 volatile 字段解析出来是活引用 { get(): T },typeof === 'object' 所以不会被当成异常。直接交给 settings 服务时,服务会 structuredClone 整份对象做校验,活引用过不去 → 命名空间注册不上 → 设置页卡片静默消失 (无异常、无横幅)。浏览器侧 { ...reference } 展开成 { get: <function> },会丢掉所有兄弟字段。
  2. 客户端 bundle 必须把 react-dom 外部化。react-dom 由宿主 shell 的模块加载器 (staticModules)注册;打进 bundle 会内联它的 CJS 构建,开头是 if (process.env.NODE_ENV !== "production") …,浏览器里没有 process,于是在模块求值阶段抛 ReferenceError: process is not defined,整个客户端半区加载失败: web boot: 1 entry did not activate。详见 tsdown.config.ts 的注释。

设计取舍(已知限制)

  • 纯月包账号(没有一次性积分包的到期信息)在 expiry 方式下会沉到有到期信息的账号之后。 这是刻意的——月包会刷新,不存在「快要流失」的额度。设置页会用排序原因把这一点解释出来。
  • 上游的促销徽标只有应用通道(PRODUCT_UA)才看得见;用 CLI 通道的身份读同一份 /v3/config 回来的是严格子集,既没有 modelPromotions 也没有 modelTiers。
  • 凭据来源只读:插件从不写回桌面端的 .info 登录文件,也不索要密码。上游 401 触发的 token 刷新 结果单独写在 $DSH_HOME/<plugin-id>/credential-refresh.json(文件 0600、目录 0700,里面是 bearer token,属于本机私有数据);自动化账本 automation-ledger.json 同目录,只存「今天哪个时段 跑过」,不含任何凭据。

License

MIT。见 LICENSE。

Comments

Loading…

Similar plugins

dsh-workbuddy-xdpool

by 2861292267

Merge every locally signed-in WorkBuddy account into DeepSeek Harness as one auto-failing-over model pool (multi-account rotation, live credits, daily check-in and model catalog).

UI & ExperienceTerminal & ClientsModels & ProvidersManifest valid

★ 22

↓ 624/wk

MIT

JavaScript

Oct 19, 2026

dsh plugin --profile web add dsh-workbuddy-xdpool

by XDTrees

把你能白嫖的模型额度接进 DSH 同一个池:WorkBuddy 多账号自动容错、十三家扫码登录、76 家免费额度聚合、用量看板、模型路由、本地 OpenAI 网关、积分自动化。

Models & ProvidersManifest valid

★ 368

↓ 1.6k/wk

MIT

TypeScript

Oct 31, 2026

dsh plugin --profile web add dsh-xdpool

by chengshenyangtai

把 WorkBuddy(多账号/企业版)、Trae CN / TRAE SOLO CN、Qoder CN 三家订阅聚合进同一个 DSH 模型选择器:会话内换模型不丢历史、积分倍率、逐模型思考档位、每日自动签到、读图与 Agent 工具调用。One DSH plugin aggregating WorkBuddy / Trae / Qoder subscriptions into one model

Workflow & AutomationTerminal & ClientsModels & ProvidersManifest valid

★ 52

MIT

JavaScript

Oct 21, 2026

dsh plugin --profile web add dsh-workbuddy-trae-qoder-connect

by XDTrees

将 WorkBuddy 桌面 App 里登录过的所有账号自动并入一个 DeepSeek Harness 模型池:无需任何手动配置,你在 WorkBuddy 桌面登录的每个账号都会成为一个池成员;某个账号被限流(429)时,请求会自动切换到下一个可用账号,实现多账号自动容错轮换。

Models & ProvidersManifest valid

★ 72

↓ 1.3k/wk

MIT

TypeScript

Oct 15, 2026

dsh plugin --profile web add dsh-workbuddy-xdpool

by 2424830124

将workbuddy后端接入dsh,让你在dsh中使用workbuddy的模型(消耗workbuddy的积分)

Security & AuditManifest valid

★ 4

MIT

JavaScript

Oct 28, 2026

dsh plugin --profile web add @huai_xin/dsh-workbuddy

by ChaYeWuu

一个 DeepSeek Harness 插件:在 DSH 设置里直接管理 WorkBuddy 多账号,并把模型接进 DSH 与任意 OpenAI 兼容客户端。

Terminal & ClientsModels & ProvidersManifest valid

★ 8

MIT

TypeScript

Oct 31, 2026

dsh plugin --profile web add dsh-hyperworkbuddy