dsh-workbuddy-provider
中文 · English
把 WorkBuddy 桌面 App(国内版与国际版)的模型接进 DeepSeek Harness 的插件。它复用 App 自己的登录态,不需要单独的密钥或二次登录。
这是什么
模型选择器里多出两个分组:WorkBuddy CN(国内版)与 WorkBuddy AI(国际版),登录了哪个就有哪一组,两个都登录则两组并存。每组列出该网关的模型目录、账户剩余积分,以及每个模型的倍率与促销活动。两个 App 的账号、积分与模型互不相通。文本、图片与工具调用都走 App 自己的通道;流式与取消直达上游,中断回复即中断计费。
模型目录取自编程客户端,不是 App 内部智能体看到的那一份:目录请求携带桌面 User-Agent 与内置 CLI 版本号,网关据此返回编程用的模型名单。插件用 App 自带的 Electron 二进制读取 App 加密的登录文件,并把副本存到 $DSH_HOME/dsh-workbuddy-provider/,App 关掉后请求仍能继续。
本插件的详情页里只有一张卡片,两个 App 共用:顶部两个页签切换 WorkBuddy CN 与 WorkBuddy AI,下面是登录状态与积分摘要,再往下是「模型」与「余额」两个页签。会话使用本插件的模型时,输入框旁显示一枚积分徽章。

