dsh-skills
简体中文 | English
npm 包名:dsh-skills · GitHub 仓库: CocoSgt/dsh-skills
DeepSeek Harness(dsh)的第三方技能中枢:把散落各处的技能汇成全局库。 Claude Code 的 ~/.claude/skills、项目目录、.skill 包……统一入库到 ~/.dsh/skills(官方 skill-filesystem 的默认扫描根,watcher 实时),入库即 出现在输入框的「/」斜杠菜单。设置页里的「技能」导航页。
两种入库身份
| 引用(推荐) | 副本 | |
|---|---|---|
| 实现 | skills/<name> → 来源的符号链接 | 整树拷贝 |
| 同步 | 不存在同步问题:只有一份文件,编辑即编辑来源 | 与来源独立演化(state 记录来源备查) |
| 来源删了 | 面板标注「引用失效」,一键移除(不动来源) | 无影响 |
| 适用 | 来源长期存在且归你维护 | 来源临时(.skill 包、要删的仓库),或想改全局版不动来源 |
harness 的技能扫描、fs 提供者与 watcher 都原生跟随符号链接(实测 skill-filesystem 的 nodeEntryKind 显式处理),引用无需任何补丁,且在 全部加载形态(含 SDK/ACP,插件装不进去的那些)下生效。
概念对齐 harness 现实
- 没有「安装」这回事:技能放进扫描根即生效。本页管理的是全局库
(~/.dsh/skills,rank 400,对所有会话生效);项目目录里的技能 (.dsh/skills、.agents/skills,rank 100/200)由 harness 直接扫描, 不经过本页——它们「一直可调用」正是这个原因,同名时项目技能优先。
- 技能是文件树,不是一个 MD:编辑器只编辑
SKILL.md并明示还有几个
资源文件;资源用「打开目录」管理。导出 .skill 整树打包(引用则解引用 打包真实文件)。
- 编辑引用 = 编辑来源:编辑器头部黄字明示,保存直接写入来源文件。
页签
1. 全局技能:页首动作行「+ 新建技能」(内联展开,不用滚动)与 「上传 .skill」(选完文件即入库,无中间确认步);技能多时有筛选框。 每张卡:身份徽标(引用 → 来源 / 副本 / 本地创建 / 引用失效)、 资源文件数、非默认调用策略;描述默认 3 行折叠(点击展开);主操作 「编辑 SKILL.md」,导出/打开目录/复制名收进 ⋯ 菜单,删除行内两步确认 (引用只删链接)。 2. 发现:页首「扫描目录」chips 内联管理(每个 chip 标注技能数或 「不存在」,✕ 即时移除,+ 就地添加——不再有独立的「来源」页签); 扫描结果每项「引用」(主)/「复制」,「全部引用」走单次批量 RPC; 结果多时有筛选框。
架构
- 宿主端(
lib/index.mjs):SkillHubGateway继承TypertRemoteService,
暴露 skillHub/getState|runCommand|browseDirs 三个 RPC(browseDirs 供
来源选择器逐级浏览目录;runCommand 负载为命令联合,src-json 过 wire)。 此前的 3180–3189 端口探测 sidecar HTTP 服务已移除。第三方双副本场景下 SRC 发现失明,同时注册弱清单进宿主 typert registry。
- 浏览器端(
lib/client.js):$mount identity 编解码描述符 →
ctx.remote.skillHub;面板注册 settings.section 槽,「打开目录」走官方 host.openPath。
- 国际化:全部可见文案经官方 locale 服务渲染。zh/en 词典在
src/client/locales.ts;槽位注册声明 locale: NS,框架向组件 props 注入 随语言切换重推导的 t 席位。宿主 runCommand 结果携带稳定 code (如 import.linked、err.read.notFound)与可选 params、显式 level: 'error';客户端按 code 取本地化文案、取不到回退中文 message,状态行语气按 level 判定,不再对文案做正则猜测。
state 文件 ~/.dsh/skills/.skill-manager.json 记录来源配置与每个技能的 {mode, source, addedAt}(为二期漂移检测预留 schema)。文件名沿用旧 skill-manager 的命名,已有安装的状态得以保留。
安装
从 npm 安装:
dsh plugin --profile web add dsh-skills三个 dsh 插件可以一条命令一起安装:
dsh plugin --profile web add dsh-skills dsh-attachments dsh-inspectorGitHub 回退方式:
dsh plugin --profile web add github:CocoSgt/dsh-skills> 注意:自建 profile 的 ~/.dsh/profiles/<name>/package.json 里 > dsh.profile.bundles 必须包含 @deepseek-ai/dsh-base 与 > @deepseek-ai/dsh-web-app,否则启动会静默挂起。
安装后重启 dsh web。卸载:dsh plugin --profile web remove dsh-skills。
同系列插件
(npm)——附件注入:把任何 文件带进会话成卡;模型用 read_image 按路径读图,非视觉模型也不受阻。
(npm)——约束文件面板:按 harness 真实载入顺序查看/就地编辑当前会话的 AGENTS.md/CLAUDE.md 指引链, 附四个技能根状态。
已知限制
- 副本与来源的漂移检测/拉取/推回是二期;本期副本只记录来源不判定漂移。
- Windows 上目录引用用 junction;文件级引用无特权时自动退化为复制并如实提示。
- 引用技能的库内链接名固定于入库时刻;来源 frontmatter 改名后技能名跟着
来源走,链接名不自动更新(无害,仅目录名与技能名不一致)。
- 「全部引用」串行执行,失败逐条收集汇总(只展示首条,不刷屏)。
- 少数底层失败的宿主报错(如 zip 损坏细节)以
{message}参数透传,
英文界面下仍显示中文片段。
开发
pnpm install
pnpm run check # tsc --noEmit
pnpm run build # tsdown(宿主 ESM + 浏览器 bundle)注意:宿主方法参数名就是 RPC wire 字段名(Gateway SRC 模式),构建不得 压缩改写参数名。
标签
本包与仓库带有 dsh-plugin、dsh、deepseek-harness 等关键词/topics。 DeepSeek Harness 官方没有插件市场,也没有官方发现标签——第三方插件一旦 发布,没有任何东西把它关联回生态,用户无从找起。这套社区标签是唯一现实 的发现渠道(npm 搜 keywords:dsh-plugin;GitHub 搜 topic:dsh-plugin)。 虽非官方,但非常重要,所以给它上了。
许可
MIT