dsh-skills
Đã xác minhdsh-skills · v0.1.1 · MIT · Giao diện web
Global skill hub for dsh: aggregates Claude Code, project, and .skill-package skills into ~/.dsh/skills with reference/copy import and slash-menu usage
Cài đặt
dsh plugin add dsh-skills Xác nhận layer đã áp bằng dsh --profile default --dump-config — xem hướng dẫn cài plugin.
Mã nguồn
Thẻ
Readme
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 整树打包(引用则解引用 打包真实文件)。 - 编辑引用 = 编辑来源:编辑器头部黄字明示,保存直接写入来源文件。
页签
- 全局技能:页首动作行「+ 新建技能」(内联展开,不用滚动)与
「上传 .skill」(选完文件即入库,无中间确认步);技能多时有筛选框。
每张卡:身份徽标(
引用 → 来源/副本/本地创建/引用失效)、 资源文件数、非默认调用策略;描述默认 3 行折叠(点击展开);主操作 「编辑 SKILL.md」,导出/打开目录/复制名收进 ⋯ 菜单,删除行内两步确认 (引用只删链接)。 - 发现:页首「扫描目录」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-inspector
GitHub 回退方式:
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。
同系列插件
- dsh-attachments
(npm)——附件注入:把任何
文件带进会话成卡;模型用
read_image按路径读图,非视觉模型也不受阻。 - dsh-inspector (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 模式),构建不得 压缩改写参数名。
许可
MIT