Back to home

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.patchcordis.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 协议,无需构建步骤。

许可

MIT