Skip to main content
A

dsh-expert-hub

aliboder/dsh-expert-hub

Expert center for DeepSeek Harness: browse and import WorkBuddy experts, create experts with AI, scope them globally or per project, edit role.md and skills, and switch experts per session. · DSH 专家中心:全局/项目专家、WorkBuddy 市场、AI 创建专家、详情即编辑、技能管理、按会话切换。

Install

dsh plugin --profile web add github:aliboder/dsh-expert-hub

README

DSH Expert Hub · 专家中心

把 WorkBuddy 专家、自建专家、网上导入的专家统一收进 DSH 的同一个专家库, 在设置页里像应用商店一样浏览、导入、编辑,在会话输入框旁一键切换。

这是 DeepSeek Harness(DSH)的社区插件, 不是 DeepSeek 官方产品。

npm GitHub

它解决什么

旧版 WorkBuddy 专家插件只能"只读扫描 → 逐个安装 → 再去输入框旁选择",看不到专家详情、 不能新建、不能编辑、不能从网上导入。Expert Hub 重新实现了整条链路:

能力说明
WorkBuddy 专家市场读取本机 WorkBuddy 已落盘的专家(.codebuddy-plugin/plugin.json + agents/*.md),展示头像、职业、分类、技能,一键导入/更新/全部导入
AI 创建专家用自然语言描述你要的专家,AI 先读《DSH 专家创作规范》,再生成 role.md 与必要的技能并写入专家库
AI 代为导入把专家链接、网页内容或一段介绍直接发给 AI,由 AI 读取并整理成专家条目后写入;不再需要填网址、找下载链接
对话内管理直接在会话里说“改一下某专家的提示词 / 加个技能 / 从目录导入技能 / 让我用某专家”,由 expert_manage 工具完成
详情即编辑卡片只有「详情」一个入口;打开后头像、名称、职业、role.md、技能在同一页面编辑,点「保存修改」生效
迁移专家详情页可把全局专家整体迁移到某个项目,或把项目专家迁回全局;也可在对话里让 agent 调用 expert_manage 的 migrate 完成
项目级 / 全局专家全局专家在 ~/.dsh/experts;项目专家在 <项目根>/.dsh/experts(随仓库走)。项目页顶部从 DSH 已登记工作区中选择,失效目录禁用;已安装页可按「全部 / 全局 / 项目」筛选,卡片带范围徽章;会话胶囊里也分组展示
技能管理技能卡片式列表,可新增/编辑/删除,也可从本机技能目录一键导入
删除与回收站卡片可直接删除(软删除到回收站);回收站可恢复或永久删除
会话内切换输入框旁的专家胶囊:头像 + 搜索 + 当前标记,按 2 列网格分组展示全局/项目专家,选中即挂载“角色提示词 + 全部 skills”;「不用专家」随时退出
选择可恢复选择按会话持久化,DSH 重启或会话恢复后自动重新挂载
实时刷新专家库或 WorkBuddy 来源变化时,打开的下拉/页面通过 SSE 自动更新

界面

专家中心(设置 → 专家中心)WorkBuddy 市场
已安装市场
专家档案(详情 + 编辑合并)会话输入框旁的专家胶囊
专家档案胶囊

安装

桌面端(推荐):侧栏 插件 → 添加插件,输入 npm 包名 dsh-expert-hub,安装后重启桌面 App。

终端:

dsh plugin --profile web add dsh-expert-hub

也可以从源码目录安装(开发调试):

dsh plugin --profile web add D:\SystemFiles\Documents\Project\DSH\plugins\dsh-expert-hub

安装后重启宿主(bundles 只在启动时读取),浏览器强刷。

使用

专家中心(设置 → 专家中心)

  • 已安装:专家卡片墙,支持搜索、分类筛选、排序;每张卡片可直接「详情」或「删除」(删除前二次确认, 删除是软删除,移入回收站)。详情与编辑合并成「专家档案」页:头像、名称、职业、role.md 和技能都在 一个页面里改,点「保存修改」生效;技能可增删改或从目录导入。
  • 回收站:列出软删除的专家,可「恢复」或「永久删除」(永久删除需二次确认,删除后不可恢复)。
  • WorkBuddy 市场:本机 WorkBuddy 里已"召唤"的专家。首次使用需在 WorkBuddy 专家中心 点击「召唤」,专家落盘到 ~/.workbuddy/plugins/marketplaces/experts/plugins 后这里就能看到。 支持单个导入、批量导入、发现源更新后的「更新」。
  • AI 添加:页面只保留「让 AI 帮我创建专家」一条路——描述需求,AI 按《DSH 专家创作规范》 生成 role.md 与必要的技能并写入;不再有手动填表或本机路径导入。

AI 创建专家(推荐)

在任意会话里直接用自然语言描述即可:

创建一个「周报助手」:帮我整理零散工作记录,输出 Markdown 周报表格,
语气简洁,再加一个“周报检查清单”技能。

AI 会先调用 expert_manage({action:'guide'}) 读取创作规范(身份 / 工作流程 / 输出格式 / 质量检查 / 边界;技能只在确有可复用流程时创建),再调用 expert_manage({action:'create'}) 写入;需要的话可以用 activate:true 立即在当前会话启用。

AI 代为导入(外部来源)

不需要再走"填网址 → 下载 → 解压 → 导入"的流程。在任意会话里直接把来源发给 AI 即可:

帮我导入这个专家:https://example.com/some-expert
把下面这段专家介绍整理成一位专家并导入:
(粘贴网页正文 / 专家说明 / SKILL.md 内容)

AI 的处理流程:

  1. 读取:网页正文用 web_fetch 读取;专家压缩包、本机目录、单个 .md 交给插件读取;
  2. 整理:归一成一位专家的完整条目——中文显示名、职业/称号、role.md 角色提示词(必要时附技能正文);
  3. 写入:调用 expert_import({expert:{…}}) 写入 ~/.dsh/experts/<id>/,并给出来源记录;
  4. 选用(可选):用户说"导入并直接用"时传 activate: true,立刻在当前会话启用。

来源里有多位专家时,AI 会先问你要导入哪几位,再逐个写入;已有的同名专家不会被覆盖,会自动改用 -2 后缀。

对话内管理专家

除了设置页,也可以直接让 agent 改专家:

列出专家库里有哪些专家
看看「电脑管家」的角色提示词
把「电脑管家」的职业改成“硬件工程师”,角色提示词里加上二手配件避坑
给「像素君」加一个技能:设计评审清单,内容是……
从 D:\skills\my-skill 导入技能到「像素君」
让我用「码小序」

对应模型工具 expert_manage,支持 list / get / create / update / add_skill / remove_skill / import_skill / use。 删除专家仍只在设置页操作,避免对话里误删。

需要用项目级专家时,让 AI 带 library="project",例如:

给这个项目建一个「本仓库代码评审」专家,用项目级
把当前项目的「接口约定」专家角色提示词补上错误码规范

项目根目录优先使用 DSH 工作区注册表里当前会话所属的 workspace;找不到时退回“最近的包含 .git 的祖先目录”, 再退回当前工作目录。项目专家存于 <项目根>/.dsh/experts;全局专家仍存于 ~/.dsh/experts。 项目页顶部可以从所有已登记工作区里切换查看,目录失效的工作区会禁用。

会话内切换

输入框左侧的专家胶囊会显示当前专家头像与名字(未选择时显示「专家」)。点开后:

  • 搜索已安装专家,点选即切换,当前专家带 ✓;
  • 「不用专家」移除当前会话的专家角色与 skills;
  • 切换不会打断正在进行的回复,在下一个模型请求前生效。

命令行同样可用:

/expert                列出专家库
/expert <id>           切换当前会话专家
/expert off            取消
/expert info <id>      查看专家详情

数据与格式

专家库固定在 ~/.dsh/experts/<id>/($DSH_HOME 优先):

<id>/
├─ expert.yml            # 元数据(schema 1,中文优先,含来源/分类/快捷提示词)
├─ role.md               # 角色提示词正文
├─ skills/<name>/SKILL.md# 0..N 个技能,资源文件随目录复制
├─ avatar.png            # 可选
└─ .expert-source.json   # 导入来源 + 内容指纹(仅导入的专家有)

兼容旧版 dsh-workbuddy-expert 导出的专家文件夹(expert.yml 只有 id/display_name/description/order 也能识别)。插件自己的会话选择记录与临时文件在 ~/.dsh/expert-hub/。

安全边界

  • 专家只贡献提示词与技能文本:scripts/、.mcp.json、agent.cordis.yml 等可执行内容一律不导入、不执行;
  • 导入的 Markdown 会做 CRLF/BOM 归一与 {{...}} 模板消毒,避免破坏宿主提示词插值;
  • 专家库写入全部限制在 ~/.dsh/experts 内,ID 只允许 [a-z0-9-],删除前校验目录归属;
  • HTTP 接口仅监听 loopback、只接受同源 POST、请求体有上限、响应 no-store;
  • 压缩包读取拒绝内网/回环地址,zip 解压防目录穿越,跳过符号链接与可执行位文件;
  • 删除专家是软删除:移到 ~/.dsh/expert-hub/trash/,误删可从该目录恢复;
  • AI 导入写入的专家同样是纯提示词与技能文本:模型只负责整理,来源里的"指令"不会被当作插件行为执行;导入不会自动启用,除非用户明确要求 activate。

配置

默认 WorkBuddy 来源目录写死在 bundle patch 里,需要改时编辑 cordis.patch.yml 的 config.sourcePath(支持 ~),重启宿主生效:

- id: expert-hub
  name: dsh-expert-hub
  config:
    sourcePath: ~/.workbuddy/plugins/marketplaces/experts/plugins

开发

npm test        # test/run.mjs:format / store / switch / importers / author / tools
npm run check   # node --check 两个入口
模块职责
index.js装配:paths / selections / switcher / routes / tools / 生命周期事件
src/workbuddy.jsWorkBuddy 源目录扫描(富元数据 → 专家草稿)
src/store.js专家库读写、指纹、卡片、详情、导入安装
src/compose.jsagent 作用域内挂载角色段 + skills
src/switch.js串行切换事务、回滚、选择恢复
src/selections.js会话选择 sidecar
src/importers.js压缩包 / 本机目录读取、zip/tar.gz 安全解压
src/tools.js模型工具 expert_import(AI 整理导入)+ expert_manage(对话内查看/修改专家与技能)
src/author.js新建 / 编辑(含 skills)/ 从目录导入技能 / 回收站恢复
src/routes.js/expert-hub/* 路由与 SSE
client.js设置页 + 会话胶囊(浏览器半)
docs/CONTRACT.mdHost/Client 接口契约

许可证

MIT

Related plugins