前言¶
在 DeepSeek Harness(DSH)Web GUI 中管理技能文件时,通常需要直接操作文件系统。当技能停止工作时,开发者往往难以定位问题所在,因为核心的 ctx.skills 服务只会报告它能成功加载的技能。插件作者希望有一个集中式的界面来查看所有技能的状态和文件内容,包括那些故意隐藏的 _SKILL.md 文件。
插件定位¶
@dr-co/dsh-skills 是 DeepSeek Harness Web GUI 的一个技能管理页面插件。它通过侧边栏新增一个「Skills」面板,集中展示三类技能:用户自定义的技能、插件捆绑的技能、以及插件提供但无对应文件的技能。插件维护者为 unera。
核心功能¶
技能分类与状态¶
列表分为三个部分,每部分有独立的标题、数量和空状态:
-
标准技能(
$DSH_HOME/skills目录下)
- 激活时显示绿色圆点,禁用时显示灰色
- 支持所有操作:查看、编辑、重命名、上传、下载(SKILL.md 或 ZIP)、启用/禁用 -
插件捆绑技能
- 来自每个已安装包的<pkg>/skills/*和<pkg>/assets/*目录
- 通过包清单发现
- 激活时显示粉色圆点和名称,禁用时显示灰粉色
- 仅支持查看和下载 -
插件提供的技能(无文件)
- 由ctx.skills.list()返回但磁盘上无对应文件的条目
- 显示粉色虚线圆点
- 支持查看和下载 SKILL.md(无 ZIP,因为无目录可归档)
状态指示¶
- 圆点大小为 11px,颜色编码:
- 绿色:
SKILL.md文件(标准技能) - 灰色:
_SKILL.md文件(被隐藏的标准技能) - 粉色:激活的插件捆绑技能
- 灰粉色:禁用的插件捆绑技能
-
红色:目录同时包含
SKILL.md和_SKILL.md(冲突) -
名称和路径在 UI 中截断显示,完整内容在 tooltip 中可见
文件操作¶
查看(View)
- 打开只读页面,显示原始文本
- 有「Read-only」徽章和「Close」按钮
- 如果技能内容来自插件(ctx.skills.get(name)),返回空内容时会显示「content is not available for this skill」
编辑(Edit)
- 打开全页面编辑器,使用等宽 textarea
- 底部有「Cancel」和「Save」按钮
- 保存前未修改内容时「Save」禁用
- 编辑器打开后,如果磁盘上的文件发生变化,保存前会给出警告
重命名(Rename)
- 重命名的是技能目录,而非 frontmatter 中的 name
- 内联编辑,默认填充当前名称
- 名称必须符合 kebab-case 规范
- 如果名称已存在,会被拒绝,原目录不变
- 重命名后行内状态立即更新,并显示操作结果
启用/禁用(Enable/Disable)
- 调用 DSH 自带的开关,将 SKILL.md 重命名为 _SKILL.md 或反之
- 操作后显示具体磁盘变更信息,如「File SKILL.md renamed to _SKILL.md」
下载
- Download SKILL.md:下载精确的文件字节,设置 Content-Disposition: attachment
- Download ZIP:下载整个技能目录及其附件(bin/、data/ 等),可原样上传
上传
- 页面按钮(创建)只接受 ZIP 文件,且 ZIP 必须有一个顶层文件夹包含 SKILL.md
- ZIP 的顶层文件夹名称作为技能名称(kebab-case)
- 如果同名技能已存在,会被拒绝,提示「a skill with this name already exists」
- 行菜单中的上传(替换)只接受单个 SKILL.md 文件,或 ZIP 且顶层文件夹名称与技能名称一致
- 安全顺序:
1. 验证路径不越界(拒绝遍历、绝对路径、驱动号、前导点)
2. 验证技能目录和文件真实存在(跳过符号链接)
3. 插件捆绑技能拒绝写入(403 read-only)
4. 上传大小限制
5. ZIP 解压到以点开头的临时目录
6. 验证所有成员后通过原子 rename() 切换
7. 切换失败时恢复原目录
语言支持¶
页面支持英文和俄语,所有通知和错误消息均已翻译。俄语通过 ctx.locale.addLanguage({ id: 'ru', label: 'Русский', fallback: 'en' }) 注册。
主题适配¶
使用 DSH shell 的绿色/灰色 token 保持一致性,插件定义自己的粉色主题:
- 浅色主题:
--dshsk-plugin-accent: #c2185b,对比度 5.87:1;--dshsk-plugin-accent-muted: #8d5f72,对比度 5.23:1 - 深色主题:
--dshsk-plugin-accent: #f472b6,对比度 5.93:1;--dshsk-plugin-accent-muted: #c98ba6,对比度 5.78:1
深色模式检测基于 body[data-ds-dark-theme] 属性,而非 prefers-color-scheme,以匹配 DSH 用户的实际主题设置。
安装与启用¶
插件通过 dsh.bundle 层安装,执行 dsh plugin add 会自动安装并挂载。
首次安装:
dsh plugin --profile <profile> add @dr-co/dsh-skills
从源码开发时:
npm install
npm run build
dsh plugin --profile <profile> add file:$PWD
安装后重启 Web GUI,侧边栏「Plugins」和「Tasks」之间会出现「Skills」行。
典型用法¶
安装后,侧边栏新增「Skills」按钮,点击打开技能列表:
- 查看所有已安装技能,通过颜色和圆点判断状态
- 对自己的技能点击「Edit」修改 frontmatter 或内容
- 发现技能不工作时,查看隐藏的
_SKILL.md文件 - 通过「Download ZIP」备份整个技能目录
- 通过「Download SKILL.md」获取单个文件用于调试
- 通过「Upload」从 ZIP 恢复技能
适用场景与注意¶
此插件适合需要集中管理 DeepSeek Harness 技能的开发者和运维人员。如果你需要:
- 查看技能文件的原始内容
- 诊断技能不工作的原因
- 批量管理技能的启用/禁用
- 跨插件共享技能或查看插件提供的技能
插件以当前 DSH 进程的权限运行,安装前应检查源码与许可证。插件仅提供技能管理功能,不涉及模型推理或任务调度。
总结¶
@dr-co/dsh-skills 通过集中式界面解决了技能文件分散管理的问题,提供查看、编辑、下载、上传、启用/禁用等完整操作。插件尊重 DSH 的权限模型,对插件捆绑技能的写入操作进行限制,并通过原子操作保证文件系统安全。配合中英文支持和主题适配,可以融入现有的 DSH 工作流。