@morehao/dsh-skills-console
Lists the skills in the shared skills directory with their source and version, installs and updates them from a GitHub repo, removes them to a recycle bin kept for 7 days, and controls which agents can see each skill and whether the model may invoke it.
Install
dsh plugin --profile web add @morehao/dsh-skills-console
Sandbox test results
| Stage | Result |
|---|---|
| 1 install | ✓ |
| 2 list | ✓ |
| 3 mount | ✓ |
| 4 boot | — |
Four stages run in an isolated sandbox: install (network on) → list → mount → boot (last three with no network).
README
<p align="center"><img src="icon.svg" width="64" height="64" alt="技能控制台图标" /></p>
技能控制台 · dsh-skills-console
简体中文 · [English](README.en.md)
  
DSH(DeepSeek Harness)的技能控制台:安装、更新、删除、启停、共享至其他 Agent,外加一份订阅清单。
它把本机技能收进一张清单:有哪些、从哪来、谁能用、是不是最新。要用的打开,不用的关掉;别的 Agent 需要,一键建链过去——技能本体始终只有一份。
为什么需要它
- 一个地方管所有技能:装好的和本机已有的技能都在同一张清单里,来源、版本、共享至哪些 Agent、更新时间一眼看清,不用去翻目录。
- 按需启停,省上下文:暂时用不上的技能一键停用,DSH 的模型调用与
/手动调用立刻看不到它,再打开就恢复;磁盘上的技能、共享关系、其他 Agent 都不受影响。 - 一份技能,多个 Agent:多数 Agent(OpenCode、Cursor、Gemini CLI 等)直接读共享技能目录,装好即用;只认自己目录的(如 Claude Code)在面板里勾一下就能建链过去。
- 装完不是结束:上游仓库一直在动,控制台会检查新提交,先告诉你「会影响哪些技能」,再由你决定更不更新。
- 删错还能救:删除先进回收站保留 7 天;更新失败自动回滚上一版。
功能
能力 · 说明
清单 · 汇总本机技能,来源、版本、可见状态、共享至哪些 Agent 一处看全;共享目录里已有的技能第一次打开就自动纳入管理
安装 · 填 owner/repo 或 GitHub URL,先检测仓库里有哪些技能、各自做什么;可以全装,也可以只挑几个
更新 · 检查上游新提交,列出 commit 区间和受影响的技能,确认后一键更新;本地改过的技能会先要求确认
删除 · 删除前体检(不碰别人建的东西),再快照进回收站(保留 7 天)
启停 · 一键开关;停用后 DSH 的模型调用与 / 手动调用都看不到它,其他 Agent 与磁盘文件不受影响
共享 · 只给「只读自己目录」的 Agent 建链,默认不共享;直接读共享目录的 Agent 不出现在列表里
查看 · 只读打开技能正文与文件:渲染 / 原文切换、目录树、单文件预览,外加来源、哈希与共享信息
技能简介 · 列表每行一个 ✨,点开就能看到模型写的「这个技能能做什么、什么时候用」;只发 SKILL.md 与文件名清单,结果缓存在本地,内容没变不重复调用
订阅 · 关注 owner/repo 的上游变化,只记快照、不下载技能;展开条目能看到作者原描述,也可以让模型写一段 AI 简介再决定装不装;ref / 子目录可选,不填 ref 时跟随默认分支
作用范围 · 管 user 级共享技能;暂不支持按项目启停。项目或用户目录里有同名副本时,副本仍优先可见
截图
截图取自 v0.5.2 的 DSH Web 实机(深色主题)。素材都放在 assets/(位图图标与界面截图),不随 npm 包发布,所以这里用绝对地址引用,GitHub 与 npm 页面都能看到。
已安装清单:来源、调用策略、共享的 Agent、更新状态一屏看全;顶部切「已安装 / 订阅」。
只读查看器:列表不动,右侧抽屉渲染 SKILL.md;可切原文、看文件树与信息,也能进整页阅读。
AI 简介:点行内 ✨,看模型概括的「能做什么、什么时候用」;和调用策略等弹窗一样居中打开,生成过就直接读本地缓存。
订阅清单:只记 owner/repo 的上游快照;展开看仓库里有几个技能、哪些已装、各自状态。
添加订阅:填 owner/repo 或 GitHub URL,ref 与子目录可空;只关注,不下载技能。
界面
- 两个入口:默认在 DSH 设置页的「技能控制台」分区;页头 ⚙ 里打开「侧边栏入口」,左侧栏就会出现独立面板,切换立即生效。
- 一页两 tab:已安装 / 订阅。页头右侧是「新安装时自动共享」与「添加技能 / 添加订阅」。
- 每行五个动作:开关(启停)、查看、更新、共享设置、删除;技能名旁的 ✨ 打开 AI 简介;窄面板下隐藏「查看」,技能名本身仍是入口。状态标签覆盖最新 / 可更新 / 安装后有改动 / 上游已移除 / 软链断裂等。
- 窄面板不跳版:动作组按面板宽度自然换行,插件名始终完整;列表按宽度切两列;滚动只发生在列表区,切 tab、调整窗口都不会让整页翻面。
- Agent 多了不挤:每行最多展示 3 个,其余折成
+n,悬浮或聚焦即可看全。 - 找得到:支持按名称 / 来源 / Agent 搜索,按「可更新 / 待检查 / 已停用」筛选,平铺或按 Agent 分组。
- 上游即来源:插件的安装都来自 GitHub 仓库,来源(
owner/repo)就是上游。只要装进来就能检查更新,不存在「无上游」这种状态;「待检查」只表示这次没拿到上游结论(限流、网络、仓库 404 等),下次检查会重试。订阅只是批量 / 定时探测的调度载体,不是「能否检测更新」的前提。
查看技能内容
管理途中想知道「这个技能写了什么、值不值得留」,点技能名或行内「查看」即可:
- 抽屉速览:列表不动,右侧滑出只读抽屉;Esc / 点遮罩 / × 关闭,关闭后回到原来的筛选与滚动位置。
- 整页深读:抽屉底部「在整页打开」切到整页阅读(正文 + 左侧目录),顶部返回条回列表。
- 三个 tab:正文(渲染 / 原文切换,原文保留 frontmatter)、文件(目录树 + 单文件预览;
.md默认渲染、可切原文,其他文本直接出源码)、信息(来源、ref、commit、skillPath、内容哈希、安装 / 更新时间、共享至哪些 Agent、启停、安装后改动)。 - 只读:没有输入框和保存按钮。更新 / 共享设置按可写状态决定是否可用;状态文件损坏时仍可查看,管理动作禁用。
- 能预览什么:能按 UTF-8 解码的文本文件(
.md/.html/.jsx/.css/.sh/ 无扩展名脚本…)直接显示源码;单文件上限 256 KB(超出截断并提示);图片、音视频、压缩包等二进制显示「暂不支持预览」和文件名 / 大小。
技能简介(AI 生成)
有些技能只有英文说明,也有的光看标题不知道能干什么。已安装列表里每行技能名旁都有一个 ✨ 简介:
- 点开即看:生成过的直接显示本地缓存,秒开;没生成过才出现「生成简介」按钮,点它才调模型。
- 写什么:2–3 句能力简介——能做什么、什么时候用,并写清怎么触发:优先照抄
SKILL.md里的触发词 / 示例请求,原文没写就按作者描述归纳成可以直接说的话(关键词或一句示例),也可以写技能名 / 斜杠命令;必要时点出关键限制;用模型自己的话概括,不是逐字翻译。 - 发什么:
SKILL.md正文(超出maxInputBytes截断)与技能目录的文件名清单(最多 30 个),不读其他文件内容;语言跟随界面(中文 / English)。 - 缓存在本地:
$DSH_HOME/cache/skills-console/intros.json,按身份(owner/repo/技能名,无来源的技能用local/技能名)+ 语言分开存;SKILL.md内容哈希变了会提示「可能过期」,重新生成才覆盖。失败不缓存。旧版本放在$DSH_HOME/skills-console/intros.json的缓存仍会被只读读到,下次生成时写到新位置。 - 订阅与已安装共用一份:同一个技能在订阅页生成过简介后,装到本地再点 ✨ 会直接命中(按
owner/repo/技能名对齐),不再重复调用模型;同名但来自不同仓库的技能互不串。旧缓存(v4 及更早的技能名/remote:key)升级后视为冷启动、自动重建。 - 默认模型:优先用
config.intro.provider/model,没配就用 DSH 当前默认模型;同一时间只跑一个手动生成,重复点击返回「正在生成」。 - 批量生成:已安装列表工具栏有「批量生成简介」,只让你选生成范围(仅缺失 / 全部重算),其余(并发、遇错继续、时长)由插件定默认值。任务在后端逐条执行,前端轮询进度、可随时取消;关闭页面任务仍会继续,重开后能接着看进度、或对上次未完成的任务点「继续」(不会自动续跑,避免无谓烧额度)。同一时刻只允许一个批量任务。
- 订阅候选也能看:展开订阅后,条目行同样有
✨ 简介;按快照commit拉远端SKILL.md再生成,生成结果与已安装侧共用同一份缓存(按owner/repo/技能名),装到本地后直接命中,不挡「安装」。展开时还会显示作者自己的 frontmatter 描述,不花额度。 - 关闭方式:
config.intro.enabled = false(界面隐藏 ✨ 入口)。其他可调项见「数据与配置」。
检查与更新插件自身
页头身份胶囊旁有一枚内联更新胶囊,用来检查并更新「技能控制台」这个插件自己——它管的不是技能的上游,而是本插件在 npm 上的发布:
- 怎么查:按宿主
pluginManager.registries()给的 registry 计划(继承 profile 的镜像 / 私有源 / token 配置)依次问<registry>/<包名>/latest(8 秒超时,只取版本号,取不到才回退官方registry.npmjs.org),与本机安装的版本比较;Host 端 5 分钟缓存,连续打开不重复打网络。启动后约 20 秒会静默热身一次,不打扰你。 - 就地检查与更新:胶囊直接显示当前状态(已是最新 / 有新版本 / 更新中 / 已更新待重启 / 检查失败),右侧按钮就地提供「检查 / 更新 / 重试」。有新版本时点「更新」→ 再点「确认」即把本插件重装到最新版(两段确认,防误触)。桌面端有
pluginManager服务时走一键更新:HMR 开启时宿主会以already-installed拒绝覆盖同名已安装包,插件按官方更新路径先removeBundle再installBundle。 - 更新后必须完全退出 DSH:装完 ⌘Q 完全退出再打开 才会加载新版本;只关窗口、或刷新页面都不行(Host half 在 Electron 主进程里,刷新只重载前端 bundle)。宿主返回
restart-required时也是同一处置。版本判定以磁盘已安装版本为唯一真相(@morehao/dsh-plugin-kit@^0.5.0):更新装到磁盘后胶囊即变「已更新 · 重启生效」,不会再因为进程仍是旧代码而持续报「有新版本」。 - 面板消失不是坏了:一键
…(truncated)
Rendered from the README published on npm. Formatted only, not edited.
Versions
Published on npm::51,最后更新 2026-11-05