安装
需要已安装并登录的 WorkBuddy 桌面 App:国内版对应 WorkBuddy CN 分组,国际版(WorkBuddy AI)对应 WorkBuddy AI 分组,装一个或两个都行。仅支持 macOS。
dsh plugin --profile web add dsh-workbuddy-provider
dsh web
从源码检出安装时,把工作区目录本身装进 profile 即可;plugin_manager 会把它链接进去。
运行与使用
安装后 dsh web 启动 Harness,启动输出会打印带 token 的页面地址。之后的操作都在页面里,不用再碰命令行:
- 选模型:模型选择器里挑 WorkBuddy 分组下的模型,像内置模型一样发起对话。
- 管理模型:在插件页打开本插件的卡片,选顶部的 WorkBuddy CN 或 WorkBuddy AI 页签。「模型」页签列出该 App 目录里的全部模型,开关决定哪些出现在选择器里,按账号保存。
- 看余额:「余额」页签显示该 App 可用余额与构成,只在打开时查询;打开卡片会分别读取两个 App 的余额。
- 登录态变化:桌面 App 里登录、登出或切换账号后,插件在一个轮询周期内(默认 30 秒)自动跟随,无需重启。
- 排除故障:App 未安装、登录文件读不出时,卡片给出原因和一个可复制的 Agent 修复提示词;目录拉取失败时,选择器退回上次保存的目录,卡片标明来源。
进阶:状态文档与写路由挂在 Harness 源上,路径如 /plugins/dsh-workbuddy-provider/cn/status(国际版为 /ai/)。状态文档可直接 curl 查看;写路由(刷新目录、设置模型显隐)要求随状态文档下发的进程内密钥,没有密钥的请求一律拒绝。环回绑定是网络边界,不是授权。
适配器通过绑定在 127.0.0.1 的环回 shim 通信,由环回 Host 与 Origin 校验加进程内 bearer 保护。bearer 不转发到上游:上游请求带的是凭据存储里的真实凭据,拿到 bearer 也换不到它。
配置
路径解析优先级
按下面的顺序取第一个给出该路径的来源:
- 配置:profile 的
cordis.yml中dsh-workbuddy-provider.variants.<App>.authFile/electronBinary - 环境变量:
WORKBUDDY_CN_AUTH_FILE/WORKBUDDY_AI_AUTH_FILE、WORKBUDDY_CN_ELECTRON_BIN/WORKBUDDY_AI_ELECTRON_BIN - 默认路径:各 App 在 macOS 上的安装位置(见下表)
配置或环境变量显式指定的路径不可用时报错,不会静默回退到默认值:点名要用某个文件,悄悄换成另一个会掩盖问题。默认路径不存在不算错误,只报告「未安装」。点名过的路径在卡片状态区标出来源;全走默认时不显示。
路径默认值
| 项目 | 国内版 workbuddy-cn | 国际版 workbuddy-global |
|---|---|---|
桌面登录文件 authFile | ~/Library/Application Support/CodeBuddyExtension/Data/Public/auth/workbuddy-desktop.info | 同目录 / workbuddy-desktop-ai.info |
Electron 二进制 electronBinary | /Applications/WorkBuddy.app/Contents/MacOS/Electron | /Applications/WorkBuddy AI.app/Contents/MacOS/Electron |
| 环境变量(登录文件) | WORKBUDDY_CN_AUTH_FILE | WORKBUDDY_AI_AUTH_FILE |
| 环境变量(Electron) | WORKBUDDY_CN_ELECTRON_BIN | WORKBUDDY_AI_ELECTRON_BIN |
两个 App 把登录文件写进同一个 CodeBuddyExtension 目录,只靠文件名区分。插件只读这个文件,从不写入。Electron 二进制按 bundle id 校验(com.tencent.workbuddy.mac / com.workbuddy.workbuddy-ai),路径上换成别的 App 会直接报错。
插件还从 App 包读两项不来自配置的信息,同样按 App 区分:Contents/Info.plist 里的 App 版本(写进模型目录与对话请求的 User-Agent),以及 Contents/Resources/app.asar.unpacked/cli/package.json 里内置 CLI 的版本。
配置文件
dsh-workbuddy-provider:
# 重新读取桌面登录态的频率,毫秒。默认 30000。
credentialPollMs: 30000
# 按 App 覆盖路径;整个 variants 段可省略,省略即全部走默认路径。
variants:
workbuddy-cn:
authFile: /path/to/workbuddy-desktop.info
electronBinary: /path/to/WorkBuddy.app/Contents/MacOS/Electron
workbuddy-global:
authFile: /path/to/workbuddy-desktop-ai.info
electronBinary: /path/to/WorkBuddy AI.app/Contents/MacOS/Electron
只覆盖一条时,另一条仍走默认值。variants 下的键就是模型选择器里的 provider id:国内版 workbuddy-cn,国际版 workbuddy-global。
插件状态文件
插件自己写的文件全部在 $DSH_HOME/dsh-workbuddy-provider/ 一个目录里,每个 App 一套:
| 文件 | 作用 |
|---|---|
.workbuddy-cn-auth.json / .workbuddy-ai-auth.json | 凭据副本:token 刷新成功后写入,App 关闭时作为回退 |
.workbuddy-cn-catalog.json / .workbuddy-ai-catalog.json | 按账号保存的模型目录,拉取失败时的退路 |
.workbuddy-cn-model-visibility.json / .workbuddy-ai-model-visibility.json | 每账号的模型显隐偏好 |
$DSH_HOME 默认为 ~/.dsh,可用同名环境变量覆盖。启动时会把留在 $DSH_HOME 根下的文件移进这个目录,显隐偏好与目录缓存因此不丢。这些文件都能直接删,只丢缓存和偏好,下次启动重新生成。
DSH 版本兼容
本插件支持内核窗口 >=0.2.1-rc.1 <=0.2.1-rc.5 || >=0.2.2-alpha.2 <=0.2.2-alpha.3,也就是 0.2.1 的 rc.1 到 rc.5,加上 0.2.2 的 alpha.2 到 alpha.3,以 engines.dsh 声明为准。loader 只校验这一条,跳过 peer 范围检查;内核超出窗口时启动直接失败,不降级。这两条线互不同源,已知差异(路由注册形式、剪贴板 hook、模型角标透传)与不做版本探测的原则,见 docs/adr/0002-kernel-version-window.md。
已知限制
- 仅 macOS:App 发现、Electron 定位与登录文件默认路径都按 macOS 实现;Windows 未实现。
- 跟随桌面 App 登录:凭据完全来自 App 自己的登录态,没有独立的密钥可用;App 未登录时对应分组不可用。
- 积分徽标依赖内核:模型的限免/折扣角标在 0.2.2 alpha 内核上显示,0.2.1 rc 内核静默不显示(见兼容 ADR)。
- 目录短于 App 内:按价格档位排除的条目会在卡片标注「已隐藏 n 个档位」,目录以编程客户端名单为准,与 App 内智能体的名单可能不同。
许可证
MIT © 2026 zerolu
本地开发
pnpm install
pnpm run check # lint、typecheck、覆盖率阈值、构建与 tarball 校验,改动后提交前必须全绿
pnpm run build
pnpm run watch # 监视构建,喂给本地 dsh web server 调试
pnpm exec vitest run tests/host/<name>.spec.ts # 跑单个测试文件
发布走 npm trusted publishing:改好版本号并提交后 pnpm run tag 生成带注释的标签,推送标签触发工作流校验并发布;细节见 .github/workflows/release.yml。
架构与背后的决策见 AGENTS.md、GLOSSARY.md 与 决策记录。