zhangzheng25
dsh-skills-manager
DeepSeek Harness plugin: skill management settings page. Browse/search agent skills, view SKILL.md details, and copy content/path directly from Settings → Skill Manager.
- Stars
- 0
- Language
- JavaScript
- Created
- Aug 16, 2026
- Updated
- Aug 16, 2026
Introduction
dsh-skills-manager
简体中文 | English
一个 DeepSeek Harness 插件:在 设置 → 技能管理 页面展示 DSH 当前可用的 agent skill 目录。它直接读取宿主 ctx.skills 注册表,并合并各 agent preset 作用域下的技能,不需要手动维护列表。

功能特性
- 🧭 技能目录 — 列出当前环境合并后的全部技能:名称、描述、来源(项目
.dsh/ 项目.agents/ 自定义 / 用户.dsh/ 用户.agents/ 内置 / 运行时)、提供方、模型/用户调用策略,以及该技能出现在哪些 preset 作用域。 - 🔍 搜索与过滤 — 按名称 / 描述 / 适用场景实时搜索;支持「全部 / 模型可用 / 用户可用」筛选。
- 📄 详情查看 — 点击技能后,详情面板直接在对应技能卡片下方展开:
whenToUse、文件路径、资源目录、metadata、完整的SKILL.md正文。 - 📋 复制 — 一键复制技能正文或本地路径,方便手工维护或分享。
- 🔄 自动刷新 — 页面每 30 秒轮询一次,另有手动「刷新」按钮;当技能来源发现不完整时会显示提示。
- 🎨 DSH 原生风格 — 亮色/暗色主题自适应,使用
--dsw-alias-*主题变量;扁平卡片、1px 细边框、8–10px 圆角、无阴影。
说明:当前版本是只读管理界面。DSH 的 skill 注册表由各提供方(主要是
dsh-skill-filesystem)拥有,注册表本身不提供删除/禁用已有技能的能力;因此本插件聚焦于浏览、检索、查看正文和定位文件。
安装
从 GitHub 安装:
dsh plugin --profile web add github:zhangzheng25/dsh-skills-manager
或从本地目录安装:
dsh plugin --profile web add E:\path\to\dsh-skills-manager
dsh plugin 会在 profile 目录中转发给 pnpm 安装,并自动调和 dsh.profile.bundles;包内 dsh.bundle.patch(cordis.patch.yml)把插件行插入宿主组合,dsh.client.platform: "web" 让 web 外壳加载 client/bundle.js。
安装后重启 DSH,打开 设置 → 技能管理 即可看到页面。
架构
┌────────────────────────── Host(Node.js)──────────────────────────┐
│ src/index.js │
│ • ctx.get('skills') ← 读取 DSH skill 注册表 │
│ • skills.snapshot({ cwd }) ← 读取全局层技能 │
│ • skills.snapshot({ cwd, scope }) ← 逐个 agent preset 读取并合并 │
│ (cwd 传 process.cwd(),让 filesystem 提供方扫描项目根; │
│ 用户/自定义/内置根始终会被扫描) │
│ • skills.get(name, { cwd, scope })← 按需加载完整 SKILL.md 正文 │
│ • webServer.register('/skills-manager/snapshot') │
│ • webServer.register('/skills-manager/skill?name=…') │
└─────────────────────────────────────────────────────────────────────┘
│ fetch('/skills-manager/snapshot')
│ fetch('/skills-manager/skill?name=…')
▼
┌────────────────────────── Client(浏览器)─────────────────────────┐
│ client/bundle.js — 手工构建的 web bundle,符合 client-modules 协议 │
│ (window.__ModuleLoader__.load) │
│ • slots.inject('settings.section') → 设置页「技能管理」 │
│ • 指标卡 + 搜索 + 过滤 + 技能列表 + 卡片内联详情面板 │
│ • 30 秒轮询、手动刷新、复制正文/路径 │
└─────────────────────────────────────────────────────────────────────┘
数据来源
- 技能目录:
ctx.skills.snapshot({ cwd })返回全局层SkillSummary[]与complete标志;随后对每个可用 agent preset 调用ctx.skills.snapshot({ cwd, scope }),按技能名合并去重。 - 技能详情:
ctx.skills.get(name, { cwd })优先查全局层,查不到再按 preset 作用域逐个查找,返回SkillDefinition(含content/path/metadata/resourceBase)。 - 项目范围:
cwd取宿主进程的process.cwd();dsh-skill-filesystem会据此查找最近的.git祖先并扫描<projectRoot>/.dsh/skills与<projectRoot>/.agents/skills,同时始终扫描用户/自定义/内置根。 - Preset 作用域:通过
ctx.agentPresets.standingKeyFor(preset.id)获取每个 preset 的 standing scope key,再以该 scope 读取技能目录,因此 web profile 中由 agent preset 挂载的skill-filesystem也能被看到。
已知限制
- 只读:不能通过本插件启用/禁用/编辑已有技能,只能查看和复制。
- 设置页导航图标:当前 DSH 的
settings.section注册项只支持id/order/label,设置页左侧导航图标由dsh-client-ui-settings-general硬编码;非内置 id 统一显示齿轮图标。已调研conversation.view主界面 tab 方案,但当前版本选择只保留设置页入口,等待官方后续开放图标配置或更合适的扩展点。
开发
npm run check # node --check 两个文件(语法检查,无测试)
Client bundle 为手工编写以匹配 client-modules bundle 协议,无需构建步骤。