dsh-agent-llm
把本机已登录的 WorkBuddy、WorkBuddy AI、Hermes Agent 三个 Agent 的大模型接入
DeepSeek Harness(DSH)的模型库。装好后在会话框右下角的模型选择器里即可直接选用,
无需在 DSH 里重新登录任何账号。
- 三个 Agent 各是一个独立的 DSH provider,出现在模型选择器中。
- 模型名称、积分倍率(
倍率 ×3.47)、免费标记、上下文长度、输出上限、推理档位、能力标签
均来自对应 Agent 自己的产品配置,与 Agent 内显示的信息一致。
- 请求走 Agent 官方网关/推理接口,消耗的是对应 Agent 账号的积分/额度,免费模型照常免费。
- 只读取本机登录态,不复制账号、不写死 token、不上传任何凭据。
- 不依赖任何
@deepseek-ai/* 包,只使用 DSH 公开的 ctx.llm.registerAdapter() 接缝;
DSH 升级后仍可用(前提是该公开接缝不变)。
安装
通过 SkillHub 插件市场
在插件广场 / 对话内插件搜索里搜 dsh-agent-llm;若未命中,可按 owner MnemosyneOS 或分类「模型推理」浏览。也可直接指定:
- owner:
MnemosyneOS
- name:
dsh-agent-llm
通过 DSH 内置插件市场
DSH 内置插件市场不自动抓取 GitHub,需先把本仓库的 market-index.json URL 加入「插件市场 → 索引源」设置,之后才能在 Discover 里检索到。
直接安装 GitHub 仓库
dsh plugin --profile web add github:MnemosyneOS/dsh-agent-llm#<commit-sha>
<commit-sha> 用仓库 Release/Tag 对应的完整 40 位 commit。
安装完成后刷新一次 DSH Web 页面,浏览器才会加载新的 Client 模块(模型标签徽标)。
前置条件
插件本身不会替你登录 Agent,只复用它们已经保存的本地会话:
- 本机安装并登录过 WorkBuddy AI 或 WorkBuddy 桌面端(至少一个)。
- 或者本机安装并登录过 Hermes Agent(Nous 账号)。
- Windows 10/11,DSH 与 Agent 使用同一个 Windows 用户。
三个 Agent 都没有登录时插件会保持空闲,不会报错,也不会影响 DSH 启动。
自动发现
插件按以下顺序自动定位 Agent,无需手工配置路径:
| 目标 | 探测顺序 |
|---|
| WorkBuddy AI 数据根 | WORKBUDDY_AI_HOME → 用户主目录下的 .workbuddy-ai |
| WorkBuddy 数据根 | WORKBUDDY_HOME → 用户主目录下的 .workbuddy |
| WorkBuddy 可执行文件 | DSH_AGENT_LLM_WORKBUDDY_AI_EXE / DSH_AGENT_LLM_WORKBUDDY_EXE → Windows 卸载表 InstallLocation → 常见安装目录 → 用户目录与盘符下的浅层目录扫描 |
| Hermes 数据根 | HERMES_HOME → 用户主目录下的 .hermes / HermesAgent/home → 常见安装目录 → 用户目录与盘符下的浅层目录扫描(以存在 auth.json 或 config.yaml 为准) |
浅层扫描只在前面几项都失败时触发,深度上限 3 层、只看目录名,不读取文件内容。
装在非标准位置时,用下面的 config 显式指定即可。
使用
- 确保对应 Agent 已登录。
- 刷新 DSH 页面。
- 点开会话框右下角的模型选择器,选择
WorkBuddy AI、WorkBuddy 或 Hermes Agent 分组。
- 倍率直接显示在模型名里:
Fast · 倍率 ×0.34。
- 免费模型显示
免费 徽标。
- 悬停模型名可看到完整信息(上下文、输出上限、能力、Agent 原始描述)。
- 发送消息,请求按当前选择路由到对应 Agent,积分从该账号扣除。
数据来源与显示规则
| Agent | 模型清单来源 | 积分/倍率来源 |
|---|
| WorkBuddy AI | 数据根下的 cache/acc-product-config-v3.json | 同文件 models[].credits + modelPromotions(按 Asia/Shanghai 日期与每日时段计算生效折扣) |
| WorkBuddy | 数据根下的 cache/acc-product-config-v3.json | 同上 |
| Hermes Agent | 数据根下的 cache/nous_recommended_cache.json + context_length_cache.yaml(在线时用 Nous /v1/models 校正) | Nous 免费层::free 模型为 免费;付费层显示付费模型 |
WorkBuddy 的登录态在 Agent 公共数据目录的 auth 子目录下(workbuddy-desktop-ai.info /
workbuddy-desktop.info),token 字段是 AES-256-GCM 密文;插件调用已安装的
WorkBuddyAI.exe(ELECTRON_RUN_AS_NODE=1,无窗口、只读)取得 at-rest 密钥后在本进程内解密,
不落盘、不打印。
Hermes 的登录态在 $HERMES_HOME\auth.json(providers.nous)。Nous access token 约 1 小时过期:
Hermes 网关运行中由 Hermes 自己续期;网关未运行时插件用同一刷新接口续期,并把轮换后的 token
原子写回 auth.json,保证 Hermes 之后仍可正常使用。
配置
通过 cordis.patch.yml 的 row config 覆盖(全部可选):
- insert:
- id: dsh-agent-llm
name: dsh-agent-llm
config:
workbuddyAi:
enabled: true
# 路径请用本机实际安装位置,或用下方环境变量代替
home: '/path/to/.workbuddy-ai'
exe: '/path/to/WorkBuddyAI.exe'
authFile: '/path/to/workbuddy-desktop-ai.info'
appVersion: '5.8.4'
workbuddy:
enabled: true
home: '/path/to/.workbuddy'
exe: '/path/to/WorkBuddy.exe'
hermes:
enabled: true
home: '/path/to/HermesAgent/home'
allowRefresh: true # false = 不自动续期,仅使用未过期的 Nous token
环境变量覆盖:HERMES_HOME、WORKBUDDY_AI_HOME、WORKBUDDY_HOME、
DSH_AGENT_LLM_WORKBUDDY_AI_EXE、DSH_AGENT_LLM_WORKBUDDY_EXE。
升级稳定性
- 只使用 Node 内置模块 +
ctx.llm.registerAdapter() 公开接缝,无 DSH 内部 import。
- 插件包安装在 DSH profile(
~/.dsh/profiles/<profile>)里,DSH 本体升级不会删除它。
- WorkBuddy 模型清单读取 Agent 自己维护的缓存文件,Agent 更新模型后无需改插件。
- Hermes 读取
auth.json / cache/* 并调用稳定的 Nous 推理接口;不 import Hermes Python 模块。
- Client 端只覆盖
conversation.input.model.label 槽位(优先级 -1);若未来槽位 API 变化,
最坏情况是标签退化为模型名,请求与模型选择本身不受影响。
图片输入
- 图片会转发:对模型清单声明
supportsImages: true 的 WorkBuddy / WorkBuddy AI 模型,插件把 Harness 的持久化图片读取为标准 data:image/*;base64,... 的 OpenAI image_url 内容块后转发;Hermes 清单中的模型同样按其路由能力发送。
- 若模型清单未声明图像能力,Harness 会在发送前拒绝图片并提示“当前模型不支持图片”。请切换到模型选择器中明确标注“图像输入”的模型;不要仅依据 Agent 本地缓存中的同名模型判断 DSH 路由能力。
- 插件不会把图片静默降级为占位文本:附件服务缺失、图片读取失败或网关返回错误会作为请求错误暴露,便于排查。
- WorkBuddy 旧版 token 有效期较短(约 30 天,刷新后约 60 天)。过期后打开一次 WorkBuddy
桌面端即可自动续期;插件有意不调用 token 刷新接口,避免轮换导致桌面端掉线。
- 旧版 WorkBuddy 渠道校验兼容:其网关会拦截系统提示中重复出现的完整品牌词
DeepSeek Harness(HTTP 400 / code 11128)。旧版 provider 在发送前把该品牌词规范化为官方缩写
DSH(同一段系统提示中已定义该缩写,语义不变);WorkBuddy AI 与 Hermes 不受影响,仍原样发送。
- Hermes 免费层只能选免费模型:Nous 账号为免费层时,付费模型在 Agent 中也同样不可选,
因此插件只列出可用的
:free 模型。
- Hermes 自动续期在“网关未运行”时才写回 token;若网关运行中 token 未刷新,请求会提示稍后重试。
安全与隐私
- 插件复用本机已登录会话,属于非官方集成;请遵守各 Agent 的服务条款,风险自负。
- token 只在 Host 进程内存中使用;日志只记录模型名、路由与消耗数值,不记录 token。
- WorkBuddy 密钥读取方式(
ELECTRON_RUN_AS_NODE 调用官方二进制内置 binding)不修改任何 Agent
文件,但可能被杀软/EDR 关注;企业环境可将对应 provider 设为 enabled: false。
- Hermes
auth.json 仅在自动续期路径写入,且为原子替换;不希望插件改动该文件时设置
hermes.allowRefresh: false。
- 插件不发起任何遥测,也不向 MnemosyneOS 或第三方上传数据。
诊断
cd <插件目录>
node tests/live-smoke.mjs # 只读:列出三个 provider 的模型与免费状态
node tests/live-smoke.mjs --live # 用免费模型各发一次带工具调用的请求(消耗 0 积分)
node tests/dsh-e2e.mjs # 经 DSH 本体做端到端验证(需要运行中的 dsh web)
目录
dsh-agent-llm/
index.js Host 入口:注册 provider
client.js 模型标签扩展(倍率/免费徽标)
lib/adapter.js DSH LlmAdapter 兼容层(零依赖)
lib/discovery.js Agent 安装位置自动发现
lib/wire.js 消息/工具/SSE 公共转换
lib/workbuddy-*.js WorkBuddy 目录、登录态、流式连接
lib/hermes-*.js Hermes 目录、Nous 登录态与续期、流式连接
cordis.patch.yml Bundle patch
locale/{en,zh}.json 插件市场显示标题/描述
icon.svg 插件图标
License
MIT