dsh-skill-import

August 15, 2026 · View on GitHub

给 DeepSeek Harness Web 对话界面加一个「导入 / 管理 Skill」入口(输入框 + 菜单里)。用户输入本地skill文件夹的绝对路径即可导入,导入后每个skill有开关:

  • 开启:模型可自主选择调用该skill(出现在 <available_skills> 目录里)
  • 关闭:模型不能自主调用(目录与 skill 工具双重拒绝),但用户仍可显式发 /skill名 手动调用

导入的 skill 持久存放在 $DSH_HOME/skill-imports/,重启不丢。单包布局,根目录即 bundle,一条命令安装。

结构

dsh-skill-import/            
├── cordis.patch.yml         单行装配
├── src/index.ts             node半边:导入/开关/移除服务+隔离skill provider+web路由
├── src/client/              浏览器半边
├── lib/                     已提交的构建产物
├── tests/                   core逻辑单测
├── sample-skill/            测试用样例skill
└── dev/probe.ts             一次性功能探针(验证开关语义用)

工作原理

  • 导入:把源文件夹复制到 $DSH_HOME/skill-imports/<name>/,在 settings 的 skill-imports 命名空间登记 { name, enabled, importedAt }
  • 发现:用 FileSystemSkillProvider 的隔离模式(includeDefaultRoots: false + customSkillDirs: [导入目录])注册一个 skill-imports provider,列出全部已导入 skill。
  • 开关:关闭的 skill 仍在目录里,但 invocation.modelInvocable 被降级为 false——模型侧目录与 skill 工具因此拒绝它;userInvocable 保留,/name 手动调用不受影响。切换后 invalidate() 刷新目录;不删文件,可随时再开。
  • 通信:不走 /api RPC 通道(该通道被网关独占,一个通道一个拦截器),而是用 ctx.webServer.register 挂自己的 JSON 路由:POST /skill-import/{list,import,set-enabled,remove},返回 { ok, value } | { ok: false, error } 信封;浏览器半边同源 fetch。无 Typert 装饰器,Node 22 原生可解析。

安装

本地 checkout(开发)

pnpm dsh plugin --profile web add ./dsh-skill-import
pnpm dsh web    # 重启后刷新页面

GitHub Release 附件(推荐)

#下载Release附件后执行
pnpm dsh plugin --profile web add file:dsh-skill-import-0.1.0.tgz

GitHub 仓库

pnpm dsh plugin --profile web add github:Trank-DTK/dsh-skill-import

使用

点输入框 + → 「导入 / 管理 Skill」→ 填样例路径 ...\dsh-skill-import\sample-skill(注意要绝对路径) → 导入。让模型用 skill 工具即可看到它;关掉开关后模型目录里消失,但你仍可发 /sample-skill 手动调用。

校验规则

  • 源文件夹顶层必须有 SKILL.md(或 <文件夹名>.md);子目录里的不会被识别。
  • frontmatter 必须有 name(kebab-case,如 sample-skill)与 description
  • 同名 skill 已导入时拒绝覆盖;需先「移除」再重新导入。
  • 直接手工复制文件夹进 $DSH_HOME/skill-imports/ 也生效(默认视为开启,可在对话框里关闭)。

开发

pnpm build       # tsdown:node 半边 lib/index.mjs + 浏览器半边 lib/client.js
pnpm typecheck   # tsc
pnpm test        # vitest 单测

安全提示

Skill 是写给模型的指令,导入即信任。请导入自己制作或来源可信的 skill 包。